目录
title: dtb和dtc文件浅析
date: 2019/4/25 20:09:38 toc: true ---dtb和dtc文件浅析
工具集
在之前的内核中,我们编译出来了可执行程序
linux-4.19-rc3/scripts/dtc/dtc# 复制到bin下 sudo cp dtc /usr/bin/
常规用法如下:
转换到二进制 dtc>dtb
dtc -I dtb -O dts -o output.dts arch/arm/boot/dts/jz2440.dtb
转换到可读文件 dtb>dtc
dtc -I dts -O dtb -o jz2440.dtb output.dts
可以看下帮助
dtc -hUsage: dtc [options] Options: -[qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@Ahv] -q, --quiet Quiet: -q suppress warnings, -qq errors, -qqq all -I, --in-formatInput formats are: dts - device tree source text dtb - device tree blob fs - /proc/device-tree style directory -o, --out Output file -O, --out-format Output formats are: dts - device tree source text dtb - device tree blob asm - assembler source -V, --out-version Blob version to produce, defaults to 17 (for dtb and asm output) -d, --out-dependency Output dependency file -R, --reserve Make space for reserve map entries (for dtb and asm output) -S, --space Make the blob at least long (extra space) -p, --pad Add padding to the blob of long (extra space) -a, --align Make the blob align to the (extra space) -b, --boot-cpu Set the physical boot cpu -f, --force Try to produce output even if the input tree has errors -i, --include Add a path to search for include files -s, --sort Sort nodes and properties before outputting (useful for comparing trees) -H, --phandle Valid phandle formats are: legacy - "linux,phandle" properties only epapr - "phandle" properties only both - Both "linux,phandle" and "phandle" properties -W, --warning Enable/disable warnings (prefix with "no-") -E, --error Enable/disable errors (prefix with "no-") -@, --symbols Enable generation of symbols -A, --auto-alias Enable auto-alias of labels -h, --help Print this help and exit -v, --version Print version and exit
dts格式
更多参考下
这个就放张图好了,总结起来就是只有一个根(root),子节点可以有子节点
当然存在着一些保留的关键字
Standard Properties | |
---|---|
compatible | 定义一系列的字符串, 用来指定内核中哪个 |
model | |
phandle | |
status | |
#address-cells | 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address) |
#size-cells | 在它的子节点的reg属性中, 使用多少个u32整数来描述大小(size) |
reg | |
virtual-reg | |
ranges | |
dma-ranges | |
name (deprecated) | |
device_type (deprecated) | |
dtb头部结构
struct fdt_header {uint32_t magic;uint32_t totalsize;uint32_t off_dt_struct;uint32_t off_dt_strings;uint32_t off_mem_rsvmap;uint32_t version;uint32_t last_comp_version;uint32_t boot_cpuid_phys;uint32_t size_dt_strings;uint32_t size_dt_struct;};
dtb标识符
参见 5.4.1 Lexical structure
01 表示节点开始02 节点结束09 树结束03 属性名字开始04 nop
分析具体的文件
找到这里的文件
/arch/arm/boot/dts/jz2440.dtb jz2440.dts
具体的文件如下
// SPDX-License-Identifier: GPL-2.0/* * SAMSUNG SMDK2440 board device tree source * * Copyright (c) 2018 weidongshan@qq.com * dtc -I dtb -O dts -o jz2440.dts jz2440.dtb */ #define S3C2410_GPA(_nr) ((0<<16) + (_nr))#define S3C2410_GPB(_nr) ((1<<16) + (_nr))#define S3C2410_GPC(_nr) ((2<<16) + (_nr))#define S3C2410_GPD(_nr) ((3<<16) + (_nr))#define S3C2410_GPE(_nr) ((4<<16) + (_nr))#define S3C2410_GPF(_nr) ((5<<16) + (_nr))#define S3C2410_GPG(_nr) ((6<<16) + (_nr))#define S3C2410_GPH(_nr) ((7<<16) + (_nr))#define S3C2410_GPJ(_nr) ((8<<16) + (_nr))#define S3C2410_GPK(_nr) ((9<<16) + (_nr))#define S3C2410_GPL(_nr) ((10<<16) + (_nr))#define S3C2410_GPM(_nr) ((11<<16) + (_nr))/dts-v1/;/ { model = "SMDK24440"; compatible = "samsung,smdk2440"; #address-cells = <1>; #size-cells = <1>; memory@30000000 { device_type = "memory"; reg = <0x30000000 0x4000000>; };/* cpus { cpu { compatible = "arm,arm926ej-s"; }; };*/ chosen { bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200"; }; led { compatible = "jz2440_led"; pin =; };};