Linux 设备树文件手动编译的 shell 脚本
前言
-
前面通过 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
HOSTCC=gcc
# ${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.tmp"dtc_cflags="-E -Wp,-MMD,"
dtc_flags="0 -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-cpp"dts_src_path=${DIR_ROOT}
dts_file_string=`find ${dts_src_path} -maxdepth 2 -type f -name *.dts`for 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_folders=`find ${dts_src_path} -maxdepth 1 -type d`
for dts in ${dts_folders}
do`rm -f ${dts}/*.d.dtc.tmp``rm -f ${dts}/*.d.pre.tmp``rm -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 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 源文件
- 这个示例的设备树源文件,来自 Linux 内核
编译设备树
-
脚本执行权限
chmod +x gen_dtbs.sh -
执行
source gen_dtbs.sh或者直接运行./gen_dtbs.sh即可

- 测试发现,正常的生成 设备树二进制文件: dtb
小结
-
可以使用 make 或 shell 脚本,手动编译 设备树源文件
-
注意这里使用了 gcc 做了预处理,把设备树依赖的头文件等全部以源码的方式放在一个临时文件里面,就像是 C 语言源文件的处理一样,这样再通过 dtc 工具,生成 dtb 文件
相关文章:
Linux 设备树文件手动编译的 shell 脚本
前言 前面通过 Makefile 实现手动编译 Linux 设备树 dts 源文件及其 设备树依赖 dtsi、.h 头文件,如何写成一个 shell 脚本,直接编译呢? 其实就是 把 Makefile 重新编写为 shell 脚本即可 编译设备树 shell 脚本 脚本内容如下:…...
C++核心编程——初识STL——STL的基本概念和六大组件
文章目录💬 一.前言二.STL基本概念和组成①容器②算法③迭代器④空间配置器⑤适配器⑥仿函数 三.STL工作机制 一.前言 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出“可重复运用的东西”的方法,让程序员的心血不止于…...
5.2图的BFS与DFS遍历
一.BFS遍历 1.图的广度优先遍历代码实现 说明: 1.广度优先遍历,类比树的层次遍历(树属于特殊的图) 2.对应算法想象图的物理结构存储: 邻接矩阵表示唯一时间复杂度:O(|V|^2); 邻接表不唯一:O(|V|2|E|)&…...
JSP+SQL网上选课系统(源代码+论文+答辩PPT)
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生选课系统作为一种现代化的教学技术,以越来越受到人民的重视,是一个学校不可缺少的部分, 学生选课系统就是为了管理好选课信息而设计的。学…...
C语言数据结构——树、堆(堆排序)、TOPK问题
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,数据结构 🔥座右铭:“不要等到什么都没…...
springboot+vue 刘老师
课程内容 前端:vue elementui 后端:springboot mybatisplus 公共云部署 ------boot-------- 热部署 不用devtools,交给jrebel工具 RequestMapping 参数 value 路径 method 方法consumes 请求媒体类型 如 application/jsonproduces …...
学生网上考试报名系统的设计与实现
技术栈: MySQL、Maven、SpringBoot、Spring、SpringMVC、MyBatis、HikariCP、fastjson、slf4j系统功能:用户角色: (1)登录:用户在登录界面输入正确的账户名和密码,点击登录,系统将与…...
Jmeter实现分布式并发
Jmeter实现分布式并发,即使用远程机执行用例。 环境: VMware Fusion Windows系统是win7。 操作过程 1、Master在jmeter.properties添加remote_hosts 2、Slave在jmeter.properties添加server_port 同时把remote_hosts修改为和主机(Master…...
动态xml文件配置 hibernate validator 约束校验
父文章 入参校验产品化 schema_个人渣记录仅为自己搜索用的博客-CSDN博客 一般都是通过 注解进行校验, 很少看到 通过配置来进行校验. 自己再通过谷歌找到了官网文档hibernate validator constraint from xml Hibernate Validator 8.0.0.Final - Jakarta Bean Validation Re…...
Vue绑定class样式与style样式
1,回顾HTML的class属性 答:任何一个HTML标签都能够具有class属性,这个属性可能只有一个值,如class"happs",也有可能存在多个属性值,如class"happs good blue",js的原生DOM针…...
集权攻击系列:如何利用PAC新特性对抗黄金票据?
黄金票据简介 黄金票据是一种常见的域内权限维持手段,这种攻击主要是利用了Kerberos认证过程中TGT票据由KRBTGT用户的hash加密的特性,在掌握KRBTGT用户密码之后可以通过签发一张高权限用户的TGT票据,再利用这个TGT向KDC获取域内服务的ST来实…...
同程面试(部分)(未完全解析)
一面 Java直接内存有了解吗?为什么Java NIO的效率更高?Netty用到很多NIO,来了一个请求后Netty是怎么分发的,它里面有哪些角色?粘包、拆包怎么解决?为什么建立TCP连接是三次握手,而不是四次&…...
讯飞星火_VS_文心一言
获得讯飞星火认知大模型体验授权,第一时间来测试一下效果,使用申请手机号登录后,需要同意讯飞SparkDesk体验规则,如下图所示: 同意之后就可以进行体验了,界面如下: 讯飞星火效果体验 以下Promp…...
Java的集合
1. HashMap排序题,上机题。 已知一个HashMap<Integer,User>集合, User有name(String)和age(int)属性。请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Intege…...
addr2line 使用,定位kernel panic 代码位置
在kernel崩溃时,方便定位代码。 需要打开kernel配置CONFIG_DEBUG_INFO。 需要有System.map和vmlinux文件,一般在out目录。 一般panic的时候会有给出panic的指针,如下down_write。 el1_data说明发生异常了,进入和entry.S文件&a…...
OpenAI目前所有模型介绍
目录 概述 GPT-4 (limted beta) GPT-3.5 GPT-3 各类模型介绍 DALLE Beta Whisper Beta Embeddings Moderation Codex (deprecated) 概述 模型描述GPT-4 Limited beta 一组在 GPT-3.5 上改进的模型,可以理解并生成自然语言或代码GPT-3.5一组在 GPT-3 上改…...
【P43】JMeter 吞吐量控制器(Throughput Controller)
文章目录 一、吞吐量控制器(Throughput Controller)参数说明二、测试计划设计2.1、Total Executions2.2、Percent Executions2.3、Per User 一、吞吐量控制器(Throughput Controller)参数说明 允许用户控制后代元素的执行的次数。…...
方正书版命令详解
方正书版常用的排版符包括: 空格:表示文字之间的间距,不同字号的文字需要适当调整空格大小。 省略号:用于省略一段文字,通常用三个点表示(…)。 破折号:用于表示强调或者断句&…...
Gradio的web界面演示与交互机器学习模型,高级接口特征《6》
大多数模型都是黑盒,其内部逻辑对最终用户是隐藏的。为了鼓励透明度,我们通过简单地将Interface类中的interpretation关键字设置为default,使得向模型添加解释变得非常容易。这允许您的用户了解输入的哪些部分负责输出。 1、Interpret解释 …...
本地项目上传到Git(Gitee)仓库
一、步骤解答(详细图解步骤见第二大点) 1、打开我们的项目所在文件夹,我们发现是不存在.git文件 2、在你的项目文件夹外层【鼠标右击】弹出菜单,在【鼠标右击】弹出的菜单中,点击【Git Bash Here】,弹出运…...
每日热门skill:你的AI终于有“脑子“了!Memory MCP Server让Claude记住你的一切
告别"金鱼记忆",打造真正懂你的AI助手 一、开篇:那个让你崩溃的瞬间 你有没有遇到过这种情况? 昨天刚跟Claude说过:“我是做后端开发的,对Python比较熟悉,前端不太行。” 今天再问:“帮我写个React组件。” 它热情洋溢地回复:“好的!这是一个完整的全栈…...
CPT 强化学习完整实现(PyTorch 版 - Actor-Critic + CPT)
✅ CPT 强化学习完整实现(PyTorch 版 - Actor-Critic CPT) 以下是生产级友好的实现,适合连续/离散控制任务,结合 Cumulative Prospect Theory 修改优势函数(Advantage)。 推荐配置(默认使用&am…...
终极AMD Ryzen调试工具:免费开源的硬件掌控神器
终极AMD Ryzen调试工具:免费开源的硬件掌控神器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...
【DeepSeek日志分析黄金方案】:20年SRE亲授——从TB级日志中5分钟定位P0故障的7大实战模式
更多请点击: https://kaifayun.com 第一章:DeepSeek日志分析方案的演进逻辑与核心哲学 DeepSeek日志分析方案并非从零构建的技术堆砌,而是伴随模型训练规模跃迁、推理服务复杂度攀升、可观测性需求深化而持续演化的系统性实践。其底层哲学始…...
机器学习泛化理论:从AIC/BIC到集中不等式的模型选择与误差分析
1. 项目概述:从经验直觉到理论保证在机器学习的日常实践中,我们训练一个模型,看它在训练集上表现优异,但一放到新数据上就“翻车”,这种现象大家都不陌生,我们称之为“过拟合”。这背后核心的问题就是模型的…...
忘记压缩包密码不用慌:3步自动化找回加密文件的终极方案
忘记压缩包密码不用慌:3步自动化找回加密文件的终极方案 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经面对一个加密…...
为内部知识库构建智能问答,利用Taotoken多模型能力选型优化
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识库构建智能问答,利用Taotoken多模型能力选型优化 当企业计划为内部知识库添加智能问答机器人时,…...
Pseudogen:让代码说人话,你的智能代码翻译官
Pseudogen:让代码说人话,你的智能代码翻译官 【免费下载链接】pseudogen A tool to automatically generate pseudo-code from source code. 项目地址: https://gitcode.com/gh_mirrors/ps/pseudogen 你是否曾面对一段复杂的代码,感觉…...
【Gemini商业价值护城河构建指南】:用4维动态估值法锁定长期LTV,错过Q3将丧失成本优化黄金窗口
更多请点击: https://kaifayun.com 第一章:Gemini生命周期价值分析 Gemini模型的生命周期价值(LTV)不仅体现在其推理性能与多模态能力上,更贯穿于部署、迭代、监控与成本优化的全链路环节。相较于传统大模型ÿ…...
【限时开放】DeepSeek R1/R2安全加固白皮书(含32项合规检测Checklist+自动扫描脚本)
更多请点击: https://codechina.net 第一章:DeepSeek模型安全加固概述 DeepSeek系列大语言模型在开源生态中广泛应用,但其默认部署配置存在若干潜在安全风险,包括提示注入、越权推理、敏感信息泄露及未经授权的模型微调访问。安全…...
