MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > linux / 正文

Linux驱动开发笔记(更新中)

2024-11-26 15:13 huorong linux 4 ℃ 0 评论

我的第一个字符设备

最近项目的需要,急忙从单片机转到Linux开发,虽然之前一直有看Linux相关的开发视频,但是也只是止于理论层面的东西,没有真正用板子来敲代码验证程序。所以现在一开始会遇到很多的问题,为了有迹可循以及有借鉴的意义,想着把遇到的问题整理出来,于己于人皆有利,不忘白折腾一番。

网上有蛮多的教程,但是我觉得那只是一个思路,因为真正的困难在于你去做的时候面临的未知。我的分享不会从头到尾讲一遍理论的知识,而是我在调试的过程中遇到的问题罗列出来,以及是怎么去解决的,这样对于遇到同类型问题的朋友更有帮助,更能够节省不必要的时间。

首先是字符设备驱动,因为项目中有用到io口的电平控制以及检测,需要做,所以先从这里入手。果不其然,问题一开始就上来了,因为是跟着别人的教程去做的,以前没有注意,一上来就是把内核的代码复制过来,然后一直编译出错,显示找不到头文件,一直右键都跳转不过去,这里咨询了两个人,都是做Linux的,一个做的是应用层,另一个是做驱动开发的。

当我咨询做应用层的老师傅的时候,他说你看一下其他没有错误的,文件在哪个位置,然后其他没有的文件在其他地方找复制过来,朋友们,面对五十多岁的老师傅,我竟然相信了,最后发现旧的问题没有解决,反倒来了新的问题,每一个文件都包含了很多头文件,显然不是这样去解决的。

再去问另一个做驱动的工程师,他问,Makefile文件有了没有,你参考一下其他例程是怎么做的。果不其然,Makefile文件里面包含了内核文件。回头想一想也是,既然是搞驱动,那就是会接触到内核,这下把makefile文件完善后,问题就解决了。这位师傅说没有makefile文件怎么能够生成.ko文件呢?对于我一个小白来说,因为是在别人的程序基础上添加驱动,以为只要添加驱动应用上去就行了。大错特错,别人是应用程序的makefile文件,而我要做的是驱动,不是一个东西。

在这里还犯了一个错误就是,在原来的工程文件夹,makefile加上驱动,这样编译不仅出错还找不着方向,有咨询了才发现,需要另外单独建立一个文件夹,所有的文件都放里面。这样才行。如下两图,后面才是正确的。

驱动和应用程序都写好了,但是接下来还面临一个问题,就是设备打开不了,这是什么原因。明明驱动已经挂在上去了,但是打不开,百思不得其解,查看程序,查看驱动代码,无果。

经过一番的排查,大意啊。且看下面两张图的区别在哪里。就是因为少了一个斜杠,所以文件打不开,识别不了。至此第一个字符设备驱动完成了。

Tags:linux设备驱动开发

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言