一、Linux Makefile 分析
(1)Makefile 的作用
a、决定编译哪些文件
b、怎样编译这些文件
c、怎样连接这些文件,最重要的是它们的顺序如何
Linux 内核中有很多个Makefile 文件,下面是 Makefile 文件的五大类:
a、决定编译哪些文件。
Linux 内核的编译过程从顶层 Makefile 开始,然后递归地进入各级子目录调用它们的Makefile,分为3个步骤。
1、顶层 Makefile 决定内核根目录下哪些子目录将被编进内核。
2、arch/$(ARCH)/Makefile 决定arch/$(ARCH) 目录下哪些文件、哪些目录将被编进内核。
3、各级子目录下的Makefile 决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块(即驱动程序),进入哪些子目录继续调用它们的Makefile。
先看步骤1,在顶层Makefile 中可以看到:
由上可知,顶层Makefile 将这13 个子目录分为5类:init-y、drivers-y、net-y、libs-y和 core-y。还有一个arch 它在arch/$(ARCH)/Makefile 包含进内核。
对于非 x86 平台,还需要指定交叉编译工具。
对于步骤2的arch/$(ARCH)/Makefile ,以ARM体系为例,在arch/arm/Makefile 中可以看到如下内容:
第94行:除前面的5类,出现的另一类 head-y,不过它直接以问价名出现。MMUEXT 在arch/arm/Makefile 前面定义,对于没有MMU 的处理器,MMUEXT 的值为 -nommu,使用文件 head-nommu.S;对于有MMU 的处理器,MMUEXT 的值为空,使用文件 head.S。
在arch/arm/Makefile 中类似第171、172、173行的代码进一步扩展了 core-y 的内容,第191 行扩展了 libs-y 的内容,这些都是体系结构相关的目录。第173~175 行中的CONFIG_ARCH_S3C2410 在配置内核时定义,它的值有 3种:y、m或空。y 表示编进内核,m 表示编为模块, 空表示不使用。
编译内核时将依次进入 init-y、core-y、libs-y、drivers-y 和net-y 所列出的目录中执行它们的Makefile, 每个子目录都会生成一个 built-in.o (libs-y 所列目录下,有可能生成lib.a 文件)。最后,head-y 所表示的文件将和这些built-in.o
、lib.a 一起连接成内核映像文件vmlinux。
对于步骤3:
在配置内核时,生成配置文件 .config 。内核顶层Makefile 使用如下语句间接包含 .config文件,以后就根据 .config 中定义的各个变量决定编译哪些文件。所谓“间接”包含,是因为包含的是 include/config/auto.conf 文件,而它只是将 .config 文件中的注释去掉,并根据顶层Makefile 中定义的变量增加了一些变量而已。
在 include/config/auto.conf 文件中,变量的值主要有两类:“ y ” 和 “ m ” 。各级子目录的 Makefile 使用这些变量来决定哪些文件被编进内核中,哪些文件被编成模块,要进入哪些下一级子目录继续编译,这通过 以下4中方法来确定(obj-y、obj-m、lib-y 是Makefile 中的变量)。
obj-y 用来定义哪些文件被编进(built-in)内核
obj-m 用来定义哪些文件被编译成可加载模块(Loadable module)
lib-y 用来定义哪些文件被编译成库文件
obj-y、obj-m 还可以用来指定要进入的下一层子目录
(2)怎样编译这些文件
即编译选项、链接选项是什么。这些选项分为 3 类:全局的,适用于整个内核代码树;局部的,仅适用于某个 Makefile 中的所有文件;个体的,仅适用于某个文件。
(3)怎样连接这些文件,它们是顺序如何
上一篇:TQ2440 学习笔记—— 7、NOR Flash 和 NAND Flash
下一篇:TQ2440 使用Jlink-Flasher 烧写 u-boot 或者 program
设计资源 培训 开发板 精华推荐
- 用于完整 3V、12 位、1MHz 模数转换系统的 AD8602ARMZ-REEL 运算放大器的典型应用
- STR-NCV6357-GEVB:支持 Strata 的自适应接通时间 (AOT) 5A 降压转换器 NCV6357 EVB
- PS5162EV,具有 PS501、2 节、锂离子电池管理器模块的评估板,带有用于锂化学的 LED SOC 显示
- 使用 Analog Devices 的 LT3470HDDB 的参考设计
- 一个简单的表面贴装闪存 Vpp 发生器
- LTC2208-14、14 位、130Msps 模数转换器的典型应用
- NCS7101方波振荡器典型应用电路
- C3018946_WK2124-ISSG芯片方案验证板
- HDMI转MIPI模块,手机屏幕变显示器(稚晖君出品)
- 带有外部 NPN 饱和开关的 MC33063A 升压开关转换器的典型应用
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展