关于如何编译一个测试型的字符驱动程序,网上一搜还是很多的在此给出一个不错的教程http://blog.chinaunix.net/uid-11829250-id-337300.html
我主要是在搜索ioctl的时候才有自己编写一个字符驱动的想法,因为刚工作的时候就看到有同事在用ioctl,当时在网上搜了下ioctl也没怎么明白。现在才发现原来ioctl就是对应的设备驱动程序里的ioctl函数。好了,废话就不多说了。写这篇文档的主要意义在于给后来编写驱动程序的新手们提示几个可能会遇到的问题,希望能对大家有所帮助,前车之鉴后车之师吧。
问题1:按照上面的教程码完了,编译提示头文件都找不到,什么鬼!
解答:
刚开始还以为是头文件包含路径不对,于是修改成绝对路径貌似还是没有解决。
查看gcc/g++默认include路径的方法为:`gcc -print-prog-name=cc1plus` -v
后来发现原来编译驱动程序最好参考其他驱动模块的Makefile文件,复制过来修改一下即可解决此问题。
问题2:按照1的解答修改好了,不过执行make的时候提示错误,错误原因是没有生成makefile的规则
解答:
刚开始以为必须在linux源代码里的drivers文件夹下编写,心想这也太不人性化了吧,后来才发现原来驱动程序对应的makefile文件名字必须是"Makefile",修改下名字即可编译通过了。
最后想强调一下教程作者说的最后一段关于makefile的描述:自己编写的Makefile被调用两次,第一次调用的时候走的是else分支,找到linux/目录下的Makefile文件并执行modules规则,在此过程中会生成.o文件。由于指定了M选项所以中途会返回M所指定的路径查找并执行Makefile中的if分支。即两次进入自己编写的Makefile文件。