linux 内核编译升级操作教程

模块2:linux内核编译编译、安装

——以下是本人的个人报告

一、简化流程:

  • 内核资源包准备(包含下载、解压)

(wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-x.xx.x.tar.xz  

tar-xf linux-x.xx.x.tar.xz)

  • 安装内核依赖的库文件

(sudo apt-get install git fakeroot build-essential ncurses-dev xz-untils libssl-dev bc flex libelf-dev bison dwarves zstd)

  • 进入内核包根目录操作:cd linux-x.xx.x
  • 配置编译选项文件

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

  • .config文件修改
  • 编译分配线程

cat /proc/cpuinfo | grep processor | wc -l #查看核数

  • 内核编译:sudo make -j x #分配x个线程进行编译

内核模块安装:sudo make INSTALL_MOD_STRIP=1 modules_install

  • 递归调用压缩内核镜像:sudo make bzImage
  • 内核安装过程:sudo make install

二、具体流程及解释

  • 内核资源包准备(包含下载、解压):本次选取linux-5.19.8(其余类似),这个过程非程序员可以用windows系统更新来理解,如升级win11需要先下载升级的资源,其实就是win11的内核包

(wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-x.xx.x.tar.xz

tar-xf linux-x.xx.x.tar.xz)

查看当前内核版本信息,准备进行内核升级:当前版本为:linux-5.13.0-44-generic,升级内核版本

  1. 查看当前系统及内核版本信息

更换为新版本linux-5.19.8,下载命令行:

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.8.tar.gz

 

  1. 下载新版本内核资源

       下载完内核资源包后,解压资源包

  • 安装内核依赖的库文件:功能上为虚拟机装配如git、fakeroot(虚拟环境打包工具)、ncurees-dev(为终端base-on-txt提供API编程库)等的资源包,支持某些功能或者便于后续,使用按照功能来看,这一步对某些版本升级可能并不必要,并且发现缺失,可以补装

(sudo apt-get install git fakeroot build-essential ncurses-dev xz-untils libssl-dev bc flex libelf-dev bison dwarves zstd)

  1. 安装linux-5.19.8的内核依赖库

  • 进入内核包根目录操作:cd linux-x.xx.x
  • 适应移植机器环境:操作上对应于配置编译选项文件,这里说的偏功能化,仅仅是为了好理解其意义。.config文件的内容是内核编译的参考文件,决定了那些驱动会被编译到内核中去,一般采用的策略是拷贝当前内核的配置更好的适应机器环境

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

 

  1. 配置内核编译选项

       直接拷贝当前版本的配置文件,后续响应修改即可,上述,拷贝到了.config文件中

  • 关于.config文件修改的两项内容,我检索了大量文件,但基本都是操作示意,关于原因上的基本没说明...不过Keys的吸引力还是让我强行给他查明白了...分别是内核模块签名中的认证密钥和系统注销密钥,前者认证模块签名正确与否,发起内核模块加载时,认证不通过,就会退出模块加载,详细参考博客文章

 

  1. 打开menuconfig

  1. 定位文件位置

输入/,在menu中检索,文件location见上述目录

 

 

准备好内核依赖库和编译配置文件后,分配线程编译内核,该过程耗时较长

  • 进入编译时可以分配多线程来进行:

cat /proc/cpuinfo | grep processor | wc -l #查看核数

sudo make -j x #分配x个线程进行编译

  • 内核编译:之后进行本次实验耗时最久的部分,内核编译....这个过程干了很多事,从它的意义来看,他可能是加入了一些新的内核模块支持能更多的功能,或者是修复了某些此前内核模块带有的问题,或者做了个系统减肥也不一定,总之,好处多,对于学生的话,熟悉内核工作原理,的确有用....费时主要是因为所有内核模块都要重新编译,2h足矣!

  1. 编译内核

  • 内核模块安装:这里应当可以理解为内核驱动模块的安装,本条命令后会生成一个initrd压缩文件,里面存储了启动阶段必需的驱动模块,内核启动先解压这个文件,之后装载为根目录载入模块启动,其过大会导致启动极慢或者“爆掉”...至于这些模块的作用可以对比helloworld的驱动模块

  • 这里建议更改命令行sudo makemodules_install限制生成的initial ramdisk映像文件大小,否则可能生成过大的initrd文件(如500M),可能导致内核启动时卡在“loading initial ramdisk”,拖慢启动时间

sudo make INSTALL_MOD_STRIP=1 modules_install

  • 递归调用压缩内核镜像:bzImage是诸多Markfile文件递归调用的压缩,执行make时,系统索引到bzImage的依赖源头,不停地调用各个Markfile,最后压缩为一个bzImage.其实这里跟后面helloworld内核模块编写MarkFile的部分对应上了,所以bzImage叫压缩的内核映像是比较自然的

  • 内核安装过程:这里将安装已经编译好的内核,包括检查此前编译成功与否,装载内核的静态部分,引导编译系统创建初始initramdisk映像,通知引导程序(boot loader)添加新内核等,至此内核编译升级过程结束
  1. 编译完成后,安装模块和内核

  • 以上过程完成后即可重启内核查看是否成功
  1. 重启登录

  • 查看内核版本信息
  •  
  1. 内核升级成功

显示为目标版本:linux-5.19.8,内核编译升级成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值