先贴一个段报错提示
error: implicit declaration of function ‘copy_to_user’ [-Werror=implicit-function-declaration]
copy_to_user(buf,(void *)(pDev->myData+*ppos),size);
error: implicit declaration of function ‘copy_from_user’ [-Werror=implicit-function-declaration]
copy_from_user(pDev->myData+*ppos,buf,size);
在网上查了一下这种模糊声明一般是由于没有包含与被调用函数相关的头文件(.h)造成的
然后我找个了下copy_from_user 和 copy_to_user 这两个函数的头文件,网上给的很多答案是 :
#include <asm/uaccess.h>
然而依旧报错。最后我看到了这篇文章才知道,还有可能是:
#include <linux/uaccess.h>
附上文章链接:linux 中常用的一些头文件
最后附上一段关于这两个函数的说明:
由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成用户空间到内核空间的复制,函数copy_from_user()完成内核空间到用户空间的复制。
//源码:linux/arch/i386/lib/usercopy.c
copy_to_user: - Copy a block of data into user space.
@to: Destination address, in user space.
@from: Source address, in kernel space.
@n: Number of bytes to copy.
849 unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
850{
851 if (access_ok(VERIFY_WRITE, to, n))
852 n = __copy_to_user(to, from, n);
853 return n;
854}
copy_from_user: - Copy a block of data from user space.
@to: Destination address, in kernel space.
@from: Source address, in user space.
@n: Number of bytes to copy.
874unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
875{
876 if (access_ok(VERIFY_READ, from, n))
877 n = __copy_from_user(to, from, n);
878 else
879 memset(to, 0, n);
880 return n;
881}