在学习Linux驱动开发详解。加载 globalmem 虚拟驱动的时候出错。
当执行命令 #insmod globalmem.ko
时,出现:insmod: error inserting 'globalmem.ko': -1 Device or resource busy
这里存在的问题是:
globalmem的源码分配的 设备号和驱动原有的设备号有冲突。
解决办法为:将源码的
#define GLOBALMEM_MAJOR 250改为:
#define GLOBALMEM_MAJOR 255
这里你可以试一下 251、252、253、等。 这是笨办法,目前我就用这招。等我找到更好的办法时我一定告诉大家。
当然你也可以通过使用命令
cat /proc/devices
来查看已经被占用的设备号,从而另外给你分配设备号。
这里使用的都是静态的设备号,当然你也可以使用动态设备号,但要修改的代码比较多,所以有点麻烦。
呵呵,刚刚才发现,如果你需要分配动态的设备号的时候其实更简单
在globalmem_init()函数初始化设备函数的时候不知道你注意到这几个语句没:
if(globalmem_major) /*如果设备分配的设备号>=1,就表明你会使用静态的设备号分配方法*/
result =register_chrdev_region(devno,1,"globalmem");
else{ result = alloc_chrdev_region(&devno, 0,1, "globalmem"); /*否则使用系统动态分配设备号*/
globalmem_major = MAJOR(devno);
}
而这里面的register_chrdev_region() 就是分配静态设备号的函数,
而 alloc_chrdev_region() 则是系统自动分配一个没有被占用的动态设备号。
所以如果你需要分配一个动态的设备号的话,你需要将globalmem.c函数里的
#define GLOBALMEM_MAJOR 250改为:
#define GLOBALMEM_MAJOR 0
不过在后面测试的时候你就需要使用
cat /proc/devices 来查看你的动态设备号的分配号了。
还有一个问题在上一次我刚搭建好的Ubuntu驱动开发环境时:
我加载驱动用insmod 没有问题:
但在我卸载内核的时候,也就是用rmmod 时候显示Device or resource busy
当时网上还有很多这样的问题,但我但是就没管,反正一重启就没有了。
但今天,也就是刚刚我卸载内核的时候却没有发现有报错。真是一个奇怪的现象。
我才,既有可能是我在编译内核树的时候破环了那么组建。但最后经过多次系统的使用和启动时,内核自己检测到这个错误并进行了修改。 个人看法。呵呵!
分享到:
相关推荐
基于Ubuntu16.04 的globalmem驱动测试 。包含驱动文件,makefile,直接可用。 见博客http://blog.csdn.net/qq_33728573/article/details/78802386
linux驱动程序设计的字符设备驱动一章中的例子的源代码
linux设备驱动学习之-----字符驱动
globalmme驱动模块源代码,包括Makefile 在Ubuntu10上成功运行
Linux设备驱动开发详解-第6章字符设备驱动(二)-支持2个globalmem[归纳].pdf
Linux设备驱动程序学习(3)-并发和竞态 - Linux设备驱动程序
详细介绍如何写驱动程序 的过程以及相关的步骤,方法,使你更容易入门嵌入式开发
一个简单的字符设备globalmem的驱动程序
globalmem的c文件(针对博客东西)
增加并发控制后的globalmem程序
Linux驱动_globalmem实验[参照].pdf
1.驱动中的异步通知当按键按下,内存中有数据等关键事件发生时,可以发送SIGIO信号,应用层需注册该信号的回调函数,当这些关键事件发生时,信号回调函数运行,做后
ubuntu12.04下的globalmem的makefile(针对博客东西)
Linux设备驱动开发详解-第6章字符设备驱动(一)-globalmem[参照].pdf
linux虚拟字符设备驱动程序 globalmem虚拟字符设备 不依赖硬件
这个文档是我的期末作业,里面有详细的设计说明和完整的代码!包括运行的操作步骤,对于想熟悉字符设备驱动的同学有很大帮助!
本电子稿是我买书时附送的全部电子稿,非常详细,示例代码方便学习。 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- ...
含并发控制的globalmem驱动,Linux设备驱动开发
买书时赠送的电子稿,代码示例丰富,非常不错!全书分三个文件打包。 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- ...
互斥体globalmem的实现,上个mutex而已,功能有read,write,ioctl,open,llseek这几个,其他的没写完,自己看着加吧,没钱直接去我gitee找源码。