字符设备驱动程序加载

发布于 2022-09-23 12:18:10 字数 986 浏览 14 评论 0

最近写了一个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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

一身仙ぐ女味 2022-09-30 12:18:10

1)是不是有什么模块版本的宏打开了?
2)是不是在模块初始化的时候调用了mknod?

怼怹恏 2022-09-30 12:18:10

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

浮生面具三千个 2022-09-30 12:18:10

原帖由 qks5201314 于 2008-11-29 09:24 发表
最近写了一个I2C设备的驱动程序,编译成功后下载到开发板上测试,用insmod直接加载提示如下信息:
insmod pcf8574a0.ko
pcf8574a0: no version for "struct_module" found: kernel tainted.
address = 0x38
...

兄弟,你这个编译版本和运行加载的内核版本是不是不一致啊?

最好是你 2022-09-30 12:18:10

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

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

九命猫 2022-09-30 12:18:10

你这个问题很有可能就是跨版本造成的,所以,我建议还是在相同版本下编译和加载。

喜你已久 2022-09-30 12:18:10

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

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

唐婉 2022-09-30 12:18:10

我觉得比较简单的是写个启动脚本,创建就是了,呵呵

表情可笑 2022-09-30 12:18:10

原帖由 qks5201314 于 2008-12-1 07:37 发表

另外我迫切的想确认下的是把驱动源码放在 ...

这个问题你可以用sysfs解决,在驱动中添加几行代码就可以实现了,实际就是让模块加载时,发送uevent给udevd,后者会自动mknod
可以参看《essential linux device driver》chapter 4

[ 本帖最后由 jakepain 于 2008-12-1 09:23 编辑 ]

温柔嚣张 2022-09-30 12:18:10

原帖由 jakepain 于 2008-12-1 09:13 发表

这个问题你可以用sysfs解决,在驱动中添加几行代码就可以实现了,实际就是让模块加载时,发送uevent给udevd,后者会自动mknod
可以参看《essential linux device driver》chapter 4

还没来得及学到这一块,受教了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文