关于HMC5883L驱动书写及调试的总结

本文作者分享了编写和调试HMC5883L传感器驱动的过程,强调了实践的重要性。内容涉及I2C驱动注册、Mutex互斥锁的初始化与使用、中断处理、工作队列的调度以及completion同步机制。此外,作者提醒注意中断上下文不应使用mutex,并提供了代码仓库链接供参考。
摘要由CSDN通过智能技术生成

刚刚结束对传感器HMC5883L的驱动书写及调试工作,虽然之前对相关的各种知识点都有接触,但是在真正从头书写驱动的时候还是遇到了很多不大不小的麻烦,在这里自行总结一下,也是作为以后驱动书写的一个经验教训,更是对以往所学内核驱动相关知识的复习和总结。事实证明,看了多少书,也不如亲自动手实践学的快,记得牢。

关于I2C

因为手头有几个传感器,都需要用到I2C接口,所以在之前就将I2C子系统复习并深入研究了一番。以下我所提到的或贴出的部分代码也许不适合真正的板级驱动,因为是以模块化形式做测试的。
  • 在此模块化驱动中,不仅要注册驱动(i2c_driver),同时也要对设备信息进行注册(i2c_client),我认为在这里不分前后顺序(就像“先有鸡还是先有蛋”的问题一样没有意义)。在前边分析i2c子系统的时候提到过,对于在i2c适配器注册后再添加的新的设备不能再用i2c_register_board_info了,这会导致设备完全不能被激活,而需要用的是i2c_new_device才能将设备动态的注册到系统中
  • 在使用i2c_new_device时候不仅需要设备的i2c_board_info结构体,还需要其所依附的I2C适配器总线号。首先,关于总线号,可以通过i2cdetect命令进行查看:
  root@arm:/home/debian# i2cdetect -l
  i2c-0    i2c           OMAP I2C adapter                    I2C adapter
  i2c-1    i2c           OMAP I2C adapter                    I2C adapter
然后,在代码中可以这样使用:
  struct i2c_adapter *adap;
  int adap_nr = 1; // 总线号为1


  adap = i2c_get_adapter(adap_nr);

这样就获取了指定总线号的i2c_adapter指针,之后就可以利用这个指针给i2c_new_device用了。最后需要注意,在注册完设备信息后,要使用i2c_put_adapter(adap)将指针释放掉。
<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值