当前位置: 技术问答>linux和unix
linux下i2c驱动加载出错:PM: Adding info for No Bus
来源: 互联网 发布时间:2017-03-26
本文导语: linux下编译i2c驱动成功,在insmod加载驱动的时候出现错误 “PM: Adding info for No Bus”,, 于是我加上: static struct i2c_board_info __initdata Global_i2c_board_info[] = { { I2C_BOARD_INFO("Global_i2c_name", 0x55), }, ...
linux下编译i2c驱动成功,在insmod加载驱动的时候出现错误 “PM: Adding info for No Bus”,,
于是我加上:
static struct i2c_board_info __initdata Global_i2c_board_info[] = {
{
I2C_BOARD_INFO("Global_i2c_name", 0x55),
}, //type && addr @addr: stored in i2c_client.addr
};
i2c_register_board_info(0, Global_i2c_board_info,ARRAY_SIZE(Global_i2c_board_info));
但在加载的时候出现:insmod: init_module 'i2c_drv.ko' failed (No such file or directory)
跟 i2c_drv: Unknown symbol i2c_register_board_info (err 0)
其原因是因为内核没有导出这个函数(symbol i2c_register_board_info)给模块使用,,我想问一下,,解决以上问题是不是要修改内核代码,,在“symbol i2c_register_board_info”的定义后面加上“export_symble”把它导出,,,因为我是在公司的平台上写的驱动,,所以修改不了代码,,验证不了这个问题,,希望大家指导一下。。。。。。
于是我加上:
static struct i2c_board_info __initdata Global_i2c_board_info[] = {
{
I2C_BOARD_INFO("Global_i2c_name", 0x55),
}, //type && addr @addr: stored in i2c_client.addr
};
i2c_register_board_info(0, Global_i2c_board_info,ARRAY_SIZE(Global_i2c_board_info));
但在加载的时候出现:insmod: init_module 'i2c_drv.ko' failed (No such file or directory)
跟 i2c_drv: Unknown symbol i2c_register_board_info (err 0)
其原因是因为内核没有导出这个函数(symbol i2c_register_board_info)给模块使用,,我想问一下,,解决以上问题是不是要修改内核代码,,在“symbol i2c_register_board_info”的定义后面加上“export_symble”把它导出,,,因为我是在公司的平台上写的驱动,,所以修改不了代码,,验证不了这个问题,,希望大家指导一下。。。。。。
|
不要用这种方式增加i2c设备信息。请使用i2c_new_device动态的增加。
static struct i2c_board_info ft520x_info =
{
.type = TS_DEVICE_ID,
.addr = FT520X_CLIENT_ADDR,
};
static int __init ft520x_driver_init(void)
{
struct i2c_client *client;
struct i2c_adapter *adapter;
int ret;
adapter = i2c_get_adapter(0); //0是总线号
client = i2c_new_device(adapter, &ft520x_info);
i2c_put_adapter(adapter);
static struct i2c_board_info ft520x_info =
{
.type = TS_DEVICE_ID,
.addr = FT520X_CLIENT_ADDR,
};
static int __init ft520x_driver_init(void)
{
struct i2c_client *client;
struct i2c_adapter *adapter;
int ret;
adapter = i2c_get_adapter(0); //0是总线号
client = i2c_new_device(adapter, &ft520x_info);
i2c_put_adapter(adapter);