这两天在倒腾ARM的内核驱动编程,遇到了一些问题,比较头疼,不过已经解决,认为有意义也就记录一下。
由于ARM内核驱动的编写和环境的配置关系很紧密,所以先做以下声明,不同的配置可能适用,也可能不适用,仅供参考。
ARM内核版本:2.6.24.4
PC操作系统: Ubuntu Desktop10.04
ARM-LINUX-GCC版本:3.4.1
遇到问题主要有两点:
一、make menucofig出错
二、Makefile的时候报错implicit declaration of function
解决方法:
对于make menucofig
提示的错误如下:
ERROR: make[1]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make: *** [menuconfig] 错误 2
安装ncurses-devel,这个是红帽或者FC的安装程序,Ubuntu的需要安装libncurses5-dev
安装指令如下: sudo apt-get install libncurses5-dev
//网上有好多一样的指令,就是运行不了,很大的原因是拼写错了,libncurses5写成了 libncurses 很无解
***********************************************
对于 implicit declaration of function ‘set_irq_type’这个错误,字面上是隐式声明错误,
可能原因有:
1 没有把函数所在的c文件生成.o目标文件
2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明
后来用SourceInsight查看文件关联,发现在 linux/interrupt.h的文件里面并没有声明 ‘set_irq_type'中断请求函数,估计是版本的问题,在版本更新过程中删掉了,后来在interrupt.h
文件中补上这句的声明就Make顺利了,在ARM板上也顺利的insmod,不过还没有编写简单的C程序测试
驱动,不过问题已经不大了。Ole~~ (下图蓝色部分为添加的声明)
extern int set_irq_type(unsigned int irq,unsigned int type);