1.从零开始学Linux内核源码 - 源码下载及配置编译
所有操作均是linux-6.8.2版本
kernel源码下载
kernel目录结构

目录说明
| 目录 | 说明 |
|---|---|
| arch | 包含了各种不同的CPU体系架构的代码,如果ARM、x86、MIPS等 |
| block | 包含块设备相关的代码 |
| crets | 包含了用于签名和验证内核模块的证书文件和工具 |
| crypto | 包含加密相关的代码 |
| Documentation | 包含了内核的文档,包括各种文档、注释和帮助文件 |
| drivers | 含了设备驱动程序的源代码,如输入输出设备、网络设备等 |
| fs | 包含了文件系统相关的代码,如 ext4、NTFS、FAT 等 |
| include | 包含了一些头文件,用于引入定义和声明 |
| init | 包含了启动和初始化代码 |
| io_uring | 包含了与 io_uring 框架相关的代码 |
| ipc | 包含了进程间通信相关的代码 |
| kernel | 包含了内核的核心代码 |
| lib | 包含了一些通用的函数库 |
| mm | 包含了内存管理相关的代码 |
| net | 包含了网络协议栈相关的代码 |
| rust | 引入了一些rust特性 |
| samples | 包含了一些示例代码 |
| scripts | 包含了一些辅助脚本,用于构建和维护内核 |
| security | 包含了安全子系统相关的代码 |
| sound | 包含了声音子系统相关的代码 |
| tools | 包含了一些工具,用于辅助内核开发和调试 |
| usr | 包含了用户空间工具和库,这些工具和库通常用于与内核交互 |
| virt | 包含了虚拟化相关的代码 |
文件说明
| 文件 | 说明 |
|---|---|
| COPYING | 包含了许可证信息 |
| CREDITS | 包含了对 Linux 内核贡献者的致谢 |
| Kbuild | 用于管理内核源代码的编译和构建过程 |
| Kconfig | 用于配置内核编译时的各种选项和特性 |
| MAINTAINERS | 包含了 Linux 内核的维护者列表 |
| Makefile | 系统编译和构建脚本 |
| README | 从入门到入土😭 |
README
提供了两个非常重要的信息:
- Documentation/admin-guide/README.rst :什么是Linux以及如何编译和配置他?
- Documentation/process/changes.rst :编译内核的最小配置?编译遇到错误,参考该文章
安装内核
首次安装
使用下面的命令:该命令是将文件提取并解压到当前文件夹,当然也可以选择其他的解压方式
xz -cd linux-6.8.2.tar.xz | tar xvf - |
更新patch
在linux内核源码的根目录执行下面的命令:/path/to是patch所在目录
xz -cd /path/to/patch-6.x.xz | patch -p1 |
或者使用scripts/patch-kernel脚本自动升级patch
配置并编译内核
可以通过make O=output/dir设置编译目录和输出目录。如果没有配置目录,则编译的临时文件都将在源码的根目录产生。如果使用了参数,后续执行的命令建议都带着参数使用
cd linux-6.8.2 |
内核配置
可以通过make menuconfig命令调用图形配置界面配置内核,当然也支持其他的方法修改配置,可以使用make help查看更多的选项。
如下图:方向键控制选项,ENTER键进入子菜单,space空格键更改编译方式,保存后会将修改后的配置保存到.config文件里:
[ ]: 不编译 |
使用默认配置文件,根据当前操作架构作为默认配置
make O=./output defconfig |

内核编译
执行下面的命令,编译过程生成的中间产物,和最终产物都会在当前目录的output目录下产生:
make O=./output |
最终编译的kernel在./output/arch/x86_64/boot/bzImage
内核Makefile常用的命令行参数
| 参数 | 使用 | 说明 |
|---|---|---|
| ARCH | make ARCH=arm | 指定目标架构,如x86、ARM等,该架构代码必须在arch文件夹中存在 |
| CROSS_COMPILE | make CROSS_COMPILE=arm-linux-gnueabi- | 指定编译使用的交叉工具链前缀 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 L.S.W!
评论