文章

Linux内核编译

编译我的第一个Linux内核

Linux内核编译

编译第一个Linux内核

准备

  • 前往 https://www.kernel.org/ 下载kernel源码
  • 完整的Linux环境 Linux ntg-make-env 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • 更新软件包

1. 安装依赖

安装以下软件包

sudo apt-get install libncurses5-dev build-essential openssl flex bison libssl-dev libzstd-dev zstd libelf-dev

2.解压源码

使用以下命令解压:

sudo tar -xvJf linux-x.xx.xxx.tar

3.设置参数

  1. 清理
1
2
make mrproper
make clean
  1. 进入配置菜单
1
make menuconfig
  1. 修改并保存为 .config 后退出

  2. 修改不存在的pem文件

1
vim .config

使用 / 搜索以下字符串并将值改为空

1
2
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

改为

1
2
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

4.编译

使用16线程编译

1
make -j16 bzImage && make -j16 modules && make modules_install && make install

5.应用新内核

  1. 复制内核
    1
    2
    
    cp arch/x86/boot/bzImage /boot/
    cp /System.map /boot/
    
  2. 建立引导内存盘
    1
    
    mkinitramfs -o /boot/initrd.img-x.xx.xxx-your-version
    
  3. 更新引导
    1
    2
    
    update-initramfs -c -k x.xx.xxx-your-version
    update-grub2
    
  4. 修改启动顺序
    1
    
    grep menuentry /boot/grub/grub.cfg
    

若第一项为新的内核,则不需要修改,若不是,使用 vim /boot/grub/grub.cfg 将代码块移至前面

  1. 应用更改,重启
    1
    2
    
    update-grub
    reboot
    

重启后需关闭UEFI安全引导,否则会报错签名错误无法进入系统

本文由作者按照 CC BY 4.0 进行授权