博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
慢慢欣赏linux kbuild如何编译c和汇编
阅读量:4068 次
发布时间:2019-05-25

本文共 2718 字,大约阅读时间需要 9 分钟。

c码编译流程

$(vmlinux-dirs): prepare scripts	$(Q)$(MAKE) $(build)=$@	||	\/vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \		     $(net-y) $(net-m) $(libs-y) $(libs-m)))	||	\/vmlinux-dirs := init 				kernel mm fs ipc security crypto block				drivers sound firmware				net				lib	||	\/	build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj	||	\/	make -f scripts/Makefile.build  obj=init 										kernel mm fs ipc security crypto block										drivers sound firmware										net										lib	||	\/	没有目标,走默认的目标,也就是第一个目标__build	__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \	 $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \	 $(subdir-ym) $(always)	@:	||	\/	builtin-target := $(obj)/built-in.o	lib-target := $(obj)/lib.a	extra-y                := head_$(BITS).o head$(BITS).o head.o init_task.o vmlinux.lds	||	\/	__build: $(obj)/built-in.o $(obj)/lib.a head_$(BITS).o head$(BITS).o head.o init_task.o vmlinux.lds				||				\/				$(builtin-target): $(obj-y) FORCE					$(call if_changed,link_o_target)									||									\/	obj-y包含在具体obj目录的Makefile									src := $(obj)									kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))									kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)									include $(kbuild-file)									||									\/ 以fs为例 obj-y :=	open.o read_write.o file_table.o super.o \															char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \															ioctl.o readdir.o select.o fifo.o dcache.o inode.o \															attr.o bad_inode.o file.o filesystems.o namespace.o \															seq_file.o xattr.o libfs.o fs-writeback.o \															pnode.o drop_caches.o splice.o sync.o utimes.o \															stack.o fs_struct.o												obj-$(CONFIG_SQUASHFS)		+= squashfs/									||									\/									$(obj)/%.o: $(src)/%.c FORCE										$(call cmd,force_checksrc)										$(call if_changed_rule,cc_o_c)									||									\/									如果遇到obj-y +=目录的情况, 则进入子目录继续编译。可以做实验证明:如果注释掉obj-$(CONFIG_SQUASHFS)		+= squashfs/,则squashfs目录则不会被编译

汇编S编译流程

vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE			||			\/		vmlinux-lds  := arch/$(SRCARCH)/kernel/vmlinux.lds			||			\/		$(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;			||			\/	跟c语言类似的流程		... ...			||			\/		$(obj)/%.lds: $(src)/%.lds.S FORCE			$(call if_changed_dep,cpp_lds_S)

内核中单个.o文件的编译过程

https://blog.csdn.net/RichardYSteven/article/details/56666514

Linux内核构建系统之五

https://blog.csdn.net/lixiangminghate/article/details/50494535

内核映像的形成——递归编译各对象

https://blog.csdn.net/yunsongice/article/details/6106036

你可能感兴趣的文章
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
ssh 如何方便的切换到其他节点??
查看>>
JSP中文乱码总结
查看>>
Java-IO-File类
查看>>