- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 LKMPG ( See Section 4.1.4. Unregistering A Device ),我不清楚何时使用 try_module_get / module_put
职能。一些 LKMPG 示例使用它们,有些则没有。
更令人困惑的是,try_module_get
在 2.6.24 源的 193 个文件中出现 282 次,但在 Linux Device Drivers ( LDD3 ) 中出现和 Essential Linux Device Drivers ,它们甚至没有出现在一个代码示例中。
我想也许他们与旧的register_chrdev
有关。接口(interface)(在 2.6 中被 cdev 接口(interface)取代),但它们仅在同一文件中一起出现 8 次:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
anon@anon:~$ lsmod | grep sched
sched 2868 1
anon@anon:~$ sudo rmmod sched
ERROR: Module sched is in use
最佳答案
您基本上不应该使用 try_module_get(THIS_MODULE);几乎所有这样的使用都是不安全的,因为如果你已经在你的模块中,那么增加引用计数为时已晚——总会有一个(小)窗口,你在模块中执行代码但没有增加引用数数。如果有人在该窗口中完全删除了模块,那么您将处于在卸载模块中运行代码的糟糕情况。
您在 LKMPG 中链接的特定示例,其中代码在 open() 方法中执行 try_module_get() 将在现代内核中通过设置 struct file_operations 中的 .owner 字段来处理:
struct file_operations fops = {
.owner = THIS_MODULE,
.open = device_open,
//...
};
$ tail /proc/sched -f &
Our_Proc_File->owner = THIS_MODULE;
关于linux-kernel - Linux 内核模块 : When to use try_module_get/module_put,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741415/
我正在阅读 LKMPG ( See Section 4.1.4. Unregistering A Device ),我不清楚何时使用 try_module_get / module_put职能。一些
我是一名优秀的程序员,十分优秀!