内核启动makefile分析

1.子目录下的makefile
a.c和b.c要编译进内核:
obj-y+=a.o b.o
a.c和b.c要联合组成一个模块:
obj-m+=ab.o(ab.o是一个名字)
ab-objs:=a.o b.o(objs是固定的)
执行时:a.c-->a.o b.c-->b.o a.o&b.o-->ab.ko
2.顶层的makefile
顶层的makefile中并没有找到uImage,但是在arch/arm/makefile中找到了uImage,猜测arch/arm/makefile文件是被包含到顶层的makefile中。
顶层makefile中找到include语句:
include $(srctree)/arch/$(ARCH)/Makefile
以及包含auto.conf的语句:
-include include/config/auto.conf
3.找到uImage的语句(在顶层的makefile中)uImage的目标依赖于vmlinux:
vmlinux:$(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
其中vmlinux-init:
vmlinux-init := $(head-y) $(init-y)
head-y是在arch/arm中定义的:
head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
init-y的相关语句:
init-y := init/
init-y := $(patsubst %/, %/built-in.o, $(init-y))
分析:第二句是一个makefile的函数,%/就代表init/,整句的意思:init-y等于init/目录下所有的文件,这些所有的文件会被编译为一个built-in.o文件。
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
core-y相关的语句:
core-y := usr/
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
core-y := $(patsubst %/, %/built-in.o, $(core-y))
core-y分析的过程类似于init-y。
vmlinux-all := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds
4.要分析3的所有的文件如何生成内核,可以到vmlinux的编译命令来分析,这样分析起来非常庞大,简单一点办法是通过执行生成uImage的命令来查看终端中的输出。
# make uImage V=1
V=1的功能是将编译过程中的命令更加详细的输出来。
要分析内核的生成,只需要关心最后的几条命令即可(找到包含-o vmlinux的这一句)。链接脚本参考文件:vmlinux-lds。
5.两个重要的文件:
第一个:arch/arm/kernel/head.s
第二个:arch/arm/kernel/vmlinux.lds
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值