为什么我会得到;rmmod:删除模块&x27/my#u模块';失败(错误号2)";在尝试rmmod时? #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 静态int t_打开(结构inode*inode,结构文件*filp) { 返回不可查找的打开(inode,filp); } 静态结构文件\u操作testmod\u fops={ .open=t_open, .owner=此_模块 }; 静态结构miscdevice testmod\u miscdev={ 杂项动力小调, “我的_模块”, &testmod_fops, }; 静态int\uu init testmod\u init(void) { printk(“模块打开”\n); 杂项寄存器(&testmod\u杂项开发); 返回0; }; 静态void\uuu退出testmod\u退出(void) { printk(“关于退出\n”); 杂项注销(&testmod\u杂项开发); } 模块初始化(testmod初始化); 模块退出(测试模块退出); 模块许可证(“GPL”); 模块_作者(“0x90”); 模块描述(“我的模块”);

为什么我会得到;rmmod:删除模块&x27/my#u模块';失败(错误号2)";在尝试rmmod时? #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 静态int t_打开(结构inode*inode,结构文件*filp) { 返回不可查找的打开(inode,filp); } 静态结构文件\u操作testmod\u fops={ .open=t_open, .owner=此_模块 }; 静态结构miscdevice testmod\u miscdev={ 杂项动力小调, “我的_模块”, &testmod_fops, }; 静态int\uu init testmod\u init(void) { printk(“模块打开”\n); 杂项寄存器(&testmod\u杂项开发); 返回0; }; 静态void\uuu退出testmod\u退出(void) { printk(“关于退出\n”); 杂项注销(&testmod\u杂项开发); } 模块初始化(testmod初始化); 模块退出(测试模块退出); 模块许可证(“GPL”); 模块_作者(“0x90”); 模块描述(“我的模块”);,c,linux-kernel,kernel-module,C,Linux Kernel,Kernel Module,为什么在这个简单的示例中会出现errno2 基本上,您必须输入内部模块名,而不是文件名。您可以通过键入lsmod找到模块名称 所以 rmmod应该可以工作。insmod/tmp/my_模块工作正常,删除:rmmod/tmp/my_模块 #include <linux/version.h> #include <linux/kernel.h> #include <linux/jiffies.h> #include <linux/module.h> #i

为什么在这个简单的示例中会出现
errno2

基本上,您必须输入内部模块名,而不是文件名。您可以通过键入
lsmod
找到模块名称

所以


rmmod
应该可以工作。

insmod/tmp/my_模块工作正常,删除:rmmod/tmp/my_模块
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/jiffies.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/string.h>
#include <linux/socket.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/in.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/io.h>

#include <linux/mm.h>
#include <net/checksum.h>
#include <linux/cdev.h>

    static int t_open(struct inode *inode, struct file *filp)
    {
        return nonseekable_open(inode, filp);
    }


    static struct file_operations testmod_fops = {
        .open = t_open,
        .owner = THIS_MODULE
    };


    static struct miscdevice testmod_miscdev = {
        MISC_DYNAMIC_MINOR,
        "my_module",  
        &testmod_fops,
    }; 





    static int __init testmod_init(void)
    { 
        printk("module is on\n");
        misc_register(&testmod_miscdev);

        return 0;


    };

    static void __exit testmod_exit(void)
    {
        printk("about exit \n");
        misc_deregister(&testmod_miscdev);
    }





    module_init(testmod_init);
    module_exit(testmod_exit);
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("0x90");
    MODULE_DESCRIPTION("my_module");