免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: qks5201314
打印 上一主题 下一主题

字符设备驱动程序加载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-29 09:24 |显示全部楼层 |倒序浏览
最近写了一个I2C设备的驱动程序,编译成功后下载到开发板上测试,用insmod直接加载提示如下信息:
insmod pcf8574a0.ko
pcf8574a0: no version for "struct_module" found: kernel tainted.
address = 0x38
READ IO STAT :0xBF
然后用lsmod查看发现已经加载成功了,提示如下信息:
Module                  Size  Used by
pcf8574a0               6500  0
现在有两个地方存在疑问:
一是之前这个驱动程序在加载的时候不会提示“pcf8574a0: no version for "struct_module" found: kernel tainted.”,为什么现在
重新编译后加载就有这个提示了呢,此驱动以前和现在都是独立编译加载的;
二用insmod加载完驱动后是否必须用mknod或者MKDEV来创建对应的设备节点文件,否则就不会自动产生对应的节点文件呢?此疑问是
因为我之前模仿开发包里面的一个驱动程序写过一个驱动,用开发包里的驱动程序直接进行insmod加载就会在/dev/目录产生驱动程序中
指定的节点文件名的文件,但是我在上面改的驱动程序执行同样的操作后却没有在/dev/目录产生对应的节点文件;

请朋友帮忙看下,thanks in advance

论坛徽章:
0
2 [报告]
发表于 2008-11-29 17:00 |显示全部楼层

回复 #2 emmoblin 的帖子

一、好像没有定义的,因为之前同样的驱动加载的时候没有提示这个版本提示的,现在只是重新编译了一下而已;
二、我后来确认了一下,开发包里面的驱动是在内核编译的时候连编的,我怀疑跟这个有关系,但是有一点可以确认,
      不是在这个驱动源码中调用MKNOD的;现在觉得奇怪的地方是开发包自带的驱动被用insmod动态加载后会自动
       产生一个设备文件,为什么我在上面改的驱动这样操作就不可以呢?

论坛徽章:
0
3 [报告]
发表于 2008-11-30 07:55 |显示全部楼层

回复 #4 dreamice 的帖子

我编译用的主机内核版本与调试的目标开发板的内核版本是不一样的,这个可以确认,但是现在的问题是同一个驱动程序
源码只是重新编译了一下而已,以前编译的没有这个提示的,现在不知道为啥就有了?

另外我迫切的想确认下的是把驱动源码放在开发环境的驱动目录下与内核一起编译,之后产生的驱动放在开发板上加载,怎么样就可以在用insmod加载的时候就能同时在/dev 目录下创建相应的设备节点文件,我之前写的驱动都是在自己的用户目录下独立编译的,然后放到开发板中进行调试,每次必须在insmod后使用mknod来创建设备节点文件,这样觉得挺麻烦的;

论坛徽章:
0
4 [报告]
发表于 2008-12-01 07:37 |显示全部楼层

回复 #6 dreamice 的帖子

老哥,现在虽然有这个提示pcf8574a0: no version for "struct_module" found: kernel tainted.
但是并没有影响我的使用的,现在知道了这个提示是因为什么造成的了;

另外我迫切的想确认下的是把驱动源码放在开发环境的驱动目录下与内核一起编译,之后产生的驱动放在开发板上加载,怎么样就可以在用insmod加载的时候就能同时在/dev 目录下创建相应的设备节点文件,我之前写的驱动都是在自己的用户目录下独立编译的,然后放到开发板中进行调试,每次必须在insmod后使用mknod来创建设备节点文件,这样觉得挺麻烦的;

论坛徽章:
0
5 [报告]
发表于 2008-12-01 10:22 |显示全部楼层

回复 #8 dreamice 的帖子

我之前是也是自己做一个驱动加载脚本,insmod后再执行mknod来创建设备节点文件的,但是看到开发包中的可以直接
insmod就产生节点文件,想知道它的实现原理而已; :)

论坛徽章:
0
6 [报告]
发表于 2008-12-01 10:23 |显示全部楼层

回复 #9 jakepain 的帖子

先学习下了,3Q

论坛徽章:
0
7 [报告]
发表于 2008-12-01 17:30 |显示全部楼层
感谢朋友们帮忙,看了“Essential.Linux.Device.Drivers”后,把我原来的驱动注册函数改为misc_register,这样编译后的驱动直接用
insmod加载成功后,就会自动在/dev目录下生成对应的设备节点文件;

best regards to all

论坛徽章:
0
8 [报告]
发表于 2008-12-02 09:29 |显示全部楼层

回复 #17 dreamice 的帖子

呵呵,3Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP