我正在编写一个 linux 内核驱动程序,对于将数据发送到用户空间或从用户空间读取数据的每个函数,我正在使用 copy_to_user() 和 copy_from_user()。我的问题是:如果我只是复制基本数据类型(例如 u32 或 int),是否需要使用这些调用?
最佳答案
如果函数接收到指向用户空间数据的指针,您必须使用copy_from_user()
将指向的数据从用户空间复制到内核空间(反之亦然)。
请注意,指针值本身是按值传递的(就像所有 C 参数一样),因此您不必在 之前执行
它指向的数据。copy_from_user()
来获取指针值copy_from_user()
数字参数与指针参数的工作方式相同;用 C 术语来说,它们都是标量。您不必使用 copy_from_user()
来复制参数的值;那已经被复制了。您只需使用它来复制传递的指针指向的数据。
所以如果你有一个int
类型的参数,你可以直接使用它。如果你的参数指向一个int
,那么这个int
对象就会在用户空间,你需要用copy_to_user
来复制该对象进入内核空间。
关于基本数据类型的 copy_to_user() 和 copy_from_user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397364/