内核模块删除失败
发表于 : 2019-07-05 11:21
第一次通过insmod kernel_test.ko,并rmmod kernel_test成功
第二次加载并删除的时候提示模块在使用
rmmod kernel_test
rmmod: ERROR: Module kernel_test is in use
lsmod查看确实kernel_test 使用次数为1.
lsmod | grep test
kernel_test 16384 1
那么现在该如何卸载这个模块呢, rmmod -f 用过了也不行
rmmod -f kernel_test
rmmod: ERROR: ../libkmod/libkmod-module.c:793 kmod_module_remove_module() could not remove 'kernel_test': Device or resource busy
rmmod: ERROR: could not remove module kernel_test: Device or resource busy
源代码如下:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
static int pid;
module_param(pid,int,0644);
static int __init memtest_init(void)
{
struct task_struct *p;
struct vm_area_struct *temp;
printk("The virtual memory areas(VMA) are:\n");
p=pid_task(find_vpid(pid),PIDTYPE_PID);
// p=find_task_by_vpid(pid);
temp=p->mm->mmap;
while(temp)
{
printk("start:%p\tend:%p\n",(unsigned long *)temp->vm_start,(unsigned long *)temp->vm_end);
temp=temp->vm_next;
}
return 0;
}
static void __exit memtest_exit(void)
{
printk("Unloading my module.\n");
return;
}
module_init(memtest_init);
module_exit(memtest_exit);
MODULE_LICENSE("GPL");
第二次加载并删除的时候提示模块在使用
rmmod kernel_test
rmmod: ERROR: Module kernel_test is in use
lsmod查看确实kernel_test 使用次数为1.
lsmod | grep test
kernel_test 16384 1
那么现在该如何卸载这个模块呢, rmmod -f 用过了也不行
rmmod -f kernel_test
rmmod: ERROR: ../libkmod/libkmod-module.c:793 kmod_module_remove_module() could not remove 'kernel_test': Device or resource busy
rmmod: ERROR: could not remove module kernel_test: Device or resource busy
源代码如下:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
static int pid;
module_param(pid,int,0644);
static int __init memtest_init(void)
{
struct task_struct *p;
struct vm_area_struct *temp;
printk("The virtual memory areas(VMA) are:\n");
p=pid_task(find_vpid(pid),PIDTYPE_PID);
// p=find_task_by_vpid(pid);
temp=p->mm->mmap;
while(temp)
{
printk("start:%p\tend:%p\n",(unsigned long *)temp->vm_start,(unsigned long *)temp->vm_end);
temp=temp->vm_next;
}
return 0;
}
static void __exit memtest_exit(void)
{
printk("Unloading my module.\n");
return;
}
module_init(memtest_init);
module_exit(memtest_exit);
MODULE_LICENSE("GPL");