错误记录和解决办法:globalmem虚拟驱动在 insmod 时出现 busy/*嵌入式学习*/

原创 2012年03月30日 01:12:41

在学习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

当时网上还有很多这样的问题,但我但是就没管,反正一重启就没有了。

但今天,也就是刚刚我卸载内核的时候却没有发现有报错。真是一个奇怪的现象

我才,既有可能是我在编译内核树的时候破环了那么组建。但最后经过多次系统的使用和启动时,内核自己检测到这个错误并进行了修改。  个人看法。呵呵!

Linux设备驱动学习(1) 全局内存空间“设备”驱动程序globalmem

此“设备”是一个在内存中恒久的空间,在模块初始化时便已分配。 使用modinfo查看编译出来的模块信息 $modinfo ./globalmem.ko 将自定义的主设备号作为参数插入到模块中,使...

嵌入式学习中遇到的错误及其解决办法

嵌入式学习中遇到的错误及其解决办法                 (redhat版) 一:启动redhat时出现下面情况的解决办法、 (转载网上,但可行性高)      gn...

Linux字符设备驱动-globalmem驱动编译加载遇到的问题及解决办法

代码是直接复制《LINUX设备驱动开发详解》里面的(源代码见下面)。Makefile如下:obj-m := globalmem.o KERNELBUILD := /lib/modules/`uname...

嵌入式 globalmem设备驱动ioctl()函数的实现

一、ioctl的简介 在文件操作结构体file_operations中有很多的对应的设备操作函数,这些函数是通用的设备操作函数,但有些设备的操作是特有的,文件操作结构体不会有对应的函数定义。这样i...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:56
  • 558

往开发板写led驱动时出现错误:insmod: can't insert 's3c_led.ko': unknown symbol in module or invalid parameter

insmod: can't insert 's3c_led.ko': unknown symbol in module or invalid parameter

iOS编译时出现的错误和解决办法

  • 2016年02月15日 14:37
  • 81KB
  • 下载

在万网虚拟主机下创建wordpress,打开各种网页出现Internal Server Error(500错误)解决办法

在万网的虚拟主机上配置wordpress时网页打不开,出现Internal Server ErrorThe server encountered an internal error or...提示的解...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:错误记录和解决办法:globalmem虚拟驱动在 insmod 时出现 busy/*嵌入式学习*/
举报原因:
原因补充:

(最多只允许输入30个字)