zoukankan      html  css  js  c++  java
  • insmod错误:can't insert "xxx.ko": Device or resource busy

    1.问题出现

      我在尝试最简单的字符设备驱动的程序。编译好之后加载模块显示这个错误,同时还有这个错误

    # dmesg | tail -10
    [ 1676.443388] hello_init
    [ 1676.443404] register_chrdev_region fail 
    [ 1712.696222] hello_init
    [ 1712.696240] he register_chrdev_region fail 
    [ 1712.703983] hello_init
    [ 1712.703997] he register_chrdev_region fail 
    [ 4005.040674] hello_init
    [ 4005.043149] my register_chrdev_region fail 
    [ 4005.049060] hello_init
    [ 4005.051530] my register_chrdev_region fail 

    我的代码:hello.c

    #include <linux/module.h>
    #include <linux/fs.h>
    #include <linux/cdev.h>
    
    static int major=250;//主设备号(用于区分设备类)
    static int minor=0;//次设备号(用于区分哪个设备)
    
    static dev_t devno;
    static struct cdev cdev1;
    static int hello_open(struct inode *inodep,struct file *filep)
    {
        printk(KERN_ALERT "hello_open
    !");
        return 0;
    }
    
    static struct file_operations hello_ops={ 
        .open=hello_open,
    };
    
    static int hello_init(void)
    {
        int ret;
        printk(KERN_ALERT "hello_init
    ");
        devno=MKDEV(major,minor);//第一步:将主设备号、次设备号转化成dev_t类型
        ret=register_chrdev_region(devno,1,"hello");
        if(ret < 0)
        {
            printk(KERN_ERR "my register_chrdev_region fail 
    ");
            return ret;
        }
        printk(KERN_INFO "register_chrdev_region success
    ");
        //第二步:注册字符设备驱动
        cdev_init(&cdev1,&hello_ops);
        ret=cdev_add(&cdev1,devno,1);
        if(ret<0)
        {
            printk(KERN_ERR "Uable to add dev
    ");
            return ret;
        }
        return 0;
    }
    static void hello_exit(void)
    {
        cdev_del(&cdev1);
        unregister_chrdev_region(devno,1);
        printk(KERN_ALERT "hell_exit
    ");
    }
    MODULE_LICENSE("GPL");
    module_init(hello_init);
    module_exit(hello_exit);

    2.问题解决

    因为我查看

    # cat /proc/devices 
    Character devices:
      1 mem
      2 pty
      3 ttyp
      4 /dev/vc/0
      4 tty
      4 ttyS
      5 /dev/tty
      5 /dev/console
      5 /dev/ptmx
      7 vcs
     10 misc
     13 input
     29 fb
     89 i2c
     90 mtd
    116 alsa
    128 ptm
    136 pts
    180 usb
    189 usb_device
    226 drm
    248 ttyGS
    249 bsg
    250 watchdog
    251 ptp
    252 pps
    253 rtc
    254 gpiochip
    
    Block devices:
      8 sd
     65 sd
     66 sd
     67 sd
     68 sd
     69 sd
     70 sd
     71 sd
    128 sd
    129 sd
    130 sd
    131 sd
    132 sd
    133 sd
    134 sd
    135 sd
    179 mmc
    259 blkext

    发现250已经有了watchdog,所以必然会冲突。

    所以我把

    static int major=250;//主设备号(用于区分设备类)

    修改成了

    static int major=99;//主设备号(用于区分设备类)

    就好了

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8572962.html
Copyright © 2011-2022 走看看