3.4.1Linux内核编译之将驱动编译进内核
- 在内核目录里的源码:可以编译为.ko;可以编译进内核映像文件zImage。make zImage
- 把驱动程序放进内核:可以编译进内核,也可以编译为模块。怎么放进内核文件?
- Linux的配置系统包括Makefile 、Kconfig、配置工具。Makefile存在于内核源代码中,定义Linux的内核编译规则,会定义变量为 tristate 或者Boolean型;Kconfig是配置文件,提供配置选择的功能。
- 在内核所在目录运行 make menuconfig 命令,会生成.config配置文件,这个文件会显示Makefile中配置变量的值,例如 y( 编译进内核)、m(编译为模块)、n(未设置);如下图(Makefile文件):
- make menuconfig命令可以修改.config文件中的值,这个命令得到的界面中的配置选项来自各个目录Kconfig组成,如下图,
- 手动把一个驱动编译进内核:(1)现在内核drivers/char/Kconfig文件下,编写一段代码用于说明配置选择:此处变量类型可以为bool 或者 tristate;
(2)回到内核目录下 ,运行make menuconfig,查找hello(注意symbol处是大写),可以看到如下提示:按提示路径在选项中找到这个选项,配置选项可以设为y和n,
(3)设置为n:则变量未设置;运行vi .config命令,输入 /Hello ,可以找到这个选项变量;也可以设置为tristate,配置为m;
(4)接下来,复制驱动源代码到当前内核char目录, cp ~/test/hello.c .
(5)修改内核目录,vi Makefile ;增加一条 : obj-$(CONFIG_Hello) += hello.o
(6)若上述变量在.config文件中配置为m 则执行编译模块指令: make modules ; 若配置为 y ,则执行编译内核映像指令: make zImage
编译应该会报错:
是因为没有配置 ARCH=arm, 将命令更新为 make ARCH=arm modules ; make ARCH=arm zImage;在源代码的根目录下,得到未压缩的内核映像文件vmlinux和内核符号表文件system.map ;在arch/arm/boot 目录下会得到压缩的内核映像文件zImage;在内核各对应目录内得到选中的内核模块。
默认配置:内核配置包含的条目很多,arch/arm/configs/xxx_defconfig 文件包含了许多电路板的默认配置,只需要运行 make ARCH=arm xxx_defconfig 就可以为xxx开发板配置内核。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」