> 文章列表 > RISC-V Linux 编译设备树

RISC-V Linux 编译设备树

RISC-V Linux 编译设备树

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 textdtb - device tree blobfs  - /proc/device-tree style directory-o, --out <arg>            Output file-O, --out-format <arg>     Output formats are:dts - device tree source textdtb - device tree blobasm - assembler source
......