Makefile知识点以及Linux内核Makefile执行流程

一必备知识
1.1. makefile基础语法
如果还不熟悉makefile语法,建议先系统的学习一下,特别是以下几点:
(1) makefile哪些部分包含的是shell语句:
编译规则中的指令部分 {shell xx},var != xx中的xx部分 (if …, xx, xx)中的xx部分
(2) 变量展开: =(延迟赋值)、:=(立即赋值)、!=(值为shell命令)、?=(条件赋值)、+=(追加)
(3) include:将指定的其它makefile内容,展开到当前makefile
-f/-c:嵌套执行指定(目录中的)makefile
执行一个makefile,并不是从第一行开始执行,而是从指定或默认的编译目标开始执行(位置目标编译规则之前的赋值语句,只在相应变量需要被使用时才会执行),其中,makefile(包括include内容)中的第一个目标,为默认目标,如果make命令行中没有指定编译目标,则执行默认目标。
(4) 自动推导依赖文件
(5) 根据文件时间戳、中间文件(.d、.cmd),判断依赖更新,决定是否需要重新编译
(6) 重要的内置函数:
(wildcard pattern) (patsubst pattern, replacement, text) (strip string) (filter pattern, text) (filter-out pattern, text) (call func, args..) …
(7) 自动推导变量:
@:编译目标 <:依赖列表中的第一个依赖对象 ^:依赖列表中的所有对象 ?:依赖文件列表中所有有更新的文件
makefile教程可以参考以下个:
跟我一起写makefile(陈皓):make 命令教程 | 手把手带你入门 makefile (精典,超级详细)
1.2. kbuild内置函数
linux内核源码包含一套makefile程序,本文基于linux-5.2.5内核源码分析,其中包括top makefile,scripts/目录下的makefile、makefile.build、makefile.lib、kbuild.include、makefile.modpost、kconfig/makefile等,以及其它目录下的很多子makefile,统称为kbuild。
kbuild是按照框架设计思路实现的,使得内核自身包含或外部提供的大量驱动模块,只需要按照kbuild框架的约定,各自提供一个简单的makefile即可编译。
所以,理解内核或驱动文件的编译过程,其实就是要理解kbuild这套makefile程序的实现逻辑,既然是程序,就免不了会定义一些函数,由于很多关键的流程,都使用了(build)和(if_changed),所以以下先单独介绍(本文分析的makefile内容,来自linux-5.2.5内核源码):
1.2.1. $(build)
使用形式:(q)(make) $(build)=xx目录 [编译目标]
build内部过程
build作用概括
以下是$(build)的使用形式,以及每个部分的作用:
1.2.2. $(if_changed)
使用形式:$(call if_changed, xx)
if_changed内部过程
if_changed作用概括
以下是$(if_changed)的使用形式,及其参数的含义:
二编译外部模块
2.1. 涉及makefile内容
2.2. 概要流程
2.3. 详细流程
三make menuconfig
3.1. 涉及makefile内容
3.2. 概要流程
3.3. 详细流程
四make [all/_all/modules]
4.1. 涉及makefile内容
make命令行指定all/_all/modules目标,或者不指定目标时,是为了生成vmlinux文件,而vmlinux目标间接依赖prepare目标,且prepare目标编译规则展开内容比较多,所以以下分开介绍:
vmlinux目标
prepare目标
4.2. 概要流程
vmlinux目标
prepare目标
4.3. 详细流程
vmlinux目标
vmlinuz目标
prepare目标


英创信息技术Linux下的Modbus设备方协议软件介绍
该如何渗透检测APP存在的安全漏洞
如何解决5G物联网网关热管理问题
关于局域网和以太网的区别
如何抑制开关电源的输出纹波?
Makefile知识点以及Linux内核Makefile执行流程
套丝机的使用方法
I/O电缆产生的共模电流是怎样影响设备电磁兼容性的?
大学生该不该碰数字货币
汉思新材料:平板电脑主板芯片BGA锡球底部填充加固用胶方案
华为在计算领域提出“ABC”曲线发展模型
步进电机的作用_步进电机选型
方波倍频器(SN15844N、SN7400N)
华为海思的芯片成长之路
SK海力士推出128层1Tb TLC 4D NAND SSD高容量存储解决方案
关于罗德与施瓦新一代雷达罩测试仪QAR50
!销售/收购 HP8720A HP8920B 综合测试仪 H
工信部闻库表示下一步将从四个方面保障携号转网的顺利实施
使用DeviceStates指令对分布式IO子站进行诊断
数通365案例 | 华为助力德国Selfnet体验升级,打造欧洲首个高品质mGE+Wi-Fi 7高教园区标杆