gpt4 book ai didi

linux - 防止移除繁忙的内核模块

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:06 25 4
gpt4 key购买 nike

我有一个简单的内核模块,它创建一个字符设备并且不对其进行任何操作。

我编写了这个测试字符设备的用户空间程序。

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");
}

程序在 10 秒后退出。

但如果在此期间我使用 rmmod 或 modprobe 删除模块,则 10 秒后程序会出现段错误或挂起,并且会出现内核错误。

我怎样才能导致 rmmod 失败,或者是否有安全删除模块的方法?

我的模块能否在其 __exit 函数中关闭文件描述符?

我假设崩溃是由 close() 函数引起的,该函数间接调用了字 rune 件操作中的 release 回调,该 release 函数不再存在,因为该模块已被删除。

可以找到内核模块的源here (搜索 list 2)。

最佳答案

IIRC 您需要在文件操作结构中设置 .owner = THIS_MODULE,以便正确处理模块的引用计数。

关于linux - 防止移除繁忙的内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com