RISC-V Linux 编译设备树

设备树是描述硬件资源的数据结构,用于分离Linux内核中的设备信息,提高驱动开发效率。dts文件包含了设备信息,经dtc编译成dtb文件,U-boot在启动时加载此文件,使内核能识别硬件。dtsi文件则保存共享部分。在RISC-V架构下,通过修改dts文件可以适应不同主板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值