设备树语法---节点操作

节点语法

根节点

每个设备树文件只有一个根节点, stm32mp157d-atk.dts 和 stm32mp157d-atk.dtsi这两个文件根节点的内容会合并成一个根节点。

  • Linux 内核启动的时候会解析设备树中各个节点的信息,并且在根文件系统的/proc/device-tree 目录下根据节点名字创建不同文件夹,将设备树文件转化为拥有树状结构的文件夹系统,与linux下一切设备都是文件的理念相符合
根节点compatible属性

节点compatible属性是为了将设备与驱动联系在一起的。根节点的这个属性也不例外。**"st,stm32mp157d-atk"描述了所使用的硬件设备名字;“st,stm32mp157”**描述了设备所使用的 SOC。

 / {

	model = "STMicroelectronics STM32MP157C-DK2 Discovery Board";
 	compatible = "st,stm32mp157d-atk", "st,stm32mp157";

 };
  • 15系列分为151,155,157。其中151为最基础的型号。所以很多芯片资源定义都在151的设备树文件里,我们后期的开发需要引用这些设备树文件。
  • 例如:i2c1 节点是定义在 stm32mp151.dtsi 文件中的,而 stm32mp151.dtsi 是共有的设备树头文件,其他所有使用到 stm32mp1 这颗 SOC 的板子都会引用 stm32mp151.dtsi 这个文件。

根节点的子结点

aliases 子节点

aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。

aliases{
    serial0 = &uart4;
    serial1 = &usart3
    serial2 = &uart5;
    serial3 = &uart7;
}
chosen 子节点

chosen 并不是一个真实的设备,chosen 节点主要是为了 uboot 向 Linux 内核传递数据,重点是 bootargs 参数

chosen {
 	stdout-path = "serial0:115200n8";
 };

标准输出路径是serial0,而serial0已经定义为uart4。所以开发板启动后uart4为默认终端

CPU子结点

存放cpu资源,两个核心则拥有两个子节点。

SOC子结点

存放芯片上所有的内部外设,并且兼容属性为simple-bus

向根节点追加或者修改内容

修改节点内容或者添加节点数据
 &i2c1 {

 /* 要追加或修改的内容 */
};

以此种方式在本工程的设备树文件中向**“i2c1: i2c@40012000”**节点添加子结点,而不会影响其他型号的板子正常使用。

SOC外设

SOC(System on Chip,片上系统)是集成了多种功能模块和外设的单一芯片。OC内部外设指的是嵌入在SOC芯片内部的各种外部设备,这些设备在单个芯片上集成,以提供多样化的功能。下面是一些常见的SOC内部外设:

  1. UART(Universal Asynchronous Receiver-Transmitter):用于串行通信的外设,常用于与外部设备进行通信,如连接调试器、传感器等。
  2. SPI(Serial Peripheral Interface):用于串行通信的外设,常用于连接外部存储器、传感器、显示屏等。
  3. I2C(Inter-Integrated Circuit):用于连接多个芯片的串行通信总线,常用于连接各种外部设备,如温度传感器、电容式触摸屏等。
  4. GPIO(General Purpose Input/Output):通用输入输出端口,可以通过编程控制用于连接和控制各种外部设备。
  5. DMA(Direct Memory Access):直接内存访问控制器,用于高速数据传输,减轻CPU的负担。
  6. 定时器/计数器:用于生成精确的时间间隔,通常用于控制任务的执行时间或产生周期性信号。
  7. 时钟和时钟管理单元:用于生成和分配各种时钟信号,以驱动SOC内部的各个模块。
  8. 存储控制器:用于连接内部和外部存储设备,如闪存、DRAM等。
  9. DMA控制器:用于管理数据在内存和外部设备之间的直接传输,提高数据传输效率。
  10. 以太网控制器:用于网络通信,连接到以太网,实现网络功能。
  11. USB控制器:用于连接USB设备,实现USB通信和功能。
  12. GPU(Graphics Processing Unit):图形处理单元,用于图形加速和渲染。
  13. 加速器:如硬件加密模块、信号处理器等,用于加速特定任务的执行。
  14. 音频处理器:用于音频信号的输入、输出和处理。
  15. 视频处理器:用于视频信号的输入、输出和处理,如解码、编码等。
  16. 片上内存(SRAM、ROM等):用于存储程序代码、数据等。
  17. 看门狗计时器:用于监控系统运行状态,防止系统死锁。
  18. 温度传感器、电压传感器:用于监测芯片内部温度和电压等参数。

示例

1 i2c1最初的定义:

//芯片上的内部外设i2c设备。 
i2c1: i2c@40012000 {

	compatible = "st,stm32mp15-i2c";
 	reg = <0x40012000 0x400>;
//两个中断类型的名称
	interrupt-names = "event", "error";
     
//定义了两个中断源
//一个为外部中断控制器节点(exti)的第21号中断
//一个为通用中断控制器节点(intc)的GIC——SPI 32号中断
//两个中断都是高电平触发(IRQ_TYPE_LEVEL_HIGH)。
	interrupts-extended = <&exti 21 IRQ_TYPE_LEVEL_HIGH>,
 		<&intc GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
     
//时钟 由rcc设备节点的“I2C1_K”时钟提供。
 	clocks = <&rcc I2C1_K>;
     
//重置
 	resets = <&rcc I2C1_R>;

 	#address-cells = <1>;
 	#size-cells = <0>;

// 定义了两个DMA通道,分别接受"rx"发送"tx"数据。
//通道配置信息:dmamux通道号、起始地址和长度
 	dmas = <&dmamux1 33 0x400 0x80000001>,
 		 <&dmamux1 34 0x400 0x80000001>;
//定义了通道名称
 	dma-names = "rx", "tx";
     
//指定了与该设备相关联的电源域为“pd_core”
 	power-domains = <&pd_core>;
     
//指定了syscfg寄存器的配置,具体的配置值为0x4和0x1。
 	st,syscfg-fmp = <&syscfg 0x4 0x1>;
     
//表示该设备可以作为唤醒源,可以唤醒系统。
 	wakeup-source;
     
 	status = "disabled";

 };

2 对i2c1追加内容:

&i2c1 {
//指定了引脚控制的名称,即在默认模式下使用"default",在睡眠模式下使用"sleep"
 	pinctrl-names = "default", "sleep";
//不同的工作状态下定义了引脚的功能和电气属性。    
 	pinctrl-0 = <&i2c1_pins_b>;
 	pinctrl-1 = <&i2c1_pins_sleep_b>;

 	status = "okay";

//时钟频率
 	clock-frequency = <100000>;
    
//子结点,fxls8471芯片。表示 I2C1 上连接的 fxls8471。
 	fxls8471@1e {
 		compatible = "fsl,fxls8471";
 		reg = <0x1e>;
 		position = <0>;
        
//指定了中断的父节点,即中断控制器的引用
 		interrupt-parent = <&gpioh>;
//指定了中断号和中断类型,即中断号为6,类型为下降沿触发。
 		interrupts = <6 IRQ_TYPE_EDGE_FALLING>;

 	};

 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值