《kernel源码分析配置和编译过程》

Posted zhuangquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《kernel源码分析配置和编译过程》相关的知识,希望对你有一定的参考价值。

1.内核的配置和编译

cp arch/arm/configs/xx_defconfig   .config
make menuconfig
make uImage

 

2.了解内核的配置过程和编译过程

  在内核的配置过程中,会生成文件.config。

  以网卡DM9000为例:

  在.config中可以找到”CONFIG_DM9000=y“,这表示这个模块会被编译进内核。“CONFIG_DM9000=m”,这表示模块会被编译成.ko文件,可以动态的加载到内核。

  在内核顶层目录对CONFIG_DM9000进行查找:

grep "CONFIG_DM9000"  -rn  .   咨询一下为什么不能查找出include下的

  可以看出在ARM架构中有4个文件中包含它

  • arch/arm/plat-s3c24xx/commod-smdk.c(源C)
  • drivers/net/Makefile(子目录的makefile)
  • include/config/auto.confg
  • include/linux/autoconf.h

  打开/drivers/net/Makefie。可以查找到“obj-$(CONFIG_DM9000) += dm9000.o”。$(CONFIG_DM9000)意思是根据CONFIG_DM9000的定义来决定是否编译dm9000.o。而auto.conf中就是对该宏进行定义,在auto.conf中可以查看到“CONFIG_DM9000=y”,所以makefile中的就可以扩展成obj-y += dm9000.o。就表示将模块编译进内核。如果"CONFIG_DM9000=m",就是将模块编译成.ko文件。auto.conf最终会被顶层的Makefile所包含。

  所以include/config/auto.conf里面定义的宏是用于Makefile中的。

  autoconf.h是个头文件,因此很明显是用于源C中的。里面有各种宏定义的定义。

  而autoconf.h和auto.conf是当make menuconfig的时候生成的。

  总结:make menuconfig----->生成auto.conf和autoconf.h

     auto.conf----->用于Makefile来决定是否编译该模块(y的时候是编译进内核,m的时候是编译成模块)

     autoconf.h----->用于源C的时候,定义了源码中相关的宏定义

 

以上是关于《kernel源码分析配置和编译过程》的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 Linux开发Kernel移植——kernel内核配置和编译

Linux 内核获取初次编译源码目录分析

鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析HarmonyOS源码| v57.01

Android——Qigsaw 源码分析 编译过程

Qigsaw 源码分析 编译过程

Android——Qigsaw 源码分析 编译过程