linux copy命令头文件,Linux内核版本4.12.8中的copy_to_user未定义

在我的项目,我使用字符设备驱动程序的用户空间和内核空间之间进行通信。我使用功能copy_to_user(void user *to, const void *from, unsigned long n)将数据从内核空间复制到用户空间缓冲区。我们可以在#include < asm/uaccess.h >头文件中找到此功能。

我使用通用的Linux内核版本4.4.0-59,Ubuntu OS的16.04 LTS编译了该项目,并且工作正常,没有任何错误和警告。我得到所需的输出。

我使用Linux内核版本4.12.8,Ubuntu OS版本16.04.2 LTS编译了同一项目,并且在编译时WARNING:"copy_to_user" [/home/ldrv1/Desktop/Vijay/code/build/uts.ko] undefined!发出警告。当我对模块执行insmod时,出现如下insmod: ERROR: could not insert module uts.ko: Unknown symbol in module的错误。我认为4.12.8内核版本仍支持#include头文件,否则我将遇到致命错误:编译时没有此类文件或目录错误。我尝试使用apt-get install linux-headers-$(uname -r)命令更新linux内核头文件,并且得到以下响应:

Reading package lists... Done

Building dependency tree

Reading state information... Done

E: Unable to locate package linux-headers-4.12.8

E: Couldn't find any package by glob 'linux-headers-4.12.8'

E: Couldn't find any package by regex 'linux-headers-4.12.8'

该OS版本16.04.2 LTS具有linux-headers-4.10.0-35。

我如何摆脱这个警告?建议和支持表示赞赏。如果需要更多信息,请随时询问。

您应该将#include用于4.12.8。

这是定义。

在4.4中,某些驱动程序使用#include,而其他驱动程序

使用#include。

我认为#include是可取的。

您应该先执行apt-get update,然后再执行apt-get install linux-headers-generic。

谢谢布罗尼斯拉夫。 您的解决方案有效。

别客气。

在4.15中,似乎需要和include / linux中的头文件定义了copy_to_user,include / asm中的头文件定义了raw_copy_to_user。

Bronislav Elizaveti给出的答案是正确的。 如果使用#include代替#include,则不会收到警告。

如果您仍然只想使用#include,则需要使用_copy_to_user而不是copy_to_user(具有相同的参数)。 一个简单的_就可以了。

在asm / uaccess.h中定义了函数copy_to_user和copy_from_user。 我认为您在定义此功能时遇到了一些问题。 我编写了字符设备驱动程序,并提供了一些有关内核空间和用户空间之间的数据传输的示例。 查看我的github:我的代码以供参考。 如果您认为对您有帮助,请加注星标:)。 它在示例3中有一个小错误。我正在弄清楚它们,但是示例1和示例2很好用

嗨,Hai,我为我的问题找到了解决方案,我经历了您的示例代码及其优点。 我给了你一颗星星。 感谢您的回复。 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值