Linux内核及补丁编译

Linux内核及补丁编译

一、源码下载

1、查看当前linux内核版本

uname -r

2、获取对应版本的linux源码

方式1:源方式下载

sudo apt search linux-source  ##找到对应版本的linux-source
sudo apt install linux-source-5.4.0  ##以5.4.0举例
mkdir ~/Projects
cd ~/Projects
sudo cp /usr/src/linux-source-5.4.0.tar.bz2 ./

安装完成后,源码将保存在/usr/src/linux-source-5.4.0.tar.bz2

方式2:官方代码库下载 Linux Kernel

找到自己需要版本的代码压缩包,下载

mkdir ~/Projects
cd ~/Projects
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.gz

二、解压源码

解码源方式下,解压压缩包

cd ~/Projects
tar jxvf -f linux-source-5.4.0.tar.bz2

官方代码库方式下,解压压缩包

mkdir ~/Projects
tar -zxvf linux-5.4.tar.gz
mv linux-5.4 linux-5.4.0

三、编译准备

sudo apt install gcc make libncurses5-dev libssl-dev build-essential openssl bison flex libelf-dev libelf-devel elfutils-libelf-devel

注意:最后三个elf的开发包安装成功其中之一即可

四、补丁patch

1、下载补丁

以squashfs的一个patch为例 9996-fs_squashfs_improve_squashfs_error_resistance.patch

浏览器下载这个patch文件放到~/Projects/linux-5.4.0/目录下

2、补丁安装

cd ~/Projects/linux-5.4.0/
cat 9996-fs_squashfs_improve_squashfs_error_resistance.patch | patch -p1

至此,补丁安装完成

五、内核编译

1、代码清理

make mrproper  #删除所有的编译生成文件、内核配置文件

或者

make clean  #删除大多数的编译生成文件,但是会保留内核的配置文件.config

2、内核配置

make oldconfig #现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题

如果没有特别配置的,直接一路enter

3、代码编译

make bzImage -j 8 #编译内核
make modules -j 8 #编译扩展模块

或者

make -j 8 #编译内核和扩展模块

等待编译完成

六、内核安装

make modules_install #安装扩展模块
make install #安装内核

查看是否安装完成

> grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
	menuentry 'Ubuntu, with Linux 5.4.275' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.275-advanced-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
	menuentry 'Ubuntu, with Linux 5.4.275 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.275-recovery-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
	menuentry 'Ubuntu, with Linux 5.4.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-advanced-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {
	menuentry 'Ubuntu, with Linux 5.4.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-recovery-ec3e91d6-c1a7-4843-b385-319a8ab2a229' {

七、启用新内核

1、修改grub配置

/etc/default/grub的 GRUB_DEFAULT=那一行修改如下

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.275"

2、更新grub

sudo update-grub

八、重启系统

sudo reboot
uname -r #查看内核版本
posted @ 2024-08-09 13:57  _清风_明月  阅读(282)  评论(0)    收藏  举报