ARM64 Linux 找出dts的3种方法

news2024/10/6 2:30:46

1. 编译完内核如何找出 dts

在编译完 ARM64 内核后,设备树二进制文件(DTB)通常会被放置在 arch/arm64/boot 目录下。在该目录下,你可以找到与目标硬件平台对应的 DTB 文件。命令如下:

$ find arch/arm64/boot/dts/ -name *.dtb.cmd
arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.cmd

里面不仅能展示原始dts文件是哪个,dtb编译过程,还能展示它的依赖文件有哪些,方便把这些依赖文件加到source insight进行分析:

$ cat arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.cmd
cmd_arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb := mkdir -p arch/arm64/boot/dts/rockchip/ ; ./scripts/gcc-wrapper.py ./../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -E -Wp,-MD,arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.d.pre.tmp -nostdinc -I./scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.dts.tmp arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dts ; ./scripts/dtc/dtc -O dtb -o arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb -b 0 -iarch/arm64/boot/dts/rockchip/ -i./scripts/dtc/include-prefixes -@ -Wno-unit_address_vs_reg -Wno-unit_address_format -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-graph_port -Wno-simple_bus_reg -Wno-unique_unit_address -Wno-pci_device_reg  -d arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.d.dtc.tmp arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.dts.tmp ; cat arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.d.pre.tmp arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.d.dtc.tmp > arch/arm64/boot/dts/rockchip/.rk3568-firefly-aioj.dtb.d

source_arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb := arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dts

deps_arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb := \
  arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi \
  arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi \
  scripts/dtc/include-prefixes/dt-bindings/gpio/gpio.h \
  scripts/dtc/include-prefixes/dt-bindings/pinctrl/rockchip.h \
  arch/arm64/boot/dts/rockchip/rk3568-firefly-core.dtsi \
  scripts/dtc/include-prefixes/dt-bindings/pwm/pwm.h \
  scripts/dtc/include-prefixes/dt-bindings/input/rk-input.h \
  scripts/dtc/include-prefixes/dt-bindings/display/drm_mipi_dsi.h \
  scripts/dtc/include-prefixes/dt-bindings/sensor-dev.h \
  arch/arm64/boot/dts/rockchip/rk3568.dtsi \
  scripts/dtc/include-prefixes/dt-bindings/clock/rk3568-cru.h \
  scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/arm-gic.h \
  scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/irq.h \
  scripts/dtc/include-prefixes/dt-bindings/soc/rockchip,boot-mode.h \
  scripts/dtc/include-prefixes/dt-bindings/phy/phy.h \
  scripts/dtc/include-prefixes/dt-bindings/power/rk3568-power.h \
  scripts/dtc/include-prefixes/dt-bindings/soc/rockchip-system-status.h \
  scripts/dtc/include-prefixes/dt-bindings/suspend/rockchip-rk3568.h \
  scripts/dtc/include-prefixes/dt-bindings/thermal/thermal.h \
  arch/arm64/boot/dts/rockchip/rk3568-dram-default-timing.dtsi \
  scripts/dtc/include-prefixes/dt-bindings/clock/rockchip-ddr.h \
  scripts/dtc/include-prefixes/dt-bindings/memory/rk3568-dram.h \
  scripts/dtc/include-prefixes/dt-bindings/memory/rockchip-dram.h \
  arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi \
  arch/arm64/boot/dts/rockchip/rockchip-pinconf.dtsi \
  arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi \
  arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj-cam-8ms1m.dtsi \

arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb: $(deps_arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb)

$(deps_arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtb):

2. Linux 运行起来之后如何找出 dts

当 Linux 系统启动后,设备树信息会被加载到 /proc/device-tree 中。虽然 /proc/device-tree 直接提供的是设备树的二进制形式,但我们可以通过以下步骤生成 DTS 文件,使用 dtc(设备树编译器)工具:

dtc -I fs -O dts -o output.dts /proc/device-tree
  • -I fs: 指定输入格式为文件系统格式。
  • -O dts: 指定输出格式为 DTS。
  • -o output.dts: 指定输出文件名。

3. QEMU直接导出dts

使用QEMU模拟arm64时,如果使用了-machine virt,那么是不需要指定dts的,因为QEMU内置了一个dts文件,参考:qemu/v9.1.0/source/hw/arm/virt.c

qemu-system-aarch64 \
  -cpu cortex-a72 \
  -machine virt,gic-version=3,virtualization=on \
  -m 2048 \
  -nographic \
  -drive file=your_image.img,format=raw \
  -kernel your_kernel.img \
  -initrd your_initrd.img \
  -append "console=ttyAMA0 root=/dev/vda rw"

在使用 QEMU 模拟器时,可以直接在启动虚拟机的过程中导出设备树二进制文件(DTB)。要在 QEMU 启动时导出 DTB,你可以使用 -machine 选项中的 dumpdtb 参数。以下是一个示例命令:

qemu-system-aarch64 -cpu cortex-a72 -machine virt,gic-version=3,virtualization=on,dumpdtb=cortex-a72-virt.dtb
  • qemu-system-aarch64: 启动 QEMU 的 AArch64(ARM64)模拟器。
  • -cpu cortex-a72: 指定使用 Cortex-A72 CPU。
  • -machine virt: 指定虚拟机的机器类型为 virt。
  • gic-version=3: 设置通用中断控制器(GIC)的版本为 3。
  • virtualization=on: 开启虚拟化支持。
  • dumpdtb=cortex-a72-virt.dtb: 在启动时生成并导出名为 cortex-a72-virt.dtb 的 DTB 文件。

成功启动后,QEMU 会自动将设备树保存为指定的 cortex-a72-virt.dtb 文件。你可以在本地文件系统中找到这个文件,并使用 dtc 工具将其转换为 DTS 文件:

dtc -I dtb -O dts -o cortex-a72-virt.dts cortex-a72-virt.dtb

4 修改dts后重新生成dtb

使用 dtc 命令将修改后的 DTS 文件转换为 DTB 文件。假设你的 DTS 文件名为 modified.dts,可以执行以下命令:

dtc -I dts -O dtb -o output.dtb modified.dts
  • -I dts: 指定输入格式为 DTS。
  • -O dtb: 指定输出格式为 DTB。
  • -o output.dtb: 指定输出的 DTB 文件名。

附上一些有用的资料

devicetree « Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree

Specifications (devicetree.org) 

Device Tree Reference - eLinux.org

Device Tree Usage - eLinux.org

ePAPR 1.1 (elinux.org)

记录点滴,欢迎点赞关注收藏,共同进步 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AIGC】ChatGPT提示词Prompt助力自媒体内容创作升级

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯高效仿写专家级文章提示词使用方法 💯CSDN博主账号分析提示词使用方法 💯自媒体爆款文案优化助手提示词使用方法 💯小结 &#x1f4af…

王者农药更新版

一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO,所以RCC开启APB2时钟 2.GPIO初始化(结构体) 3.给GPIO引脚设置高/低电平(WriteBit) 2.2Led循环点亮(GPIO输出) 1.RCC开启APB2时钟。…

Transformer架构概述(二)

目录 1. Transformer架构概述 1.1 《Attention is All You Need》论文概述 1.2 Transformer的模块组成 1.3 Encoder 和 Decoder 的区别与联系 2. Transformer的并行计算效率相对于RNN的提升 2.1 RNN中的顺序处理问题 2.2 Transformer中的并行化优势 3. Self-Attention机…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout,setInterval ,requestAnimationFrame定时器 定时器函数通常用于执行定时任务,也就是说你做了一个功能放在定时器函数里,它可以在特定的时间去执行你的指令,或者说隔多长时间(单位时间内—毫秒为…

为什么每个人都要学习项目管理?

在这个已然到来的超级个体时代,项目管理这项技能,不仅仅是项目经理才需要掌握的,而是每个想要独当一面之人的必备技能。 所谓的独当一面,就是从一个人做好自己的事,到带领一群人从头到尾把事做成。而学习项目管理&…

路由器的工作机制

在一个家庭或者一个公司中 路由器的作用主要有两个(①路由–决定了数据包从来源到目的地的路径 通过映射表决定 ②转送–通过路由器知道了映射表 就可以将数据包从路由器的输入端转移给合适的输出端) 我们可以画一张图来分析一下: 我们好好来解析一下这张图&#x…

Chromium 搜索引擎功能浅析c++

地址栏输入:chrome://settings/searchEngines 可以看到 有百度等数据源,那么如何调整其顺序呢,此数据又存储在哪里呢? 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

C++教程一口气讲完!(万字讲解)( ̄y▽ ̄)╭ Ohohoho... 下

C 常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进行修改。 …

【设计模式】软件设计原则——开闭原则里氏替换单一职责

开闭原则内容引出 开闭原则 定义&#xff1a;一个软件实体&#xff0c;类&#xff0c;函数&#xff0c;模块&#xff1b;对扩展开放&#xff0c;对修改关闭。用抽象构建框架&#xff0c;用实现扩展细节。可以提高软件的可复用性和可维护性。 开发新功能时&#xff0c;尽量不修…

Redis实现每日签到(大数据量)

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能 目录 问题 解决方式 封装签到类 功能调用 总结 问题 实现用户每日签到功能不难&#xff0c;但随着用户量上升之后&#xff0c;不论是存储还是判断对数据量来说都很麻烦&#xff1b;假如每天有100万用…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

深度学习-----------------------------束搜索

目录 贪心搜索&#xff08;一般来说计算最快的&#xff09;穷举搜索&#xff08;一般来说是最好的&#xff0c;但可能算不动&#xff09;束搜索&#xff08;Beam Search&#xff09; 总结 贪心搜索&#xff08;一般来说计算最快的&#xff09; 在seq2seq中使用贪心搜索来预测序…

软考数据库部分 ---- (概念数据库模型,三级模式,两级映像,事物管理)

文章目录 一、概念数据库模型二、结构数据库模型三、三级模式四、两级映像五、关系模式基本术语六、关系模式七、关系的数学定义八、数据定义语言九、SQL访问控制十、视图十一、索引十二、关系模式十三、范式十四、数据库设计十五、事物管理&#xff08;ACID&#xff09;十六、…

基于SPI协议的Flash扇区擦除实验

当一块Flash芯片中的不同的扇区烧录了不同的程序&#xff0c;而我们只想擦除某个扇区的程序保留其他程序时&#xff0c;Flash的全擦除是不能满足要求的&#xff0c;这时候就需要扇区擦除来实现这一功能。扇区擦除可以对Flash芯片中的某一扇区进行擦除而不改变其他扇区中的存储数…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分&#xff0c;比如spring、dubbo&#xff0c;还有我们要聊的Mybatis等等。所谓插件&#xff…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种&#xff0c;性能如下所示&#xff1a; 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

Linux驱动开发(速记版)--printctl子系统

第102章 pinctrl 子系统的引入 Linux中的 pinctrl子系统是管理和配置GPIO引脚的框架&#xff0c;提供标准化方法以适应不同硬件。 它遵循 Linux内核设备模型&#xff0c;分为设备、驱动等部分。 本章节从设备和驱动角度介绍 pinctrl子系统。 102.1 pinctrl 设备树 在设备树中&a…

旅游心动盲盒:开启个性化旅行新体验

嘿&#xff0c;宝子们&#xff01;在如今这个数字化时代呀&#xff0c;文心智能体可是给咱们的生活带来了超多便利和创新呢。今天呀&#xff0c;我来给大家介绍一款超棒的智能体——旅游心动盲盒&#xff0c;它肯定能给你的旅行带来全新的惊喜和超个性化的体验哟。 一、项目背…