1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 4019 设备树 Linux device tree 概述

4019 设备树 Linux device tree 概述

时间:2020-05-26 01:39:46

相关推荐

4019 设备树 Linux device tree 概述

一:主要关键字定义说明

<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--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--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--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--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--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--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--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--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--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--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--spf-6-1-0_qca_oem.git\qsdk\qca\src\linux-4.4\arch\arm\configs

qcom_defconfig

七:加载执行过程分析

/chineseboy/p/5235608.html

八:系统内核映射

/sys/firmware/devicetree

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。