i2c驱动调试技巧(1)

         新式的驱动倾向于向传统的linux下设备驱动看齐,采用静态定义的方式来注册设备。如将 i2c 设备信息写到平台的板级文件中,这一点体现了驱动与设备分离的思想,分而治之,很和谐。以前的i2c设备驱动,设备部分喜欢驱动运行的时候动态创建,这样也有其好处,在调试设备驱动时,把驱动编译成模块时,编译出来的 ko 就不依赖于板级文件里的定义,这样在修改设备信息 ( 如调试 i2c 从设备地址 ) ,就要整体编译和烧写内核镜像,调试起来就不方便。

下面举例,如何在驱动里添加设备信息:

1. 设备信息已写在板级文件里

static int __init mmc328x_init(void)

{

pr_info("mmc328x driver: init\n");

return i2c_add_driver(&mmc328x_driver);

}

static void __exit mmc328x_exit(void)

{

pr_info("mmc328x driver: exit\n");

i2c_del_driver(&mmc328x_driver);

}

2. 设备信息写在驱动文件里

//将放在板级文件里的设备信息,拷贝到驱动里来

static struct i2c_board_info mmc328x_info =  { 

I2C_BOARD_INFO("mmc328x", 0x33),

.platform_data = NULL,

.irq = IRQ_EXTINT(23), //GPIO_A6

};

static int __init mmc328x_init(void)

{

pr_info("mmc328x driver: init\n");

struct i2c_adapter* i2c_adp = NULL;//定义适配结构指针

i2c_adp= i2c_get_adapter(1);      //获得i2c总线1的适配器

if( i2c_adp==NULL ){

         printk("Can't get i2c adapter");

     }else{       //添加i2c设备信息

     i2c_new_device(i2c_adp, &mmc328x_info);

}

return i2c_add_driver(&mmc328x_driver);

}

static void __exit mmc328x_exit(void)

{

pr_info("mmc328x driver: exit\n");

i2c_del_driver(&mmc328x_driver);

i2c_unregister_device(this_client);  //驱动模块卸载时,删除设备信息

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值