3.4.1Linux内核编译之将驱动编译进内核

  1. 在内核目录里的源码:可以编译为.ko;可以编译进内核映像文件zImage。make zImage 
  2. 把驱动程序放进内核:可以编译进内核,也可以编译为模块。怎么放进内核文件?
  • 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开发板配置内核。

 

posted @   QianFa01  阅读(716)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示