编译linux的设备树

使用make dtbs命令时

在arch/arm 的目录Makefile文件中有

boot := arch/arm/boot

prepare 和scripts是空的

在文件scripts/Kbuild.include中

变量build := -f $(srctree)/scripts/Makefile.build obj

在顶层Makefile中

$(srctree):=.

展开后-f ./scripts/Makefile.build obj:=arch/arm/boot/dts

通过下面的命令包含传入的$(obj)目录下的Makefile,即arch/arm/boot/dts/Makefile

The filename Kbuild has precedence over Makefile

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

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

include $(kbuild-file)

-f 的作用是使用make 命令编译由-f 指定的Makefile文件(scripts/Makefile.build)

在该文件中使用默认目标__build,

展开后使用

__build: (builtin-target) (lib-target) (extra-y)) (subdir-ym) $(always)

@:

其中 $(always)在arch/arm/boot/dts/Makefile中

always := $(dtb-y)

$(dtb-y)就是我们要编译的目标.dtb。

至此,流程为

Make dtbs ->

make -f ./scripts/Makefile.build obj:=arch/arm/boot/dts

->__build: (builtin-target) (lib-target) (extra-y)) (subdir-ym) $(always)

->include $(kbuild-file)

->always := $(dtb-y)

dtbs 依赖$(dtb-y)

相关推荐
cmc10289 分钟前
144.新工程导入原来工程的bd.tcl时原工程带有第三方自定义ip报错解决办法
服务器·网络·tcp/ip
JuiceFS1 小时前
深入解析 JuiceFS 垃圾回收机制
运维·后端
路由侠内网穿透1 小时前
本地部署开源物联网平台 ThingsBoard 并实现外部访问( Windows 版本)
运维·服务器·windows·物联网·开源
Starry_hello world1 小时前
进程的替换
linux·笔记·有问必答
微信api接口介绍2 小时前
微信个人发消息api
运维·服务器·开发语言·前端·网络·微信·ipad
Code-X02 小时前
安装 Docker 时,为什么要装 dnf-utils?
运维·docker·容器
攻心的子乐2 小时前
MinIO 开源的分布式文件服务器
运维·服务器
拥友LikT2 小时前
惠普DL380服务器安装系统以后无法读取到系统盘启动解决方案(其他品牌服务器类似解决思路)
linux·服务器系统安装
怒放的生命19913 小时前
前端vue项目在vscode使用插件部署到服服务器的方法
服务器·ide·vscode
程序猿编码3 小时前
Linux 文件变动监控工具:原理、设计与实用指南(C/C++代码实现)
linux·c语言·c++·深度学习·inotify