驱动开发是不是必须要重新编译内核啊?
我在fc下面运行《linux设备驱动程序》里面的scull的例程
以前在我的那个2.6.24的内核的fc下面运行 是好好的 一点问题没有
后来我装了一个新的2.6.23的内核 结果就出现了下面一大堆错误
新的这个系统安装后 没有编译过内核
是不是必须要编译一边才可以啊
下面的错误是因为这个原因造成的么》?
谢谢了 哪个高手知道请指导一下
make -C /lib/modules/2.6.23.1-42.fc8/build M=/root/study/jeff/scull LDDINC=/root/study/jeff/scull/../include modules
make[1]: Entering directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
CC [M] /root/study/jeff/scull/main.o
CC [M] /root/study/jeff/scull/pipe.o
CC [M] /root/study/jeff/scull/access.o
/root/study/jeff/scull/access.c: In function ‘scull_u_open’:
/root/study/jeff/scull/access.c:106: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c:107: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c:114: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c: In function ‘scull_w_available’:
/root/study/jeff/scull/access.c:165: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c:166: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c: In function ‘scull_w_open’:
/root/study/jeff/scull/access.c:179: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
/root/study/jeff/scull/access.c:179: error: (Each undeclared identifier is reported only once
/root/study/jeff/scull/access.c:179: error: for each function it appears in.)
/root/study/jeff/scull/access.c:179: error: implicit declaration of function ‘signal_pending’
/root/study/jeff/scull/access.c:179: error: implicit declaration of function ‘schedule’
/root/study/jeff/scull/access.c:184: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c: In function ‘scull_w_release’:
/root/study/jeff/scull/access.c:205: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
/root/study/jeff/scull/access.c: In function ‘scull_c_open’:
/root/study/jeff/scull/access.c:277: error: dereferencing pointer to incomplete type
/root/study/jeff/scull/access.c:281: error: dereferencing pointer to incomplete type
make[2]: *** [/root/study/jeff/scull/access.o] Error 1
make[1]: *** [_module_/root/study/jeff/scull] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
make: *** [modules] Error 2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
重新编译也没用,你看的书就是那本LDD3吗?Linux的内核从2.6.18到2.6.19改动比较大,连中断入口的参数个数都修改了,而头文件中的定义也修改了许多,所以你要么找到对应版本去测试那些例子,要么修改代码适应新的内核。
Linux的系统调用相对比较稳定,但开发驱动直接用了内核中的函数,变来变去的实现是很麻烦。
编译内核没有必要,驱动程序与对应的内核版本这个比较重要。
谢谢你们的回复(包括三楼的)
另外再问一个问题
看书上说 开发驱动要构建内核树
是啥子意思啊?
是不是就是说编译一下内核呢?
实际上就是安装内核源代码,构建你自己的内核开发环境。
安装内核源代码
我的好像已经有内核代码了啊?
有了并不代表你配置好了,那你可以写模块并编译加载了么?
ldd3中的那个scull的例程
我把出错的access.c那个文件注释掉
可以生成scull.ko模块
但是不能insmod 提示出错
你这个错误不知道,没有详细信息,不知道该如何定位。如果编译没有问题的话,那說明内核源代码是安装好了的。