vmliux的生成以及相关依赖
来源:互联网 发布:paper airplane软件 编辑:程序博客网 时间:2024/06/08 10:37
分析的版本:
linux3.10.84
分析方法:从顶层makefile进行分析,了解一下为了生成vmlinux,makefile都做了什么。
vmlinux依赖关系中,第一个依赖便是link-vmlinux.sh,这里相当于把第一个依赖加载到shell中,$<便是第一个依赖
当执行make命令后,默认生成的便是vmlinux
接下来一次说一下vmlinux-deps的依赖
这里看一下这个:if_changed:
位于文件script/Kbuild.include中,直接看注释,了解主要是做什么工作:
linux3.10.84
分析方法:从顶层makefile进行分析,了解一下为了生成vmlinux,makefile都做了什么。
运行一个新的shell:# SHELL used by kbuildCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ else echo sh; fi ; fi)
vmlinux依赖关系中,第一个依赖便是link-vmlinux.sh,这里相当于把第一个依赖加载到shell中,$<便是第一个依赖
# Final link of vmlinux cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)quiet_cmd_link-vmlinux = LINK $@
当执行make命令后,默认生成的便是vmlinux
all: vmlinux
vmlinux的依赖关系vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE +$(call if_changed,link-vmlinux) //根据if_changed的作用,就是有任何的文件更新等操作,就重新链接生成vmlinux文件vmlinux-deps的依赖
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)
接下来一次说一下vmlinux-deps的依赖
KBUILD_VMLINUX_INIT := $(head-y) $(init-y)KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y) $(virt-y)KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.ldshead-y := arch/mips/kernel/head.oinit-y:= init/init-y:= $(patsubst %/, %/built-in.o, $(init-y))最后生成:init-y:= init-y/built-in.ocore-y:= usr/core-y+= kernel/ mm/ fs/ ipc/ security/ crypto/ block/core-y:= $(patsubst %/, %/built-in.o, $(core-y))最后生成: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.olibs-y:= lib/libs-y+= arch/mips/fw/lib/libs-y+= arch/mips/lib/libs-y := lib/ arch/mips/fw/lib/ arch/mips/lib/libs-y1:= $(patsubst %/, %/lib.a, $(libs-y))libs-y1:= lib/lib.a arch/mips/fw/lib/lib.a arch/mips/lib/lib.alibs-y2:= $(patsubst %/, %/built-in.o, $(libs-y))libs-y2:= lib/built-in.o arch/mips/fw/lib/built-in.o arch/mips/lib/built-in.olibs-y:= $(libs-y1) $(libs-y2)最后生成:libs-y:= libs-y/lib.a libs-y/built-in.odrivers-y:= drivers/ sound/ firmware/drivers-y:= $(patsubst %/, %/built-in.o, $(drivers-y))最后生成:drivers-y:=drivers/built-in.o sound/built-in.o firmware/built-in.o net-y:= net/net-y:= $(patsubst %/, %/built-in.o, $(net-y))最后生成:net-y:=net-y/built-in.ovirt-y:= virt/virt-y:= $(patsubst %/, %/built-in.o, $(virt-y))最后生成:virt-y:=virt-y/built-in.o这就把源码中所有的目录都包含了,最后链接成vmlinux。
这里看一下这个:if_changed:
位于文件script/Kbuild.include中,直接看注释,了解主要是做什么工作:
#### if_changed - execute command if any prerequisite is newer than# target, or command line has changed# if_changed_dep - as if_changed, but uses fixdep to reveal dependencies# including used config symbols# if_changed_rule - as if_changed but execute rule instead# See Documentation/kbuild/makefiles.txt for more info# Execute command if command has changed or prerequisite(s) are updated.#if_changed = $(if $(strip $(any-prereq) $(arg-check)), \@set -e; \$(echo-cmd) $(cmd_$(1)); \echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)# Execute the command and also postprocess generated .d dependencies file.if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ), \@set -e; \$(echo-cmd) $(cmd_$(1)); \scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\rm -f $(depfile); \mv -f $(dot-target).tmp $(dot-target).cmd)# Usage: $(call if_changed_rule,foo)# Will check if $(cmd_foo) or any of the prerequisites changed,# and if so will execute $(rule_foo).if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ), \@set -e; \$(rule_$(1)))
阅读全文
0 0
- vmliux的生成以及相关依赖
- android studio依赖以及生成aar
- vs2013中 项目->生成/重新生成以及仅用于项目的区别,以及项目依赖项的设置
- java进行https请求以及相关证书的生成
- 一个ActiveX 对VC 运行库的依赖以及相关部署问题
- PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
- PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
- Hive永久UDF依赖包问题以及几个日期相关的自定义函数
- 依赖属性的相关概念
- Spring包的相关依赖
- junit5相关依赖的写法
- yum下载rpm包以及相关依赖包
- Https Tomcat CSR生成 以及相关操作
- vc编译选项,工程依赖相关的
- quartz1.6.4依赖的相关jar说明
- 关于依赖注入autofac的相关知识
- apache依赖包apr的相关问题
- JAVA中循环依赖的相关问题
- 【工作感悟】Android 开发者,如何提升自己的职场竞争力?
- 数据库事务的四大特性以及事务的隔离级别
- 程序员面试宝典-操作系统(个人整理)
- solver 文件
- IO-数据操作流
- vmliux的生成以及相关依赖
- MySQL5.5以上版本优化参数
- 6. jsp中的useBean标签
- Javascript获取css样式
- 21.Redis Cluster
- apollo配置中心初探
- 【API性能】1、API压力测试Linux下的Jmeter操作
- c语言中getch,getche,getchar的区别
- 写入Excel文件最简实例(亲测可用)