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!
评论