【linux】内核make编译链接相关变量定义

欢迎转载,转载时请保留作者信息,谢谢。

邮箱:tangzhongp@163.com

博客园地址:http://www.cnblogs.com/embedded-tzp

Csdn博客地址:http://blog.csdn.net/xiayulewa

 

这些定义很重要,不阅读源代码是体会不到的,在阅读源代码时,看看这些定义,会事半功倍。

 

链接文件:

export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds

 

PAGE_OFFSET:src\arch\arm\include\asm\memory.h : 内核地址空间 = CONFIG_PAGE_OFFSET, 3G – 4G
TEXT_OFFSET:src\arch\arm\Makefile : 内核空间中内核代码真正开始的地方 一般为0XC0008000 =  3G + 0X8000

 

 

%.ko: prepare scripts FORCE:src/Makefile 定义模块编译

%/: prepare scripts FORCE:src/Makefile如何循环进入底层目录。

src\scripts\Kbuild.include: 中定义了 build 变量 build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj

src\scripts\Makefile.build: 编译时采用的Makefile

src\scripts\Kbuild.include中定义了if_changed_rule

kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))

kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)

include $(kbuild-file)

上面颜色字体决定了进入具体目录的执行。

 

 

链接顺序:

src/Makefile:

export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)

export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)

其中Makefile 中的变量export 能被子Makefile继承。

posted on 2015-04-21 15:21  embedded_linux  阅读(256)  评论(0编辑  收藏  举报