vmlinux-init, vmlinux-main

Makefile 对应内核版本:2.6.35.13

vmlinux-init 和 vmlinux-main 是 vmlinux 目标的两个依赖。在顶层 Makefile 中有一段注释图:
引用
# vmlinux
#   ^
#   |
#   +-< $(vmlinux-init)
#   |   +--< init/version.o + more
#   |
#   +--< $(vmlinux-main)
#   |    +--< driver/built-in.o mm/built-in.o + more

它们的定义为:
?
1
2
vmlinux-init := $(head-y) $(init-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)

上面 $(head-y) 变量一般定义在与架构相关的 Makefile 中,比如在 x86 上,它定义在 arch/x86/Makefile 里:
?
1
2
3
4
5
6
7
###
# Kernel objects
 
head-y := arch /x86/kernel/head_ $(BITS) .o
head-y += arch /x86/kernel/head $(BITS) .o
head-y += arch /x86/kernel/head .o
head-y += arch /x86/kernel/init_task .o

head-y 所代表的对象文件一般放在编译出来的内核镜像文件的前面部分。

除去 $(head-y) 外,其它的 $(init-y),$(core-y), $(libs-y), $(drivers-y) 和 $(net-y) 这些变量都定义在顶层 Makefiel 中,它们一开始都被定义成相关的目录:
?
1
2
3
4
5
6
7
8
# Objects we will link into vmlinux / subdirs we need to visit
init-y          := init/
drivers-y       := drivers/ sound/ firmware/
net-y           := net/
libs-y          := lib/
core-y          := usr/
... ...
core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

这里需要注意,上面这些定义在顶层 Makefile 中变量所表示的内容是与架构无关的,也就是任何架构都需要它们。但是在架构相关的 Makefile 中往往还会追加与架构相关的代码,比如在 arch/x86/Makefile 里就有:
?
1
2
3
4
libs-y  += arch /x86/lib/
... ...
# See arch/x86/Kbuild for content of core part of the kernel
core-y += arch /x86/


上面的变量只是初始设置,在编译 vmlinux 中,后面还会对这些指代不同目录的变量进行重新设置,在顶层 Makefile 中会看到:
?
1
2
3
4
5
6
7
init-y          := $( patsubst %/, % /built-in .o, $(init-y) )
core-y          := $( patsubst %/, % /built-in .o, $(core-y) )
drivers-y       := $( patsubst %/, % /built-in .o, $(drivers-y) )
net-y           := $( patsubst %/, % /built-in .o, $(net-y) )
libs-y1         := $( patsubst %/, % /lib .a, $(libs-y) )
libs-y2         := $( patsubst %/, % /built-in .o, $(libs-y) )
libs-y          := $(libs-y1) $(libs-y2)

以 init-y 来说,它由原先指代目录,现在变成了指代该目录下的 built-in.o 文件了---几乎任何一个目录下都能看到 built-in.o 这个文件。在 x86 下,在 arch/x86/lib/ 和 lib/ 这两个目录下,还会看到 lib.a 这个库文件。在构建内核时,内核构建系统会一一产生这些 built-in.o,lib.a 以及其它一些对象文件,最后会将它们全部链接起来,从而形成 vmlinux 镜像文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值