有 copy_from_user 时 get_user 的应用

Vis*_*ahu 3 operating-system kernel linux-kernel

在 Linux 内核编程中,我看到get_usercopy_from_user从用户空间读取,较早的读取固定的 1、2 或 4 个字节,而后者从用户空间读取任意数量的字节。get_user 需要什么?copy_from_user 是否在 get_user 之后出现,因此保留 get_user 是为了向后兼容?get_user是否有特定的应用程序或者它现在已经过时了?put_user 和 copy_to_user 的相同查询。

Tsy*_*rev 5

你可以考虑

copy_from_user(dest, src, size);
Run Code Online (Sandbox Code Playgroud)

作为某种

memcpy(dest, src, size);
Run Code Online (Sandbox Code Playgroud)

和关于

get_user(x, ptr);
Run Code Online (Sandbox Code Playgroud)

作为某种简单的分配:

x = *ptr;
Run Code Online (Sandbox Code Playgroud)

就像一个简单的赋值是一个更干净的(用于代码理解),比memcpy()函数调用更短和更快的方式,比一个更简洁、更get_user短和更快的方式copy_from_user

最广为人知的情况是,当数据的大小恒定且很小(因此get_user适用)时,是ioctl设备的实现。您可以get_user通过grep-ing 内核源get_user代码或使用诸如Linux Cross Reference 之类的在线内核代码搜索服务来找到许多用法。