当前位置: 首页 > news >正文

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这个命令。

相关文章:

  • 【正则表达式】核心知识点全景解析
  • MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典(一)
  • 基于SpringBoot的课程管理系统
  • linux与c语言基础知识(未全部完成)
  • Python图形界面编程(一)
  • 常用第三方库精讲:cached_network_image图片加载优化
  • 每天五分钟深度学习PyTorch:图像的处理的上采样和下采样
  • 第四节:核心概念高频题-Vue生命周期钩子变化
  • 解锁webpack:对html、css、js及图片资源的抽离打包处理
  • 麒麟信安与中教汇控达成战略合作,共绘教育信息化新蓝图
  • 修电脑之电脑没有声音
  • HarmonyOS-ArkUI: 组件内转场(transition)
  • rpm包管理
  • C语言 ——— 分支循环语句
  • 第51讲:AI在农业政策支持系统中的应用——用人工智能点亮科学决策的新范式
  • 绿色森林人文生活纪实摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?
  • Android 回显
  • Ubuntu 20.04 安装Docker 全过程
  • (2025最新版)CUDA安装及环境配置
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿
  • 解放军报社论:谱写新时代双拥工作崭新篇章
  • 宁德时代与广汽等五车企发布10款巧克力换电新车型:年内将将完成30城1000站计划
  • 教培机构向学员提供盗版教材,法院:应承担著作权侵权责任
  • 校友伉俪捐赠10亿元!成立复旦大学学敏高等研究院
  • 国防部发布、中国军号及多家央媒官博发祝福海报:人民海军76岁生日快乐