linux kernel的编译安装

编译环境:ubuntu server VM

1.编译依赖的安装:

build-essential: Build tools (C compiler, make, …)
libncurses-dev: ncurses library for interactive menu
bison: To generate lexical analyzers
flex: To generate parsers
libssl-dev: OpenSSL library
libelf-dev: ELF object file access library

安装命令:

sudo apt update

sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev

2.kernel源文件下载:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.172.tar.xz

tar -xf linux-4.19.172.tar.xz

cd linux-4.19.172

 

4(版本号).19(主要更新号).172(次要更新号)

在版本号和主要更新号相同的情况下,linux kernel的API是不会发生变化的,次要更新主要是安全补丁等相关的更新

tar -xf:  x表明是解压缩文件,f是屏蔽输出(即不会显示解压文件的详细情况,但是有error还是会输出)

3.kernel配置

在没有 .config 文件存在的情况下 使用:

make defconfig

生成 .config 文件

<3.1>.自动通过比对现有linux内核的config与将要生成的linux config进行设置

相同的label设置相同的选项,不同的label进行询问

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

yes "" | make oldconfig 

前面的 yes "" 是对每一个被询问的config选项选择yes.(当所有不同的选项希望全部选择yes时可以选择加上)

<3.2>.生成可视化的选项界面进行手动选择:

 make menuconfig

Y则编译进kernel image
N则排除对应选项
M则将其编译为可调用的 module,类似硬件驱动一样在需要的时候进行调用

在 menuconfig 界面的第二行可以设置内部版本号,在内核版本号后面加上自己的信息: e.g. 4.19.172-ABCD

<1>和<2>可以选择其中一个进行

<3.可选>. 使用 make localmodconfig 将没有被选中的模块进行排除

后面的编译中将不会编译已经选择N的模块,会显著缩短编译时间,

但是未来如果需要使用被排除的模块则需要重新编译kernel

(使用 lsmod 可以查看目前已被调用的module)

yes "" | make oldconfig

4.源代码编译:

 make –j <N> (N是同时编译的线程数,这里可以使用 $(nproc) 将其设置为电脑核心数)

make –j  $(nproc)  或者 make –j  3 或者 make –j3  均可运行

编译过程中可能会有warning,其可能是虚拟机设置的内存空间过大或是其他问题,只要不是error,并不会影响后续的执行

5.内核安装:

sudo make modules_install  (将编译完成的内核安装到 /lib/modules 目录)

sudo make install (将内核image安装到 /boot/ 文件夹)

6.调整boot loader

编辑位于 /etc/default/grub 的 boot loader 的配置文件,将对应行进行修改,若没有则需要进行添加

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true     #开启保存默认内核

GRUB_TIMEOUT_STYLE=menu  #开启开机菜单

GRUB_TIMEOUT=10         #开机菜单延时

应用刚刚编辑造成的改变
sudo update-grub

6.重启虚拟机,并在开机菜单中选择刚刚编译好的内核版本

sudo reboot

7.检查安装

重新开机后输入以下命令, 应该看到刚刚自己设定的版本号

uname -r 

-> 4.19.172-ABCD

posted @ 2021-02-01 13:37  NoobSir  阅读(240)  评论(0编辑  收藏  举报