Bil*_*low 1 linux kernel kernel-module
我有一个简单的内核模块,它创建了一个字符设备并且什么都不做。
我编写了这个测试字符设备的用户空间程序。
int main()
{
int fd;
fd = open("/dev/ebbchar", O_RDWR);
if (fd < 0)
err(1, "open");
sleep(10);
ret = close(fd);
if (ret < 0)
err(1, "close");
}
Run Code Online (Sandbox Code Playgroud)
程序在 10 秒后退出。
但是如果同时我用 rmmod 或 modprobe 删除了模块,那么 10 秒后程序段错误或挂起,并且有一个内核 oops。
如何导致 rmmod 失败,或者是否有安全删除模块的方法?
我的模块可以在其 __exit 函数中关闭文件描述符吗?
我假设崩溃是由在字符文件操作中close()间接调用release回调的函数引起的,该release函数不再存在,因为模块已被删除。
可以在此处找到内核模块的源代码(搜索清单 2)。