Results 1 to 1 of 1
Hi,
I read in Linux Device drivers book that kernel will not allow to remove a module if it is busy. That is if a process is accessing the device(open/read/write..etc) ...
- 10-13-2007 #1Just Joined!
- Join Date
- Sep 2007
- Posts
- 6
rmmod didnot prevent from removing the driver and kernel paniced
Hi,
I read in Linux Device drivers book that kernel will not allow to remove a module if it is busy. That is if a process is accessing the device(open/read/write..etc) then the module cannot be removed.
To test this i wrote a sample module and a test application to access the character device continuously and then removed the module when the application is using the driver.
Driver code
-------------
samplew.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
static int sample_write(struct file *file,const char* data,int len,loff_t *off);
static struct file_operations rwstruct={
write : sample_write
};
static int major;
int init_module(void)
{
major = register_chrdev(0,"myown",&rwstruct);
printk(KERN_ALERT "The major umber assigned is %d",major);
return 0;
}
void cleanup_module(void)
{
int cleanup = unregister_chrdev(major,"file");
printk(KERN_ALERT "The major umber cleaned up is %d",cleanup);
}
static int sample_write(struct file *file,const char* data,int len,loff_t *off)
{
printk(KERN_ALERT "Inside sample_write ");
return 0;
}
I compiled the above driver code and loaded with insmod command then created a device under /dev as 'myown' with the major number displayed in /proc/devices for the module.
sample1.c
--------------------
#include
int main()
{
int fd;
printf("Program starts \n");
fd= open("/dev/myown","w");
while(1) {
printf("Writing character\n");
write(fd,"Mani",1,0);
}
fclose(fd);
}
In two screens i was running the
1) tail -f /var/log/messages
2) ./a.out
In both the screens i was getting the o/p displayed and in other screen,when i did
#rmmod samplew.ko
Then the system got hung and kernel paniced.A reboot is required to get the system back running.
Query
-------
1) Why did the kernel didnot prevent us from removing the module when it is being used by a process ?
Is this the expected behavior ?
Can some one answer my query
Thanks in advance,
- Mani


Reply With Quote
