copy_to_user()和copy_from_user()用于基本数据类型

use*_*719 7 c linux linux-device-driver linux-kernel embedded-linux

我正在编写一个Linux内核驱动程序,对于每个将数据发送到用户空间或从用户空间读取数据的函数,我使用的是copy_to_user()和copy_from_user().我的问题是:如果我只是复制一个基本数据类型,如u32或int,我是否需要使用这些调用?

Kei*_*son 7

如果函数接收到指向用户空间数据的指针,则必须使用copy_from_user()将指向的数据从用户空间复制到内核空间(反之亦然).

请注意,指针值本身是按值传递的(与所有C参数一样),因此您无需先执行a copy_from_user()获取指针值,然后才能指向copy_from_user()它所指向的数据.

数字参数与指针参数的工作方式相同; 用C语言来说,它们都是标量.您不必使用copy_from_user()复制参数的值; 那已经被复制了.您只需使用它来复制传递指针指向的数据.

因此,如果您有类型的参数int,则可以直接使用它.如果您的参数指向a int,则该int对象将位于用户空间中,您需要使用copy_to_user该对象的值复制到内核空间.