我正在学习如何开发Linux内核驱动程序,并在下面的网站上学习。
基于Linux的嵌入式系统I2C驱动程序
..。
接下来,我找到了一个示例,它展示了如何实现I2C触摸屏驱动程序,但它确实让我感到困惑。
我的问题是,Linux内核如何将这个驱动程序绑定到正确的设备上?
此驱动程序不提供“检测”回调,不通过i2c_driver.address_list指定i2c_driver.address_list从地址,而且似乎没有任何人调用i2c_board_info来注册地址信息(I grep是整个Linux代码库)。
我认为驱动程序必须指定从地址或提供“检测”回调,就像
司机/hwmon/adc128d818.c
或linux/drivers/rtc/rtc-ds1307.c (它将由i2c_board_info注册)
请告诉我我错过了什么,谢谢。
发布于 2017-11-07 10:48:14
i2c设备声明从设备树开始。
在设备树中声明i2c设备。
示例:
i2c1: i2c@400a0000 {
/* ... master properties skipped ... */
clock-frequency = <100000>;
flash@50 {
compatible = "atmel,24c256";
reg = <0x50>;
};
pca9532: gpio@60 {
compatible = "nxp,pca9532";
gpio-controller;
#gpio-cells = <2>;
reg = <0x60>;
};
};哪里,
( 1) 400a000是i2c总线地址2) pca9532和flash是驱动程序名称( 3) @50和@60是从地址4)属性“兼容”以查找和映射设备与驱动程序5)每个条目的单元格内的其他属性是特定于驱动程序的,该驱动程序将用于探针期间的设备初始化
https://www.kernel.org/doc/Documentation/i2c/instantiating-devices
发布于 2017-11-14 02:51:38
我终于想出了我的问题。
请参阅http://www.embedded-bits.co.uk/2009/i2c-in-the-2632-linux-kernel/
需要将我的I2C设备注册到内核上的i2c_new_probed_device()或i2c_new_device,才能让它有一个关于从地址和设备名称的映射表。
https://stackoverflow.com/questions/47155211
复制相似问题