linux设备驱动程序:设备树多级子节点的转换

linux设备驱动程序--设备树多级子节点的转换

在设备树处理之——device_node转换成platform_device中,有提到在设备树的device_node到platform_device转换中,必须满足以下条件:

  • 一般情况下,只对设备树中根的一级子节点进行转换,也就是多级子节点(子节点的子节点)并不处理。但是存在一种特殊情况,就是当某个根子节点的compatible属性为"simple-bus"、"simple-mfd"、"isa"、"arm,amba-bus"时,当前节点中的一级子节点将会被转换成platform_device节点。
  • 节点中必须有compatible属性。

事实上,在设备树中,通常会存在将描述设备驱动的设备树节点被放置在多级子节点的情况,比如下面这种情况:

/{
	...
	i2c@44e0b000 {
		compatible = "ti,omap4-i2c";
		...
		tps@24 {
			reg = <0x24>;
			compatible = "ti,tps65217";
			...
			charger {
				compatible = "ti,tps65217-charger";
				...
			};
			pwrbutton {
				compatible = "ti,tps65217-pwrbutton";
				...
			};
		}
	}
	...
}

显然,i2c@44e0b000会被转换成platform_device,而tps@24、charger、pwrbutton则不会,至少在设备树初始化阶段不会被转换,仍旧以device_node的形式存在在内存中。

显而易见,这些设备并非是无意义的设备,那么它们是什么时候生成platform_device的呢?

答案是:由对应根目录的一级子节点处理。

我们以i2c@44e0b000节点为例,事实上,这个节点对应一个i2c硬件控制器,控制器的起始地址是0x44e0b000,这个节点的作用就是生成一个i2c硬件控制器的platform_device,与同样被加载到内存中的platform_driver相匹配,在内存中构建一个i2c硬件控制器的描述节点,负责对应i2c控制器的数据收发。

根据设备树的compatible属性匹配机制,在内

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值