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
......