linux - copy_to_user 在 linux 内核版本 4.12.8 中未定义

标签 linux linux-kernel linux-device-driver embedded-linux ubuntu-16.04

在我的项目中,我使用字符驱动程序在用户空间和内核空间之间进行通信。我使用函数 copy_to_user(void user *to, const void *from, unsigned long n)将数据从内核空间复制到用户空间缓冲区。我们可以在#include < asm/uaccess.h >下找到这个函数头文件。 我使用 Linux 内核版本 4.4.0-59-generic、Ubuntu OS 版本 16.04 LTS 编译了这个项目,它工作正常,没有任何错误和警告。我得到了想要的输出。

我使用 Linux 内核版本 4.12.8、Ubuntu 操作系统版本 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 .我认为 #include <asm/uaccess.h>头文件在 4.12.8 内核版本中仍然受支持,否则我会得到 fatal error :编译时没有这样的文件或目录错误。我尝试使用 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'

此操作系统版本 16.04.2 LTS 具有 linux-headers-4.10.0-35。 我如何摆脱这个警告?建议和支持表示赞赏。如果需要更多信息,请随时询问。

最佳答案

  1. 你应该使用 #include <linux/uaccess.h>对于 4.12.8。 这是 definition .

    4.4 中,一些驱动程序使用 #include <asm/uaccess.h>而其他人 使用 #include <linux/uaccess.h> .

    #include <linux/uaccess.h>我认为更可取。

  2. 你应该做 apt-get update然后 apt-get install linux-headers-generic .

关于linux - copy_to_user 在 linux 内核版本 4.12.8 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302524/

相关文章:

c - 当许多进程打开同一个特殊文件时会发生什么?

c - 内核无法处理 NULL 指针取消引用 - 将 kmem_cache_alloc 与结构一起使用

linux - 我需要什么硬件来开始编写、编译和运行我自己的内核?我需要购买像树莓派这样的新机器吗?

linux - 在 ubuntu 13.04 中安装 g++ 4.8

c++ - 在跨平台库上工作

c - 进程间信令查询 Linux

memory-management - 如何使用保留的CMA内存?

c - 需要帮助了解 Linux 内核的 BIOS 中断调用

linux - 如何通过 make menuconfig 或 make nconfig 禁用 CONFIG_STRICT_DEVMEM

linux - 任何人都可以为 Linux 推荐一个允许预定传输的免费 FTP 客户端吗?