linux驱动probe函数的实现框架思考

.probe函数实现无非就是
1)创建一个私有的driver_data用于区分不同的device,因为一个driver可以管理多个device,
2)parse device tree,并根据配置申请资源、io resource、memory;
3)初始化设备
4)注册对应的子系统暴露对应的接口,子系统相关的底层函数需要你实现,实现/dev/设备的file_operation、sysfs、proc接口。;
5)dev_set_drvdata 绑定私有结构和设备的关系
6)最后注册irq(由于irq注册后,硬件的中断随时发生(一旦注册并enable,那么就随时都可能发生,硬件随时变化,所以随时发生),所以必须在注册irq之前保证irq处理函数所使用的资源已经准备好,所以一般irq会在.probe函数的最后激活。)。

其他功能的实现,你需要思考的架构就是对资源的管理(包括内存和io,包括对上层提供的接口导致上层调用时对资源的访问),和硬件datasheet的阅读(从而知道如何控制硬件,实现目标)。另外是让上层调用read/writ直接访问到硬件;还是驱动通过workqueue polling方式访问硬件,并保存到内存中,上层read/write时从内存取值;还是中断发生时,再访问硬件或者启tasklet、workqueue访问硬件,然后保存到内存中,应用read/write时再从内存中取值。 即在什么context下访问硬件。

关于具体的写linux驱动的方法、技巧和注意事项,欢迎观看我的《如何编写linux设备驱动》的视频:
https://edu.51cto.com/course/17132.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

另外我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

我的新的更多优惠的打包课程链接如下:
https://edu.51cto.com/sd/0a9d4