编写linux设备驱动的注意事项之一-创新互联
编写linux设备驱动的注意事项之一
当然写驱动,你得清楚上层调用是否导致存在函数重入、
什么执行context下(1. 中断、2. 软中断、3. tasklet(软中断的一种)、 4. timer(基于软中断实现)、5. hrtimer (软中断或硬中断环境下执行) 、6. workqueue(也是kernel thread)、7. kernel thread、8. 普通thread的内核态下)会访问此函数和此资源,需要什么样的“同步机制”保护。
你利用子系统(例如input子系统)的去实现驱动需要实现功能。你利用总线的api函数去访问设备硬件,例如i2c_transfer、spi_sync等
注意probe函数传入的device,是bus_type实现的,在module_init时注册了驱动到对应总线上,在.machine_init时,会通过board板级代码把此bus的设备加入到对应的总线上(无论是否需要device tree方式)。无论是谁创建的设备(bus函数或者machine_init的函数),加入bus后,match成功后,就传入到驱动的probe函数上了,所以probe函数传入的就是对应bus的device结构,例如i2c是struct i2c_client , spi总线是struct spi_device,platform虚拟总线传入的是struct platform_device *。 具体参见我的《linux device driver model_2018_02_03(必读).pptx》
像手机的touch driver比较复杂(例如cypress或者synaptics厂家),他还自己创建了一条虚拟的bus来实现动态支持不同的子function的添加。
需要考虑一个驱动如何支持多个设备,避免全局和静态变量,而采用基于xxx_priv_dev的结构体成员变量代替,一个xxx_priv_dev 对应一个device。
关于具体的写linux驱动的方法、技巧和注意事项,欢迎观看我的《如何编写linux设备驱动》的视频:
https://edu.51cto.com/course/17132.html
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
另外我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前名称:编写linux设备驱动的注意事项之一-创新互联
文章转载:http://myzitong.com/article/ddcgjh.html