Linux内核编译全流程详解与实战指南

Linux内核编译

一、 实验题目

下载、编译内核源代码[1][2]

启动测试所编译出来的内核

二、 相关原理与知识

Linux内核基本概念
  1. 内核:操作系统的核心部分,负责管理系统资源、硬件抽象、进程调度等核心功能

内核模块:可动态加载到内核中的代码,扩展内核功能而不需要重新编译整个内核

内核配置:通过配置选项决定哪些功能被编译进内核或作为模块

  1. 内核编译流程:

获取源代码:从官方仓库下载内核源代码

配置内核:选择需要编译的功能和驱动

编译内核:将源代码编译为可执行的二进制文件

安装内核:将编译好的内核安装到系统中

启动测试:使用新编译的内核启动系统

  1. 启动过程:

引导加载程序(如GRUB)加载内核映像和initramfs

内核初始化硬件设备

挂载根文件系统

启动init进程(现代系统通常是systemd)

三、实验过程

  1. 安装依赖工具
sudo apt update
sudo apt install git build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison zstd openssh-server vim net-tools -y
  1. 下载内核源代码

进入Linux官网https://www.kernel.org/下载对应版本的内核。我这里下载的是6.14.3最新版的内核。

sudo tar xvf ./linux-6.14.3.tar.xz -C /usr/src/
cd linux-6.14.3/
  1. 配置内核选项(默认save,然后exit)
make menuconfig
  1. 编辑.config配置文件。
vim ./.config

将CONFIG_SYSTEM_TRUSTED_KEYS等号右侧字符串置空即可(在开发或测试环境中,我们可能不需要严格的模块签名验证)。将CONFIG_SYSTEM_REVOCATION_KEYS右侧字符串置空。(指定被吊销的密钥文件)如下图所示。

将CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=1024,将数字1024改为4096。(定义了内核可以承载的额外证书空间大小(单位:字节):)

  1. 编译内核 (build.log:保存编译输出的日志文件)
make -j12 2>&1 | tee build.log
  1. 编译和安装模块(NSTALL_MOD_STRIP=1移除模块中的调试信息)
make modules
make modules_install INSTALL_MOD_STRIP=1
  1. 重启检验成果。
reboot

四、 实验结果与分析

make -j12 2>&1 | tee build.log

现象:多线程编译(-j12)时CPU利用率接近100%,输出显示并行构建多个目标文件(如drivers/char/random.o)

原理:

日志记录的重要性:

完整记录编译过程(约5-20MB日志文件)

保留编译警告信息供后续分析

CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE 从1024改为4096的原因

背景知识:

这个选项定义了内核可以承载的额外证书空间大小(单位:字节):

用于存储除内置证书外的额外证书

影响内核处理SSL/TLS等加密操作的能力

最终结果:成功更换内核。

我原来的内核为5.15.0

现在为:6.14.3

五、问题总结

  1. 缺少依赖

下载所有相关的,尤其是zstd,这个是配置文件中使用的,但是虚拟机安装的ubuntu初始版什么都没有,需要自己下载。

sudo apt install build-essential libncurses-dev bison flex libssl-dev
  1. 内核选项堆栈报警

将CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=1024,将数字1024改为4096。(定义了内核可以承载的额外证书空间大小(单位:字节)。

  1. CONFIG_SYSTEM_TRUSTED_KEYS字符验证修改
  1. Grup卡在加载load redmisk界面

重新编译下载,按步骤使用:make modules_install INSTALL_MOD_STRIP=1这个命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值