TQ2440 学习笔记—— 34、移植 Linux 内核【 Makefile 分析 】

发布者:sjjawx831最新更新时间:2022-04-18 来源: eefocus关键字:TQ2440  移植  Linux  内核  Makefile  分析 手机看文章 扫描二维码
随时随地手机看文章

一、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  移植  Linux  内核  Makefile  分析 引用地址:TQ2440 学习笔记—— 34、移植 Linux 内核【 Makefile 分析 】

上一篇:TQ2440 学习笔记—— 7、NOR Flash 和 NAND Flash
下一篇:TQ2440 使用Jlink-Flasher 烧写 u-boot 或者 program

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved