【发布时间】:2011-05-30 02:58:38
【问题描述】:
我希望有人能解释 __user 宏在 linux 内核源代码中的细微差别。
首先是宏:
# define __user __attribute__((noderef, address_space(1)))
现在,经过一番谷歌搜索后,我了解到该宏允许将指针指定为属于用户地址空间,并且不应取消引用。
我可能遗漏了一些明显的事实,但有人可以解释一下这样一个宏的含义吗?例如,这个宏在哪里可以使用的一个很好的例子是什么?再次,如果我遗漏了一些明显的东西,请原谅我。
为了说明这一点,我在检查一些 USB 代码 (linux/usbdevice_fs.h) 时遇到了宏。我只是想大致了解内核中使用的这个宏(或其他类似的)。
感谢收看!
【问题讨论】:
-
查看 do_execve() 源代码以获得很好的示例。看看 argv 如何在 count() 中使用。如果你只是简单地取消引用 (*argv[0]) 或其他东西,sparse(1) 会警告它。 address_space 表示并非所有指针都是相等的,需要不同的(取消引用)规则并且不应该混合使用。
-
@adobriyan 在什么头文件或源文件中可以找到这个函数?我不想在文件系统中使用 grep 来查找它。一条路径就足够了
标签: c macros linux-kernel kernel