Linux 设备树文件手动编译的 Makefile

news/2024/10/22 18:42:03/

前言

  • 通过了解 Linux 设备树的编译方法,手动写了一个可以把 dts、dtsi、设备树依赖头文件等编译为设备树 dtb 的 Makefile

  • Makefile 如下

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
cur_makefile_path := $(dir $(mkfile_path))DIR_ROOT := $(cur_makefile_path)suffix_dtb = .dtb
suffix_dts = .dts
dtb_d_pre_tmp = .dtb.d.pre.tmp
dtb_dts_tmp = .dtb.dts.tmp
dtb_d_dtc_tmp = .dtb.d.dtc.tmpHOSTCC = gccHOST_DTC := $(DIR_ROOT)dtcCFLAGS = -E -Wp,-MMD,dtc_flags = 0 -Wno-interrupt_provider -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size \-Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -Wno-unique_unit_addressdtc_def = -undef -D__DTS__ -x assembler-with-cppdts_src_path = $(DIR_ROOT)
dts_folders := $(shell find $(dts_src_path) -maxdepth 1 -type d)
dts_file_string = $(foreach dir,$(dts_folders),$(wildcard $(dir)/*.dts))
dts_file_basename = $(basename $(dts_file_string))all:for dts in ${dts_file_basename} ; do \$(HOSTCC) -E $(CFLAGS)$$dts$(dtb_d_pre_tmp) -nostdinc -I$(DIR_ROOT)include $(dtc_def) -o $$dts$(dtb_dts_tmp) $$dts$(suffix_dts); \$(HOST_DTC) -o $$dts$(suffix_dtb) -b $(dtc_flags) -d $$dts$(dtb_d_dtc_tmp) $$dts$(dtb_dts_tmp); \doneclean:for dts in ${dts_file_basename} ; do \rm -f $$dts$(dtb_d_pre_tmp); \rm -f $$dts$(dtb_dts_tmp); \rm -f $$dts$(dtb_dts_tmp); \rm -f $$dts$(dtb_d_dtc_tmp); \donedistclean:for dts in ${dts_file_basename}; do \rm -f $$dts$(dtb_d_pre_tmp); \rm -f $$dts$(dtb_dts_tmp); \rm -f $$dts$(dtb_dts_tmp); \rm -f $$dts$(dtb_d_dtc_tmp); \rm -f $$dts$(suffix_dtb); \done

Makefile 说明

  • 运行环境: Linux,需要安装 gcc 与 make

  • 需要准备:设备树 dts 原文件,以及依赖的 dtsi 与 设备树头文件

  • dtc 编译工具,源码 Linux 内核 scripts/dtc 目录下,编译过 Linux 内核后,就可以产生,默认Linux 每次都是源码编译,这里直接复制出来即可使用,不需要源码编译生成 dtc 工具。

获取 dtc 工具

  • dtc 工具是有Linux 环境 gcc 编译的,也就是 host gcc,不需要交叉编译,Linux 下不能直接编译 dtc 工具,可以编译一个 board,如 qemu vexpress_defconfig

  • 编译方法:

$ make ARCH=arm vexpress_defconfig
$ make ARCH=arm dtbs
  • 此时就会生成 scripts/dtc/dtc,可以查看 dtc 工具的版本号:
$ chmod +x scripts/dtc/dtczhangsz@zhangsz:~/linux/kernel/linux-6.0.10$ scripts/dtc/dtc --version
Version: DTC 1.6.1-g0a3a9d34

获取 设备树文件 dts

  • 这个可以根据实际需要自己编写或者在相似的平台上修改而来,我这里可以拿一个qemu 的设备树进行编译

  • 这里使用:vexpress-v2p-ca9.dts,可以在 Linux 内核拷贝出来:./arch/arm/boot/dts/vexpress-v2p-ca9.dts

  • 其他的依赖文件,可以 创建 Makefile后,通过 make 的方式编译,缺少的文件会提示

在这里插入图片描述

  • 当前示例,缺少的文件,从 Linux 内核中复制过来即可。

  • include/dt-bindings 里面,只需要复制几个依赖的 头文件即可,Linux 内核的位置:include/dt-bindings

在这里插入图片描述在这里插入图片描述

make 编译的设备树产物

  • make 通过后,会生成 xxx.dtb 文件,这就是设备树的二进制文件,板子就可以使用了

  • 本 Makefile 脚本,会顺便创建几个临时的文件,可以不用关心

手动编译 设备树的流程

  • 通过 gcc 预处理,把设备树源文件 dts,当成 C 语言源文件,把 #include 的 设备树头文件 dtsi 与 .h 头文件代码的形式包含到一个临时文件中

  • 第二步:通过 dtc 工具,把设备树临时文件 编译为 dtb 文件

  • 备注:如果不通过 gcc 预处理,直接使用 dtc 编译 dts 文件,可能依赖文件 dtsi 与 .h 头文件无法正确的加入,造成 转换失败。

小结

  • 如今 设备树源文件,就像是 C 语言的源文件一样,可以包含多个 dtsi 设备树头文件,也可以像 C 语言一样,包含 C 语言的头文件,如 include/dt-bindings 中的 .h 头文件

  • 可以通过简单的 设备树编译命令,手动编译 设备树文件,方便功能的验证,当然可以放在Linux 内核中进行编译。


http://www.ppmy.cn/news/150524.html

相关文章

Dart语法学习

最近在学习flutter相关方面的知识,里面用到了Dart语言,于是写下这篇博客记录学习的一门过程。如果你有其他编程语言的经验(尤其是Java和JavaScript),可以很快的上手Dart语言,Dart 在设计时应该是同时借鉴了…

AI注册流程

1、首先需要有一个OpenAI账号,如果有方法的,就可以自己先注册一下。如果没有方法的,还有一个付费版本的可以备选,亲测可用。 2、注册建议使用谷歌账号关联登录,最方便。微软账号太慢了,也可以使用。注册使用…

【轻量级网络】华为诺亚:VanillaNet

文章目录 0. 前言1. 网络结构2. VanillaNet非线性表达能力增强策略2.1 深度训练2.2 扩展激活函数 3. 总结4. 参考 0. 前言 随着人工智能芯片的发展,神经网络推理速度的瓶颈不再是FLOPs或参数量,因为现代GPU可以很容易地进行计算能力较强的并行计算。相比…

【C++】---模板初阶(超详练气篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

四川地震捐款企业名单

感谢大家的爱心~ Note:这是十四号在网上查到的,不保证完整性 href"file:///F:%5CDOCUME%7E1%5CACHENG%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel"File-List" /> href"file:///F:%5CDOC…

一些常用手机软件

手机如何扫描文件 1.WPS里边的拍照扫描功能 进到拍照扫描里边,切到“证件”,第一个就是身份证了 2.扫描全能王(比较简单) 3.iphone的备忘录-新建文本-扫描文稿

常用软件下载安装

清华镜像https://mirrors.tuna.tsinghua.edu.cn/idea2019:https://blog.xiaolee.net/rjck/691.html, 链接: https://pan.baidu.com/s/1J3kx8PTatk0hRV_jY4k7Wg, 提取码: rqczlinux下代码安装sz/rz命令:https://www.cnblogs.com/hghua/p/13322422.html

APP应用市场网址大全

360应用市场:官网:http://dev.360.cn/ 百度应用市场:官网:http://app.baidu.com/ 华为应用市场:官网:http://developer.huawei.com/ 豌豆荚应用市场:官网:http://developer.wandouji…