写驱动时,有关删除模块的问题
今天我在实验驱动程序,奇怪的是,当我卸载驱动时,出现下面的提示,,怎么会多出第二行信息呢?不解:# lsmod
button 2664 0 - Live 0xbf000000 (P)
# rmmod button
Button delete successfully! //我自己打印的信息
rmmod: module 'button' not found //这是怎么回事呢?
# lsmod
# insmod button.ko
insmod: cannot insert 'button.ko': Device or resource busy //??
之后用lsmod 显示已经删除,可是再次添加模块的时候,出错了,添加不了:(
在此求高手解答:) 先找个自带的LKM模块试试LSMOD, INSMOD, RMMOD. 如果没问题,就看你自己的DEVICE DRIVER的代码,特别是启动和卸载的地方 你把代码贴出来嘛 一起分析分析 本帖最后由 colorshape 于 2011-03-31 23:27 编辑
好的,把代码主要部分贴出来,没有贴出来的就是些头文件包含,多谢指教:)#define BUTTONDEVNAME "button"
#define BUTTONDEVNR 255
struct button_struc {
int irq;
int pin;
int pin_setting;
char *name;
};
static int button_major = BUTTONDEVNR;
struct cdev button_dev;
static int keypressed = 0;
static char *str = "param dev_id in request_irq()";
static struct button_strucbutton_info = {
.irq = IRQ_EINT8,
.pin = S3C2410_GPG0,
.pin_setting = S3C2410_GPG0_EINT8,
.name = "KEY0",
};
static volatile char keyval;
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static irqreturn_t button_isr(int irq,void *dev_id)
{
struct button_struc *button_info_l = (struct button_struc *)dev_id;
keyval = (!s3c2410_gpio_getpin(button_info_l->pin))+'0';
keypressed = 1;
wake_up_interruptible(&button_waitq);
return IRQ_RETVAL(IRQ_HANDLED);
}
static int button_open(struct inode *inode,struct file *file)
{
int err;
err = request_irq(button_info.irq,button_isr,IRQ_TYPE_EDGE_BOTH,button_info.name,(void *)&button_info);
if(err) {
disable_irq(button_info.irq);
free_irq(button_info.irq,(void *)&button_info);
}
keypressed = 0;
return 0;
}
static int button_close(struct inode *inode,struct file *filp)
{
free_irq(button_info.irq,(void *)&button_info);
return 0;
}
static int button_read(struct file *filp,char __user *buf,size_t cnt,loff_t *offp)
{
unsigned long err;
if(!keypressed){
if(filp -> f_flags & O_NONBLOCK)
return -EAGAIN;
else
wait_event_interruptible(button_waitq,keypressed);
}
keypressed = 0;
err = copy_to_user(buf,str,min(strlen(str),cnt));
return err?(-EFAULT):min(strlen(str),cnt);
}
struct file_operations button_fops = {
.owner = THIS_MODULE,
.open= button_open,
.read= button_read,
.release = button_close,
};
static int __init button_init(void)
{
dev_t devnr = MKDEV(BUTTONDEVNR,0);
int err,retval;
if(button_major){
retval = register_chrdev_region(devnr,1,BUTTONDEVNAME);
} else {
retval = alloc_chrdev_region(&devnr,0,1,BUTTONDEVNAME);
}
if(retval) {
return retval;
}
cdev_init(&button_dev,&button_fops);
button_dev.owner = THIS_MODULE;
err = cdev_add(&button_dev,devnr,1);
if(err) {
printk("Errorwhen adding device BUTTON.\n");
}
printk("Device "BUTTONDEVNAME" initialized!\n");
return 0;
}
static void __exit button_exit(void)
{
cdev_del(&button_dev);
printk("Button delete successfully!\n");
}
module_init(button_init);
module_exit(button_exit); unregister_chrdev_region unregister_chrdev_region
EZWORD 发表于 2011-04-01 09:02 http://bbs.chinaunix.net/images/common/back.gif
愰然大悟,刚开始写驱动,概念还不够深,谢谢指点:)
现在卸载后,能再次注册,奇怪的是,为什么卸载时总是会提示rmmod: module 'button' not found后来试了下其他模块,也有这样的提示:# lsmod
button 2836 0 - Live 0xbf012000 (P)
[# rmmod button
Button delete successfully!
rmmod: module 'button' not found
# lsmod
# insmod button.ko
Device button initialized!
# ls
app_button led_self sys
bin lib syscall
button.ko linuxrc test
dev mini2440_leds_self.kotmp
etc mnt usr
hello_arm proc var
led sbin zorroz_led
# insmod mini2440_leds_self.ko
-------------------zorroz-------------insmod: cannot insert 'mini2440_leds_self.ko': Device or resource busy
# lsmod
button 2836 0 - Live 0xbf018000 (P)
# rmmod button
Button delete successfully!
rmmod: module 'button' not found
# lsmod
# insmod mini2440_leds_self.ko
-------------------zorroz-------------zled initialized# lsmod
mini2440_leds_self 1716 0 - Live 0xbf024000 (P)
# rmmod mini2440_leds_self
rmmod: module 'mini2440_leds_self' not found
# lsmod
# 后来,我又试了一下应用程序模块,也是同样# ls
app_button led_self syscall
bin lib test
button.ko linuxrc tmp
dev mini2440_leds_self.kousr
etc mnt var
hello.ko proc zorroz_led
hello_arm sbin
led sys
# insmod hello.ko
Hello World!
# lsmod
hello 1068 0 - Live 0xbf030000
# rmmod hello
hello exit
rmmod: module 'hello' not found
# 这是正常现象吗?求解:):dizzy: 我的不会这样啊是不是你的busybox的rmmod有问题呢 我的不会这样啊是不是你的busybox的rmmod有问题呢
amarant 发表于 2011-04-02 11:17 http://bbs.chinaunix.net/images/common/back.gif
在网上搜了一下这个问题,很可能是因为BUSYBOX。
页:
[1]