我需要创建一个Linux内核驱动程序,通过接口板在I2C上与一堆单片机连接。因为它们的数量会很多,即大约1-18个,所以我们使用恩智浦/ TI I2C多路复用器。
我已导入恩智浦/ TI I2C多路复用器内核驱动程序,并已将其合并到DTS文件中。我已经成功地将所有I2C多路复用器列为不同的i2c-x节点。
所有MCU都使用相同的地址0x08。我创建了一个内核驱动程序,它为它创建了一个hwmon + sysfs接口。但是,insmod上的驱动程序只触发__init函数。并且不会为probe()而烦恼。
在参考了许多文档后,我只能在插入时触发探测功能
static struct i2c_board_info xxxx_i2c_devices[] = {
{
I2C_BOARD_INFO("xxxx", 0x08),
},
};以及与其对应的
i2c_register_board_info(0, xxxx_i2c_devices, ARRAY_SIZE(xxxx_i2c_devices));但是,这在HWMON中只创建了一个实例,而不是我想象中的多个实例。我已经推荐了https://www.kernel.org/doc/Documentation/i2c/instantiating-devices
在没有更改主板init的情况下,我尝试使用方法3,但是内核甚至不调用probe()和检测function(),只调用驱动程序的__init函数。
我遵循驱动程序- https://github.com/1119553797/sprd-kernel-common/blob/sprdb2g_gonk4.0/drivers/hwmon/w83l785ts.c
如果需要,我将发布整个内核驱动程序,以供参考,我使用的是kernel 3.0.8,这是一个自定义主板,使用对相同内核的板级更改。
https://stackoverflow.com/questions/44384154
复制相似问题