4019 设备树 Linux device tree 概述

article/2025/11/5 13:27:11

一:主要关键字定义说明

<1>. DT :Device Tree

<2>. FDT : Flattened Device Tree

<3>. OF :Open Firmware

<4>. DTS :device tree source

<5>. DTSI:device tree source include

<6>. DTB :device tree blob

<7>. DTC :device tree compiler

二:制作镜像: 

FIT镜像制作示例,FIT是内核、设备树、文件系统合并成一个文件的一种镜像,并且一个FIT镜像里边可能包含了很多个内核、设备树、文件系统等;

<1>准备文件:

    a.可执行程序:mkimage;

        该文件在U-Boot编译完成后,源码目录下/tools/有编译好的二进制程序;

    b.分开的镜像文件:zImage、rootfs.gz、dev-tree.dtb;

        zImage由内核源码编译后在arch/arm/boot/zImage目录下;

        rootfs.gz由busybox编译后,添加相关文件、目录后制作而成,参见 “busybox根文件系统制作”;

        dev-tree.dtb是设备树编译好后的二进制文件,在linux源码目录执行make dtbs可生成,也可用linux源码目录的/scripts/dtc/dtc工具编译;

    c.描述合并后镜像信息的文件:image_info.its;

        *.its文件需要用户自己编写,编写时可以参考U-Boot源码目录下的./doc/uImage.FIT/kernel.its文件编写;

<2> 生成FIT镜像

  命令:./mkimage -f image_info.its fit.img

  其中:-f 表明要依据its文件内描述的文件制作FIT镜像;image_info.its文件是针对当前单板构建的镜像信息描述文件;fit.img是最后生成的FIT镜像文件名,文件名和拓展名自定义(file命令可以看到不管文件拓展名是啥,文件本质是:data)

  注:执行该条命令时,需要把its文件内描述的镜像文件放在指定的路径下,mkimage工具会依据its文件内描述自动加载文件,生成的fit.img文件也可以依据需求指定文件的路径,最好是绝对路径。

FIT镜像制作示例,FIT是内核、设备树、文件系统合并成一个文件的一种镜像,并且一个FIT镜像里边可能包含了很多个内核、设备树、文件系统等;

 

mkimage -f /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/fit-qcom-ipq4019-ap.dk07.1-c1.its fit-qcom-ipq4019-ap.dk07.1-c1.itb 来完成。

 

其中

fit-qcom-ipq4019-ap.dk07.1-c1.itb 为最终生成的文件

fit-qcom-ipq4019-ap.dk07.1-c1.its 用来说明itd文件如何生成。

 制作FIT(Flattened device tree)镜像

  ./tools/mkimage -f image_info.its fit.img

<3> xxx.its的文件内容

root@suiyuan626-vm:~# cat /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/fit-qcom-ipq4019-ap.dk07.1-c1.its

/dts-v1/;

 

/ {

description = "ARM OpenWrt FIT (Flattened Image Tree)";

#address-cells = <1>;

 

images {

kernel@1 {

description = "ARM OpenWrt Linux-4.4.60";

data = /incbin/("/fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/Image-initramfs");

type = "kernel";

arch = "arm";

os = "linux";

compression = "none";

load = <0x80208000>;

entry = <0x80208000>;

hash@1 {

algo = "crc32";

};

hash@2 {

algo = "sha1";

};

};

 

 

fdt@1 {

description = "ARM OpenWrt qcom-ipq4019-ap.dk07.1-c1 device tree blob";

data = /incbin/("/fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/linux-4.4.60/arch/arm/boot/dts//qcom-ipq4019-ap.dk07.1-c1.dtb");

type = "flat_dt";

arch = "arm";

compression = "none";

hash@1 {

algo = "crc32";

};

hash@2 {

algo = "sha1";

};

};

 

 

};

 

configurations {

default = "config@1";

 

config@1 {

description = "OpenWrt";

kernel = "kernel@1";

fdt = "fdt@1";

};

 

};

};

 

cp -fpR /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/fit-qcom-ipq4019-ap.dk07.1-c1.itb /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/bin/ipq806x/openwrt-ipq806x-qcom-ipq4019-ap.dk07.1-c1-fit-uImage.itb

 

 

 

同理通过mkimage 制作FTD文件

mkimage -f /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/fit-qcom-ipq40xx-ap.dkxx.its /fae/qsdk/arm/spf6.1.1.new/qca-networking-2018-spf-6-1-0_qca_oem.git/qsdk/build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/fit-qcom-ipq40xx-ap.dkxx.itb

 

fit-qcom-ipq40xx-ap.dkxx.itb 用来打包固件

其中

三:DTS说明

那么可以把不变的东西和变化的东西分开来做。不变的逻辑,以少量精确的代码搞定;变化的资源,可以形成一个资源配置文件。基于这种思想,Linux device tree(DTS)便应运而生。所谓DTS,它是一个以 ".dts"结尾的文件,该文件会被编译成dtb文件,uboot会把该文件放置到某特定的内存区域,并把相关参数传给kernel;kernel起来之初,便会去解析该文件,以便拿到板载资源配置。DTS文件中内容框架是一棵树的结构,其由一系列的结点(node)和属性(property)键值对组成,此处不进行具体分析。DTS文件一般放在 "kernel/arch/arm/boot/dts/ " 目录下。

Device tree结构约定

Device tree 常用节点类型

所有device tree节点必须有1个根节点/, 还必须在根节点下有如下2个节点:

1、Cpu节点

2、memory节点 ---ePAPR规范指定了memory是必须的节点,名称也必须是memory。内存节点描述了系统物理内存的信息,如果系统中有多个内存范围,device tree中可能会创建多个内存节点,或者在一个单独的内存节点中通过reg属性指定内存的范围、

3、Chosen节点不代表一个真正的节点,只是传到参数的作用,chosen里的数据也不代表硬件。

4、Cpus节点

必须的节点,不代表真实设备,存放cpu节点的一个容器

5、cpu节点描述具体的硬件执行单元

6、soc节点表示一个系统级的芯片

文档 documentation/devicetree/bindings

四:DTS文件路径位置

Z:\fae\qsdk\arm\spf6.1.1.new\qca-networking-2018-spf-6-1-0_qca_oem.git\qsdk\qca\src\linux-4.4\arch\arm\boot\dts

描述文件存放路径: kernel/arch/arm/boot/dts

3个dts文件组成:

qcom-ipq4019.dtsi

qcom-ipq4019-ap.dk07.1.dtsi

qcom-ipq4019-ap.dk07.1-c1.dts

qcom-ipq4019-ap.dk07.1-c1.dtb

 

五:编译使能DTS

Z:\fae\qsdk\arm\spf6.1.1.new\qca-networking-2018-spf-6-1-0_qca_oem.git\qsdk\qca\src\linux-4.4\arch\arm\boot\dts 的makefile 中

六:配置文件

Z:\fae\qsdk\arm\spf6.1.1.new\qca-networking-2018-spf-6-1-0_qca_oem.git\qsdk\qca\src\linux-4.4\arch\arm\configs

qcom_defconfig

 

七:加载执行过程分析

https://www.cnblogs.com/chineseboy/p/5235608.html

 

 

八:系统内核映射

/sys/firmware/devicetree

 

 


http://chatgpt.dhexx.cn/article/HnIf0hyv.shtml

相关文章

修改高通IPQ4019/4018的flash的分区

修改IPQ4019/4018的MTD分区 简介 高通的IPQ4018的SoC使用了ARM的CPU&#xff0c;并使用了高通的QSDK. 在开发中发现很难在它的架构中去修改MTD分区信息。 今天就提供一种可以修改MTD分区的方式。 MTD分区信息是如何从Uboot传到linux的&#xff0c;有几种方式&#xff1f;…

ipq4019 识别板卡型号的过程

openwrt系统启动后&#xff0c;会在/tmp/sysinfo/生成两个文件。其中保存了板卡型号的信息。如下日志。 [rootAbloomy:sysinfo]# pwd /tmp/sysinfo [rootAbloomy:sysinfo]# ls board_name model [rootAbloomy:sysinfo]# # cat board_name ap-dk01.1-c1 [rootAbloomy:sysinfo]# …

IPQ4019 QSDK 下添加RM500Q 5G 驱动 qmi拨号链接网络 配置 IPK包方法

拿到的移远的拨号软件驱动只用qmi方式&#xff0c;GobiNet 似乎没有。 一、运行环境 1.qca-networking-2019-spf-11-0_qca_oem 2.IPQ4019 3.Linux4.4.60 4.USB3.0接口 RM500Q qmi拨号上网 二、移植步骤 1.首先内核Linux4.4.60需要添加的关于RM500Q USB 的PID VID等步骤&a…

高通IPQ4019 IPQ4029 模块+底板双频 AC无线路由模块开发板

1、简介 采用 PH2.0 双排针插拔简易安装方式&#xff0c;可以通过连接不同种类的接口板设计&#xff0c;可以扩展无线路由、网络存储、广告热点、4G、DTU 数据传输、串口转 WIFI、远程监控等多功能产品应用&#xff1b;最大程度简化了无线网络产品开发设计过程。 可以根据客户…

wifi5 router/ wallys/IPQ4019 IPQ4029 ,802.11AC 2x2 2.4G5G/IPQ5018, 802.11ax,wifi 6e,QCN9074

IPQ4019 IPQ4029 ,802.11AC 2x2 2.4G&5G ​​​​​​2x2 2.4Ghz&5G IPQ5018, 802.11ax,wifi 6e,QCN9074, 2X2 2.4G support 2x WiFi 6E Card support BT5.1 MT7915/MT7975/IPQ6000/IPQ6018/IPQ6010/IPQ4019/IPQ4029/ipq4018/IPQ4028/IPQ8072/IPQ8072A/IPQ8074/IPQ…

IPQ4019MTD分区生成的过程

简介 本文介绍一个IPQ4019的MTD分区信息是如何从配置文件一步步传递到linux内核的。这个过程有几个部分组成&#xff0c;分区信息在编译过程中的传递&#xff1b;升级时写入flash区&#xff1b;设备上电时linux如何得到分区信息。 上电后linux打印的MTD分区如下图。 分区信息在…

修改IPQ4019/4018的MTD分区

简介 高通的IPQ4018的SoC使用了ARM的CPU&#xff0c;并使用了高通的QSDK. 在开发中发现很难在它的架构中去修改MTD分区信息。 今天就提供一种可以修改MTD分区的方式。 MTD分区信息是如何从Uboot传到linux的&#xff0c;有几种方式&#xff1f; 换一种问法 uboot如何把参数传入l…

IPQ4019/QCA9531/MT7628/MT7621系嵌入式无线双频AP核心模块选型探讨

嵌入式双频无线AP核心模块,首先是核心模块,不是成品主板,也可以认为是成品的核心部分&#xff0c;或者理解成只带方便延伸的接口功能&#xff0c;不带外围实际接口的成品&#xff0c;实际使用时&#xff0c;可以根据所需要的接口灵活选择(未必要使用全部接口)&#xff1b;功能上…

ARM 汇编语言

1. 什么是汇编语言&#xff1f; 计算机处理器&#xff0c;执行的是 二进制的 10101010001&#xff0c;这些机器码对应的助记符就是汇编指令。 处理器 fetch 到的指令是 1001010101, 可能就是 对应汇编语言中 ADD 的加法指令&#xff0c; 处理器执行 加法操作&#xff0c;并把…

利用keil完成ARM汇编语言编程入门实践

文章目录 一、安装keil软件1.下载安装包2.安装keil3.安装stm32 pack 二、简单的stm汇编语言的编程1.新建工程项目2、新建main.c文件3.编译4.stm32仿真调试5.hex文件分析解读 一、安装keil软件 1.下载安装包 下载安装mdk5软件和stm32包&#xff08;链接&#xff1a;https://pa…

如何在ARM下进行高效的C编程?

通过一定的风格来编写C程序&#xff0c;可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点&#xff1a; 1.对局部变量、函数参数和返回值要使用signed和unsigned int类型。这样可以避免类型转换&#xff0c;而且可高效地使用ARM的32位数据操作指令。 …

## ARM基础编程实验

ARM基础编程实验 作者&#xff1a; Saint 掘金&#xff1a;https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博&#xff1a;https://weibo.com/5458277467/profile?topnav1&wvr6&is_all1 GitHub&#xff1a;github.com/saint-000 CSDN: https://me.csdn.net/qq_4…

ARM汇编编程基础

(一) -- ARM CPU寄存器 本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》。 本系列文章&#xff0c;所需代码请从以下地址下载: http://download.csdn.net/download/scyangzhu/4602585 ARM的汇编编程&#xff0c;本质上就是针对&#xff23;&#xff30;&#…

搭建Keil编程环境,ARM汇编语言编程入门实践

多看多学 一、安装及配置环境01 型号分类及缩写02 资料共享03 安装器件支持包04 Keil简单设置 二、简单程序编译01 新建工程02 配置环境03 添加源文件04 设置仿真器模式05 编译调试06 分析Hex文件 三、中值滤波及程序设计01 中值滤波02 流程框图03 程序设计 四、总结参考资料 一…

ARM编程环境搭建教程

随着移动互联网的繁荣发展&#xff0c;物联网人工智能的兴起&#xff0c;嵌入式开发成为了越来越多IT人必须学习的内容&#xff0c;而在嵌入式芯片领域&#xff0c;ARM具有无可撼动的市场占有率&#xff0c;所以说&#xff0c;学习嵌入式不学ARM&#xff0c;不如回家卖红薯。 接…

嵌入式ARM设计编程(四) ARM启动过程控制

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 &#xff08;1&#xff09; 掌握建立基本完整的ARM 工程&#xff0c;包含启动代码&#xff0c;C语言程序等&…

《嵌入式基础》实验三 ARM编程模型和ARM指令

零、前言 本人不擅长写汇编相关的东西&#xff0c;所以以下内容也是不断摸索&#xff08;百度 &#xff09; 整出来的&#xff0c;和linux的实验报告的质量相比较低。 一、 实验目的 掌握ARM微处理器的汇编指令的使用方法。掌握使用 LDM/STM&#xff0c;B&#xff0c;BL 等指…

嵌入式ARM设计编程(一) 简单数据搬移

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 熟悉实验开发环境&#xff0c;掌握简单ARM汇编指令的使用方法。 二、实验环境 硬件&#xff1a;PC机 软件&am…

ARM汇编语言编程入门实践

文章目录 一、keil的安装二、安装stm32 pack三、keil 的简单设置四、基于STM32汇编程序的编写4.1 新建工程4.2 新建test.s文件4.3 编译程序4.4 分析HEX文件 五、总结六、参考资料 一、keil的安装 双击打开mdk_510.exe应用程序文件&#xff0c;点击Next>>。勾选I agree……

ARM体系结构与编程模型总结

ARM体系结构与编程模型 ARM体系结构 一、ARM处理器简介及RISC特点 ARM处理器简介 ARM&#xff08;Advanced RISC Machines&#xff09;是一个32位RISC&#xff08;精简指令集&#xff09;处理器架构&#xff0c;ARM处理器则是ARM架构下的微处理器。ARM处理器广泛的使用在许多…