我有一個需求來創建一個Linux內核驅動程序,通過接口板通過I2C接口與一堆MCU。因爲它們的數量會很多,即大約1-18個,我們正在使用恩智浦/ TI I2C多路複用器。Linux I2C內核驅動程序
我已導入恩智浦/ TI I2C多路複用器內核驅動程序,並將它們合併到DTS文件中。我已成功地將所有I2C多路複用器列爲不同的i2c-x節點。
MCU的全部使用相同的地址0x08。我創建了一個內核驅動程序,它爲它創建了一個接口。 但是,驅動程序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
如果需要,會後整個內核驅動程序,以供參考現在用的是3.0.8內核,定製電路板使用的板級改動同上述內核。
儘量少古代內核第一。 – 0andriy