ARM《7》_编译生成linux内核中的内核模块
0、前言:
- 这是一篇以问题为导向,的技术贴!
- 探究linux内核中的 内核模块 如何编译生成;
基础概念库:
1、linux内核源码:
-
tar -zxvf linux-4.14.21.tar.gz 解压的是 Linux 内核的源码包,它不是一个完整的 Linux 系统,而是 Linux 内核的源代码集合。解压后会生成一个名为 linux-4.14.21 的目录,里面包含了 Linux 内核 4.14.21 版本的所有源代码文件:
- 内核核心代码(如 kernel/、fs/、net/ 目录);
- 硬件驱动代码(如 drivers/ 目录);
- 编译配置文件(如 Makefile、.config 模板);文档和工具脚本等。这些文件的作用是供开发者编译、定制或研究 Linux 内核。
-
一个完整的 Linux 系统需要包含:
- 内核:即你解压的 linux-4.14.21 编译后的可执行程序(如 vmlinuz);
- 用户态组件:包括 Shell(如 bash)、系统工具(如 ls、cd)、库文件(如 libc)、应用程序等;
- 文件系统:包含系统配置、用户数据、启动脚本等。
-
linux-4.14.21.tar.gz 仅提供了内核的源代码,需要经过编译、配置后,才能生成可运行的内核。
2、在内核文件编译前,设置make menuconfig 后出现的三种内核文件编译选择模式的解释:
-
make menuconfig 中这三种选择对应内核组件的不同编译和加载方式,核心逻辑就是“按需决定组件是否编译、以及如何集成到系统中”。
-
三种选择的具体含义:
-
选 M (Module,模块模式)
- 编译结果:生成独立的 .ko 模块文件(如 hello.ko ),不直接打包进内核镜像。
- 加载时机:系统启动后,通过 insmod / modprobe 手动加载,不需要时用 rmmod 卸载,实现“动态按需加载”。
- 适用场景:硬件驱动(如USB、网卡驱动)、测试组件等,避免内核镜像过大。
-
选 * (Built-in,内置模式)
- 编译结果:组件代码直接编译进内核镜像(如 vmlinuz ),成为内核的一部分。
- 加载时机:系统启动时随内核一起加载,无需手动操作,重启后仍生效。
- 适用场景:内核核心功能(如进程管理、内存管理)
