慢慢欣赏linux kbuild如何编译c和汇编

本文详细解析了Linux内核的编译流程,包括c码和S码的编译过程,以及如何通过递归编译各对象来形成最终的内核映像。深入探讨了从Makefile到具体源文件的编译规则。

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

内容概要:本文围绕VSG构网型逆变器与跟网型逆变器之间的双向平滑切换控制策略展开深入研究,系统探讨了GFL(跟网型)与GFM(构网型)逆变器在并网与孤岛运行模式下的切换机制。基于Simulink平台构建仿真模型,详细实现了切换过程中的控制逻辑设计、系统稳定性保障及动态响应性能优化等关键技术环节,重点解决模式切换过程中可能出现的电流冲击、频率电压波动等问题,确保微电网在不同运行工况下的连续稳定运行。研究还融合事件触发机制与分布式二次控制策略,实现频率电压的无差调节,并提升通信资源受限或遭受DoS攻击等异常情况下的系统弹性与协同控制能力,适用于高比例新能源接入场景下的微电网灵活运行需求。; 适合人群:具备电力电子、自动控制、微电网与新能源系统等相关专业背景,从事电力系统仿真、分布式能源控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解构网型与跟网型逆变器的运行机理及切换控制原理;②设计并仿真验证GFL/GFM模式间的双向平滑切换策略;③应用于微电网分层控制、孤岛检测与无缝切换、二次频率电压恢复等实际工程场景;④支撑IEEE Transactions等顶级期刊论文的复现、科研项目开发及创新性课题研究。; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点关注模式切换判据、控制架构切换逻辑、事件触发条件设定及控制器参数整定方法,配合网盘中的完整代码与模型资源进行仿真调试,以深入掌握其实现细节并开展进一步的优化与拓展研究。
内容概要:本文研究基于分布式模型预测控制(DMPC)的多个固定翼无人机一致性控制问题,通过构建固定翼无人机的非线性动力学模型,结合分布式控制架构实现多无人机系统在复杂环境下的状态一致性与协同飞行。文中系统阐述了模型预测控制算法的设计流程,引入一致性协议以确保编队稳定性,并充分考虑固定翼无人机的强非线性、姿态耦合特性以及通信延迟、局部信息交互受限等实际约束条件。通过Matlab进行仿真验证,展示了多无人机在不同初始条件下实现轨迹协同、速度同步与队形保持的有效性。研究重点在于提升控制系统的鲁棒性、可扩展性与实时性,为复杂动力学系统下的多智能体协同控制提供了可行的技术路径。; 适合人群:具备自动控制理论、飞行器动力学、多智能体系统或优化控制基础的研究生、科研人员及从事无人机系统开发的工程技术人员。; 使用场景及目标:①应用于多无人机协同编队飞行、区域覆盖监测、灾害救援与军事侦察等实际任务场景;②为分布式控制算法在非线性、受限通信条件下的多智能体系统中提供算法设计与仿真实现参考;③推动DMPC理论在航空航天领域中的一致性控制与自主协同方向的发展; 阅读建议:建议读者结合提供的Matlab代码深入理解系统建模、代价函数构建、分布式优化求解及一致性协议集成等关键环节,重点关注算法在非线性系统中的收敛性与鲁棒性表现,可进一步拓展至异构无人机协同、动态避障或通信拓扑时变等更具挑战性的研究方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值