我正在学习如何开发Linux I2C内核驱动程序,并且我从以下网站学习
How to instantiate I2C devices
I2C Driver for Linux Based Embedded System
...
接下来,我找到了一个示例,展示了如何实现I2C触摸板驱动程序,但它让我很困惑。
linux/drivers/input/mouse/synaptics_i2c.c
我的问题是,Linux内核如何将此驱动程序绑定到正确的设备?
该驱动程序不提供“检测”功能。回调,没有通过i2c_driver.address_list指定I2C从设备地址,似乎没有人可以调用i2c_board_info来注册地址信息(我grep整个Linux代码库)。
我认为驱动程序必须指定从属地址或提供'检测'回调,就像
一样
drivers/hwmon/adc128d818.c
要么
linux/drivers/rtc/rtc-ds1307.c(将由i2c_board_info注册)
请让我知道我错过了什么,谢谢。
答案 0 :(得分:0)
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)属性“compatible”用于查找和映射设备与驱动程序 5)每个条目的单元格内的其他属性特定于将在探测期间用于设备初始化的驱动程序
https://www.kernel.org/doc/Documentation/i2c/instantiating-devices
答案 1 :(得分:0)
我终于弄明白了我的问题。
请参阅http://www.embedded-bits.co.uk/2009/i2c-in-the-2632-linux-kernel/
需要在内核上使用i2c_new_probed_device()或i2c_new_device注册我的I2C设备,让它拥有一个关于从地址和设备名称的映射表。