欢迎光临
我们一直在努力

IMX6ULL的Makefile分析

在 i.MX6ULL 的 Linux 内核编译过程中,Makefile 主要可以分为几类:顶层 Makefile、scripts/kconfig/Makefile、arch/arm/Makefile、各个驱动目录下的 Makefile,以及 arch/arm/boot/Makefile。

建议先阅读整体总结,了解顶层 Makefile 的作用。这样再分析 scripts/kconfig/Makefile、arch/arm/Makefile、驱动目录 Makefile 和 arch/arm/boot/Makefile 时,会更容易理解内核从配置、编译到生成 zImage 的完整流程。

目录

1. 顶层 Makefile

2. scripts/kconfig/Makefile

3. arch/arm/Makefile

4. 各个驱动目录的 Makefile

5. arch/arm/boot/Makefile

总结


1. 顶层 Makefile

顶层 Makefile 是整个内核编译流程的入口。

1、它主要负责调用 Kconfig 系统生成 .config,然后根据 .config 中的配置决定哪些目录和目标参与编译。

2、在 ARM 平台下,顶层 Makefile 会包含 arch/arm/Makefile,从而把 ARM 架构相关的编译参数、启动入口对象 head.o、i.MX 相关 SoC 平台代码, ARM加入加入内核编译流程。

3、各个核心目录、驱动目录加入内核编译流程。

4、随后,各目录会分别生成对应的 built-in.o 文件,最后由顶层 Makefile 调用 scripts/link-vmlinux.sh,把 head.o、init/built-in.o、kernel/built-in.o、drivers/built-in.o 等目标文件链接生成 vmlinux。调用arch/arm/boot/Makefile生成zImage。

2. scripts/kconfig/Makefile

scripts/kconfig/Makefile 主要负责内核配置文件的生成。当执行类似:make 100ask_imx6ull_defconfig

这样的命令时,顶层 Makefile 会把 defconfig 目标传递给 scripts/kconfig/Makefile。随后 Kconfig 系统会读取对应的板级默认配置文件,最终生成 .config 文件

因此,在生成 .config 的流程中,可以很清楚地看到 scripts/kconfig/Makefile 的作用。

3. arch/arm/Makefile

arch/arm/Makefile 主要负责 ARM 架构相关的编译设置。

它会指定 ARM 架构的编译参数和汇编参数,并把 ARM 内核最早执行的启动入口对象 arch/arm/kernel/head.o 加入编译流程

同时,它还会根据当前选择的 SoC 平台,把对应的平台源码目录加入内核编译。例如 i.MX6ULL 属于 i.MX 系列 SoC,因此会把:arch/arm/mach-imx/加入内核编译

4. 各个驱动目录的 Makefile

各个驱动目录下的 Makefile 负责根据 .config 中的配置选项,决定当前目录下哪些驱动源码需要参与编译。例如:

obj-$(CONFIG_I2C) += i2c-core.o
obj-$(CONFIG_USB) += usb/

如果对应配置项为 y,这些源码或子目录就会被编译进内核,最终汇总生成该目录下的 built-in.o

5. arch/arm/boot/Makefile

scripts/link-vmlinux.sh 生成 vmlinux 之后,ARM 平台还需要继续生成可启动的内核镜像。

这个过程由 arch/arm/boot/Makefile 负责。它会先从 vmlinux 生成未压缩的 Image,然后进入 arch/arm/boot/compressed/ 目录生成压缩启动代码,最后生成 ARM 平台常用的启动镜像:

arch/arm/boot/zImage

所以整体流程可以概括为:

defconfig → .config → built-in.o → vmlinux → Image → zImage

也就是说,顶层 Makefile 负责统筹整个内核构建流程,scripts/kconfig/Makefile 负责生成配置文件,arch/arm/Makefile 负责 ARM 架构相关编译设置,各目录 Makefile 负责具体源码编译,最后由 arch/arm/boot/Makefile 生成最终的 zImage。

总结

1、顶层 Makefile 首先处理内核配置。执行 make 100ask_imx6ull_defconfig 时,会借助 scripts/Makefile.build 找到 scripts/kconfig/Makefile,然后调用 scripts/kconfig/conf 读取 arch/arm/configs/100ask_imx6ull_defconfig,最终生成 .config 文件。

2、生成 .config 后,顶层 Makefile 会包含 arch/arm/Makefile,把 ARM 架构代码、i.MX SoC 平台代码和各个驱动目录加入编译(也是调用scripts/Makefile.build找到对应makefile进行编译),最终生成对应的 .o 和 built-in.o 文件。

3、最后,顶层 Makefile 调用 scripts/link-vmlinux.sh,将 head.o、init/built-in.o、kernel/built-in.o、drivers/built-in.o 等文件链接生成 vmlinux。随后由 arch/arm/boot/Makefile 在 vmlinux 的基础上继续生成最终的 zImage。

赞(0)
未经允许不得转载:171主机测评 » IMX6ULL的Makefile分析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址