ubuntu20.04 编译内核源码5.15.58

本文档详细介绍了如何在Ubuntu系统上手动下载、编译和安装Linux内核5.15.58。首先,通过`apt-get`安装必要的依赖,然后解压内核源码并配置内核参数。接着,使用`make menuconfig`进行文本配置,选择合适的内核选项。执行`make -j8`进行多线程编译,随后安装模块并生成内核镜像。最后,更新系统启动参数,拷贝新内核文件至相应目录,并重启系统完成内核替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在的内核版本:

ok@ok-VirtualBox:~$ uname -a
Linux ok-VirtualBox 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

 5.15.0-41

下载新的内核源码:The Linux Kernel Archives

 

如果下载网络过慢,可以下载:linuxsrc5.15.58-Linux文档类资源-CSDN下载

 

1 安装环境

sudo apt-get install ncurses-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install libssl-dev
sudo apt install dwarves
sudo apt-get install zstd

解压源码

xz -d   linux-5.15.58.tar.xz
tar -xvf linux-5.15.58.tar

2 配置内核相关参数项

首先进入代码根目录

ok@ok-VirtualBox:~/Downloads$ cd linux-5.15.58/

把本机config配置拷贝到我们前面解压出来的内核源码根目录下:

cp -v /boot/config-$(uname -r) .config

 如果之前编译过内核源码,由于出错或者其它原因想重新编译,则需要先清理下之前的编译结果,执行:

make mrproper

采用基于文本的菜单配置,适用性强,也可用于远程编译内核

sudo make menuconfig

 

 

 

编译内核源码

执行make命令即可,但是内核源码庞大,编译下来很费时间(跟机器性能有关,一般需要数十分钟到几个小时),可以make加上-jn选项多线程编译内核来加速内核编译,如:

# j后面数字,可以设置成cpu个数
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make -j8

 如果报错:

编译内核错误——*** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list” 需求。 停止

sudo gedit .config

删掉双引号中的内容(保留双引号):
 

 安装驱动

root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make modules_install

完成: 

在/lib/moudles下生成了:

 

当前版本:

 

 生成内核压缩镜像文件

root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make bzImage

在 ./arch/x86/boot 下生成bzImage

 

        bzImage:是压缩的内核镜像文件,bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。比zImage有更高的压缩率。
    vmlinuz:是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。一般是一个软链接。但是,它已经丢失了调试信息等,不可用于调试,这就是为什么perf和systemtap等内核级别的调试软件安装的时候,需要重新编译内核的原因。同理,解压缩vmlinuz是可以得到vmlinux的。但是失去了调试信息。相对于vmlinux,它增加了解压缩和boot的部分


安装

        拷贝镜像文件:

root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp arch/x86/boot/bzImage /boot/vmlinuz-5.15.58
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp .config /boot/config-5.15.58

进入/lib/modules/5.15.58/

root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cd /lib/modules/5.15.58/
root@ok-VirtualBox:/lib/modules/5.15.58# ls
build                      modules.builtin.bin      modules.softdep
kernel                     modules.builtin.modinfo  modules.symbols
modules.alias              modules.dep              modules.symbols.bin
modules.alias.bin          modules.dep.bin          source
modules.builtin            modules.devname
modules.builtin.alias.bin  modules.order
root@ok-VirtualBox:/lib/modules/5.15.58# update-initramfs -c -k 5.15.58

更改系统启动参数

root@ok-VirtualBox:/lib/modules/5.15.58# update-grub

 

 重启:

内核替换成功:

 

### 编译内核模块或设备驱动 #### 准备工作 为了确保编译过程顺利,在开始之前需要确认已经安装了必要的工具和库。这可以通过执行以下命令来完成: ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev dwarves ``` 对于特定需求,比如压缩支持,则可能还需要额外的包,如`liblzma-dev`[^3]。 #### 下载并解压内核源码 如果还没有获取目标版本的内核源代码,可以从官方站点下载,并将其放置在一个合适的位置进行解压操作。这里假设使用的是5.15.58版本作为例子: ```bash wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.58.tar.xz tar xf linux-5.15.58.tar.xz cd linux-5.15.58/ ``` #### 配置内核选项 进入内核源码目录后,可以基于当前运行系统的配置创建一个新的`.config`文件,也可以手动调整各项设置以适应具体的需求: ```bash cp /boot/config-$(uname -r) ./.config make olddefconfig ``` 此步骤会读取现有配置并应用默认值给任何新的选项。如果有特殊定制化的要求,还可以通过图形界面(`menuconfig`)或其他方式进一步编辑这些参数。 #### 清理旧数据 为了避免潜在冲突,建议先清理之前的构建残留物: ```bash make clean make mrproper ``` 注意:上述命令将会移除所有已有的编译产物以及自定义配置项;仅当确实有必要时才应被执行。 #### 开始编译 一旦准备就绪,就可以启动实际的编译流程了。考虑到效率问题,通常会选择多线程模式加快速度,例如利用CPU全部核心来进行处理: ```bash make -j$(nproc) ``` 这里的`-j$(nproc)`表示自动检测处理器的核心数目并据此设定并发作业的数量[^4]。 #### 安装模块 成功完成后,下一步就是把新编译出来的模块部署到位: ```bash sudo make modules_install -j$(nproc) ``` 这条指令不仅负责复制生成好的ko文件至相应位置,还会同步更新依赖关系数据库以便后续加载正常运作[^1]。 #### 更新引导记录 最后一步是要让GRUB识别到最新的内核镜像及其配套资源,从而能够在下次开机时提供选择机会: ```bash sudo update-initramfs -c -k $(make kernelrelease) sudo update-grub reboot ``` 以上即是在Ubuntu 20.04平台上针对指定版本(此处为5.15.58)实施整个内核及相关组件编译工作的概览介绍。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值