Linux源码目录分析

文件夹./arch/arm/boot下生成image、zImage

Arch/arm/boot/dts这个目录,存放Linux内核所有设备树文件,包括dts编译后对应的dtb文件

Documentat/devicetree/bindings此目录下的文档很重要!设备树绑定信息

1、make xxx_defconfig 过程

%config: scripts_basic outputmakefile FORCE

        $(Q)$(MAKE) $(build)=scripts/kconfig $@

build := -f $(srctree)/scripts/Makefile.build obj

scripts_basic:

        $(Q)$(MAKE) $(build)=scripts/basic

        $(Q)rm -f .tmp_quiet_recordmcount   无意义

展开:

scripts_basic:

        @make -f ./scripts/Makefile.build obj=scripts/basic //也可以没有@,视配置而定

        @rm -f . tmp_quiet_recordmcount //也可以没有@

scripts_basic 目标的作用就是编译出 scripts/basic/fixdep scripts/basic/bin2c

两个软件。

%config: scripts_basic outputmakefile FORCE

        $(Q)$(MAKE) $(build)=scripts/kconfig $@

将命令展开就是:

        @make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig

%_defconfig: scripts/kconfig/conf

        @ scripts/kconfig/conf --defconfig=arch/arm/configs/%_defconfig Kconfig   ->.config

2、链接

所有的.o和.a库文件准备好以后,就可以链接生成vmlinux.

# Final link of vmlinux

cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS)

$(LDFLAGS_vmlinux)

展开:

cmd_link-vmlinux = /bin/bash scripts/link-vmlinux.sh arm-linux-gnueabihf-ld -EL -p --no

undefined -X --pic-veneer --build-id

        将各个子目录下的 built-in.o.a 等文件链接在一起,最终生成 vmlinux 这个 ELF 格式的可执行文件。链接脚本为 arch/arm/kernel/vmlinux.lds,链接过程是由shell脚本scripts/link-vmlinux.s来完成的

3、Make过程

_all 是默认目标

默认目标_all 依赖 all

目标 all 依赖 vmlinux,所以接下来的重点就是 vmlinux

vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE

ifdef CONFIG_HEADERS_CHECK

$(Q)$(MAKE) -f $(srctree)/Makefile headers_check

endif

vmlinux-deps=$(KBUILD_LDS)$(KBUILD_VMLINUX_INIT)$(KBUILD_VMLINUX_MAIN)

vmlinux 的依赖为:scripts/link-vmlinux.sh$(head-y) $(init-y)$(core-y)

$(libs-y) $(drivers-y) $(net-y)arch/arm/kernel/vmlinux.lds FORCE

head-y = arch/arm/kernel/head.o

init-y = init/built-in.o

drivers-y = drivers/built-in.o  sound/built-in.o  firmware/built-in.o

net-y = net/built-in.o

libs-y = arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o

core-y = usr/built-in.o

4、Make zImage过程

我们需要zImage 文件,但是前面一直说的是vmlinux

BOOT_TARGETS = zImage Image xipImage bootpImage uImage

$(BOOT_TARGETS): vmlinux

$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

@ make -f ./scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/boot/zImage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值