当你要写一个陌生的linux子系统的驱动时,例如v4l2的camera sensor驱动。首先你得去google、百度搜索一些关于这个子系统****框架的介绍,由于网上文章往往有错误,所以你要多看几篇好的文章,从而有一定了解。然后需要看linux相关的子系统的代码,特别是子系统的api,从而更深入的了解。然后你找一个使用该子系统的应用层和驱动代码例子,进一步理解。然后你基于已有的demo硬件和该子系统设备的驱动,例如camera sensor驱动ov5640_mipi.c的代码,然后基于此代码和硬件做实验,看看如果把某些函数实现注释掉是否对设备显示的基本功能是否有影响,从而知道哪些功能实现是必须的,哪些是扩展的。然后你实现你的设备驱动时,首先搭个框架,把基本功能先实现,配合能用的应用层程序看效果。(即先用好的demo硬件和驱动验证应用程序没有问题,并通过裁剪和尝试,验证驱动的哪些实现api、ioctl等是必须的,再实现你的新硬件的驱动的框架)。当基本功能实现后,增强了你对子系统的工作机理的理解后,你再考虑增加扩展功能,和后面的优化。一定要多做各种可能情况的试验,参考已有驱动和应用层的代码,这样你会更理解该子系统的工作机理。
并且一般用到对比法:即工作正常的和不工作的进行各种情况对比,从而找到原因。当然其中还要利用示波器对比硬件的信号波形、电源等,排除硬件问题。
关于具体的写linux驱动的方法、技巧和注意事项,欢迎观看我的《如何编写linux设备驱动》的视频:
https://edu.51cto.com/course/17132.html
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
另外我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。