- 论坛徽章:
- 0
|
问题1:你期望的是在什么情况下会调用eeprom_detect?程序的执行调度很大程度上取决于你编写的代码,而即使是内核的调度点,你也可以控制的;
模块一加载, 根据eeprom.c,它的流程应该是,
eeprom_init->i2c_add_driver->eeprom_attach_adapter->i2c_probe->eeprom_detect.
但是我这里不知道为什么不会调用eeprom_detect。
如果我加入多个地址,那么就会调用eeprom_detect。如:
static unsigned short normal_i2c[] = { 0x50, 0x51, 0x52, 0x53, 0x54,
0x55, 0x56, 0x57, I2C_CLIENT_END };
问题2:不需要编译内核,编译模块再加载就ok了。这个是静态的信息,所以,怎么写在于你程序中赋予它什么样的功能和作用。
由于在arch/arm/mach-s3c2410/mach-smdk2410.c增加了代码(如下),那么应该要重新一次编译内核。
static struct i2c_board_info __initdata i2c_devices[] =
{
{
I2C_BOARD_INFO("rtc-s35390a", 0x30),
.platform_data = &s35390a,
},
{
I2C_BOARD_INFO("eeprom",0x50),
},
};
如果不需要重新编译内核,除非上面代码不用添加进去。如果这样,那么i2c_probe(adapter, &addr_data, eeprom_detect)又如何找到设备呢?我想版主意思是编译eeprom.ko不需要重新编译内核,是不?
还有另外一个问题:
要增加i2c 和spi设备,必须在系统启动前就加入设备信息吗?
如spi要在arch/mach-**/mach-**.c 加入spi_board_info 然后就调用spi_register_board_info
如i2c要在arch/mach-**/mach-**.c 加入i2c_board_info 然后就调用i2c_register_board_info
如果这样,那么增加一个i2c/spi设备,就需要重新编译更新一起内核,是这样的吗? |
|