新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
当然写驱动,你得清楚上层调用是否导致存在函数重入、
什么执行context下(1. 中断、2. 软中断、3. tasklet(软中断的一种)、 4. timer(基于软中断实现)、5. hrtimer (软中断或硬中断环境下执行) 、6. workqueue(也是kernel thread)、7. kernel thread、8. 普通thread的内核态下)会访问此函数和此资源,需要什么样的“同步机制”保护。
创新互联是专业的路北网站建设公司,路北接单;提供成都网站设计、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行路北网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
你利用子系统(例如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