kernel之Makefile分析

首先拿到kernel,我们和uboot一样,首先进行 make *_defconfig,然后看到底做了什么呢?

搜索: find . -name *defconfig 文件。我们找到对应板卡。

./arch/arm/configs/xilinx_zynq_defconfig

首先我们执行 make xilinx_zynq_defconfig

看打印:

# configuration written to .config

此时查看当前目录,产生了一个.config的文件

//大致内容
CONFIG_ARM=y
CONFIG_ARM_HAS_SG_CHAIN=y
CONFIG_MIGHT_HAVE_PCI=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_NO_IOPORT_MAP=y

接着顺藤摸瓜,grep “CONFIG_MIGHT_HAVE_PCI” * -rR。看看哪里用了这个些。

include/generated/autoconf.h:#define CONFIG_MIGHT_HAVE_PCI 1
include/config/auto.conf:CONFIG_MIGHT_HAVE_PCI=y

由此可知道  make xilinx_zynq_defconfig,产生了2个文件autoconf.h(源代码用),auto.conf(Makefile用)。

分析 arch/arm目录下的Makefile:

head-y          := arch/arm/kernel/head$(MMUEXT).o #head-y == head.o
#core-y 所需要的原材料(下一级Makefile)
core-y                          += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
core-y                          += arch/arm/probes/
core-y                          += arch/arm/net/
core-y                          += arch/arm/crypto/
core-y                          += arch/arm/firmware/
core-y                          += $(machdirs) $(platdirs)

BOOT_TARGETS    = zImage Image xipImage bootpImage uImage
$(BOOT_TARGETS): vmlinux    #可以看出Image 依赖于 vmlinux
        $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

#core-y := usr/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o #security/built-in.o \
#crypto/built-in.o block/built-in.o arch/arm/kernel/built-in.o arch/arm/mm/built-in.o #arch/arm/common/built-in.o

分析顶层Makefile主要内容:

ARCH            ?= arm   //架构
CROSS_COMPILE   ?= arm-xilinx-linux-gnueabi- //编译工具链
include arch/$(SRCARCH)/Makefile // 包含arch/arm/Makefile(上面描述的)
include/config/auto.conf //包含make *_defconfig产生的auto.conf决定要把哪些内容编译到内核里面(-y)或者编译成模块(-m)
#先看看要编译哪些目录
init-y          := init/
drivers-y       := drivers/ sound/ firmware/
net-y           := net/
libs-y          := lib/
core-y          := usr/
virt-y          := virt/
all: vmlinux #指定编译目标
init-y          := $(patsubst %/, %/built-in.o, $(init-y)) #init/目录下替换命令,init/ ->init/built-in.o
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)
virt-y          := $(patsubst %/, %/built-in.o, $(virt-y))

#vmlinux的依赖
#vmlinux:
# $(head-y) $(init-y)$(core-y) $(libs-y) $(drivers-y) $(net-y) $(virt-y) #第一个就是head.o
# vmlinux.lds #链接脚本
#具体如下:core-y就依赖于arch/arm/Makefile
export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y) $(virt-y)
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)
vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值