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

RISC-V Linux 编译设备树_第1张图片
在arch/riscv/boot/dts/新建一个myhard文件夹,
RISC-V Linux 编译设备树_第2张图片
文件夹新建一个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] 
Options: 
  -I, --in-format       
	Input 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
......

你可能感兴趣的:(linux,risc-v,设备树)