重庆网站建设咨询,网站包装推广案例,易企秀h5制作官网,河南旅游网页设计前言 前面通过 Makefile 实现手动编译 Linux 设备树 dts 源文件及其 设备树依赖 dtsi、.h 头文件#xff0c;如何写成一个 shell 脚本#xff0c;直接编译呢#xff1f; 其实就是 把 Makefile 重新编写为 shell 脚本即可
编译设备树 shell 脚本
脚本内容如下#xff1a…前言 前面通过 Makefile 实现手动编译 Linux 设备树 dts 源文件及其 设备树依赖 dtsi、.h 头文件如何写成一个 shell 脚本直接编译呢 其实就是 把 Makefile 重新编写为 shell 脚本即可
编译设备树 shell 脚本
脚本内容如下 gen_dtbs.sh
#! /bin/bashDIR_ROOT$( cd $(dirname ${BASH_SOURCE[0]}) pwd)
HOST_DTC${DIR_ROOT}/dtc
HOSTCCgcc
# ${HOSTCC} -v
# ${HOST_DTC} --versionsuffix_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.tmpdtc_cflags-E -Wp,-MMD,
dtc_flags0 -Wno-interrupt_provider -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size
dtc_flags-Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -Wno-unique_unit_address
dtc_def-undef -D__DTS__ -x assembler-with-cppdts_src_path${DIR_ROOT}
dts_file_stringfind ${dts_src_path} -maxdepth 2 -type f -name *.dtsfor dts in ${dts_file_string}
do# echo ${dts}echo ${dts%.*}${HOSTCC} -E ${dtc_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}
donedts_foldersfind ${dts_src_path} -maxdepth 1 -type d
for dts in ${dts_folders}
dorm -f ${dts}/*.d.dtc.tmprm -f ${dts}/*.d.pre.tmprm -f ${dts}/*.dtb.dts.tmp
doneecho --- build dtbs end ---
示例工程的下载地址 https://gitee.com/zhangsz0516/make_dtbs.git
shell 脚本说明 运行环境 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 ARCHarm vexpress_defconfig
$ make ARCHarm dtbs此时就会生成 scripts/dtc/dtc可以查看 dtc 工具的版本号
$ chmod x scripts/dtc/dtczhangszzhangsz:~/linux/kernel/linux-6.0.10$ scripts/dtc/dtc --version
Version: DTC 1.6.1-g0a3a9d34获取 dts 源文件
这个示例的设备树源文件来自 Linux 内核
编译设备树 脚本执行权限 chmod x gen_dtbs.sh 执行 source gen_dtbs.sh 或者直接运行 ./gen_dtbs.sh 即可 测试发现正常的生成 设备树二进制文件 dtb
小结 可以使用 make 或 shell 脚本手动编译 设备树源文件 注意这里使用了 gcc 做了预处理把设备树依赖的头文件等全部以源码的方式放在一个临时文件里面就像是 C 语言源文件的处理一样这样再通过 dtc 工具生成 dtb 文件