主题 : 求助:关于insmod AD驱动时出现的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4737
精华: 0
发帖: 29
金钱: 290 两
威望: 260 点
综合积分: 58 分
注册时间: 2009-03-27
最后登录: 2009-12-08
楼主  发表于: 2009-04-17 11:21

 求助:关于insmod AD驱动时出现的问题

我自己写了一个AD驱动,编译后生成adc_dev.ko,但是insmod时候出现如下问题:
[root@FriendlyARM /]# insmod adc_dev.ko
adc_dev: Unknown symbol devfs_mk_cdev
insmod: cannot insert 'adc_dev.ko': unknown symbol in module or invalid parameter

可是我写了一个与硬件无关的hello模块时执行insmod就没有问题,可以被加载。
级别: 侠客
UID: 3278
精华: 0
发帖: 61
金钱: 600 两
威望: 576 点
综合积分: 122 分
注册时间: 2009-01-03
最后登录: 2011-03-07
1楼  发表于: 2009-04-17 12:52
我写了个usb device的驱动,之前insmod是没问题,后来分配了一个缓存区域之后也出现类似问题
顶一下
级别: 侠客
UID: 944
精华: 3
发帖: 71
金钱: 22760 两
威望: 4838 点
综合积分: 202 分
注册时间: 2008-06-27
最后登录: 2017-07-16
2楼  发表于: 2009-04-17 13:00
在kernel里搜下哪个地方定义了devfs_mk_cdev(看样子是在devfs里面),把这个编译进kernel
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-04-17 13:30
不要尝试在2.6.2x的内核上用devfs,也不要在内核模块里调用相关的接口,那已经被抛弃很久了.
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 4737
精华: 0
发帖: 29
金钱: 290 两
威望: 260 点
综合积分: 58 分
注册时间: 2009-03-27
最后登录: 2009-12-08
4楼  发表于: 2009-04-17 13:32
那怎么解决呢?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2009-04-17 13:52
没有了devfs,还有busybox的mdev,PC Linux上的udev,实在不行还可以手动自己用mknod创建设备节点
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 3241
精华: 0
发帖: 57
金钱: 435 两
威望: 327 点
综合积分: 114 分
注册时间: 2009-01-01
最后登录: 2017-05-18
6楼  发表于: 2009-04-18 21:44
我也想知道怎么回事!---我看过这样一段描述:
首先,我们必须提供一个.ko的驱动模块文件。我们要使用这个驱动程序,首先要加载它,我们可以用insmod xxx.ko,这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如鼠标就是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,这个主设备号就是系统对它的唯一标识。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件。在我们要访问此硬件时,就可以对设备文件通过open、read、write、close等命令进行。而驱动就会接收到相应的read、write操作而根据自己的模块中的相应函数进行操作了。


现在问题是insmod没成功啊!那怎么mknod呢?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
7楼  发表于: 2009-04-19 01:07
这个贴子里insmod没成功是因为模块中调用了内核中不存在的devfs接口,移除那部分代码就可以加载模块了.如果系统中没有udev这样自动mknod的工具,你需要手动创建设备节点文件.
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."