编写linux设备驱动的注意事项之一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写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

以上是关于编写linux设备驱动的注意事项之一的主要内容,如果未能解决你的问题,请参考以下文章

各个平台camera驱动编写注意事项

学习Linux的注意事项

Linux系统编写定时任务流程规范及注意事项

FPGA nios软核编写液晶屏LCD12864驱动程序源码以及注意事项,本人亲自踩坑,重要!!!

fseek char linux 设备

windows编写shell注意事项