RISC-V Linux 编译设备树
flyfish
设备树是一种描述硬件资源的数据结构
引入设备树的主要目的
曾经
Linux内核中夹杂着大量的设备信息,影响Linux驱动开发效率,因为外部设备发生任何改动,需要重新编写和编译驱动代码。
现在
设备驱动程序和设备信息分离,使得内核和硬件资源描述相对独立。
设备树的组成
1是dts设备树描述文件,存储在内核的/arch/riscv/boot/dts目录中。对于项目中使用的dts文件,它描述了开发板的设备信息。
2是dtc,属于编译工具,会将dts文件编译为dtb文件。
3是dtb文件,属于dts编译后生成的二进制文件,U-boot在引导启动内核时,会读取该文件到内存中去,然后内核读取访问。
4是dtsi文件,设备树将dts共同部分提炼保存在.dtsi文件中,供不同的dts共同使用。
通过U-boot将硬件设备驱动信息传递给Linux内核,对于同一个芯片的不同主板,只需更换设备树文件.dtb。
编译工具dtc所在linux内核目录linux/scripts/dtc
在arch/riscv/boot/dts/新建一个myhard文件夹,
文件夹新建一个skeleton.dts文件,文件内容如下
/dts-v1/;
/ {
compatible = "snps,arc";
#address-cells = <1>;
#size-cells = <1>;
chosen { };
aliases { };
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "riscv";
reg = <0>;
riscv,isa = "rv64imafdc";
mmu-type = "riscv,none";
i-cache-block-size = <64>;
i-cache-size = <0x8000>;
d-cache-block-size = <64>;
d-cache-size = <0x8000>;
};
};
};
在linux内核执行命令
./scripts/dtc/dtc -I dts -O dtb -o tmp.dtb ./arch/riscv/boot/dts/myhard/skeleton.dts
在linux内核根目录生成一个tmp.dtb 文件
命令解释
Usage: dtc [options] <input file>
Options:
-I, --in-format <arg>
Input formats are:
dts - device tree source text
dtb - device tree blob
fs - /proc/device-tree style directory
-o, --out <arg>
Output file
-O, --out-format <arg>
Output formats are:
dts - device tree source text
dtb - device tree blob
asm - assembler source
......