上一篇文章我们分析了i2c驱动匹配设备的过程,i2c设备分为控制器与i2c设备,linux内核加载的时候分别加载各个i2c控制器与他们下面挂在的i2c设备,把这些设备一一注册到内核中,这就是我们整个linux系统的资源,以下是i2c设备被注册的过程
rk3x_i2c_probe -> H:\RK3399\kernel\drivers\i2c\busses\i2c-rk3x.c //探测到一个i2c控制器
i2c_add_adapter -> H:\RK3399\kernel\drivers\i2c\i2c-core.c //添加i2c控制器设备到总线上
__i2c_add_numbered_adapter->
i2c_register_adapter-> //注册i2c控制器
of_i2c_register_devices->
of_i2c_register_device->
i2c_new_device->
static void of_i2c_register_devices(struct i2c_adapter *adap)
{
struct device_node *node;
printk("fan of_i2c_register_devices 1436\n");
/* Only register child devices if the adapter has a node pointer set */
if (!adap->dev.of_node)
return;
dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
for_each_available_child_of_node(adap->dev.of_node, node) {
//查找这个i2c控制器上所有的节点,找到把设备添加到设备链表上去
if (of_node_test_and_set_flag(node, OF_POPULATED))

本文详细解析了Linux系统中I2C设备的注册过程,包括控制器与设备的注册步骤,以及通过of_i2c_register_devices函数遍历并注册所有子节点设备。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



