【菜鸟问题】copy_to_user 问题

coraci 2016-10-28 09:37:24
请问copy_to_use(*to,*from,ln)这里面to 和 from两个指针使用的时候有什么要注意的?

我在写驱动的时候先定义一个变量

int val_scan=1;

在fops的read函数里面

pom_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos)
{
copy_to_user(buf, &val_scan,min(count,sizeof(val_scan));

}

这样写返回没有东西

我参考网上的

先定义
#define ON "1"; //字符串常量

copy_to_user(buff, ON, min(sizeof(ON), count));


或者


static volatile char key_values [] = {'0', '0', '0', '0', '0', '0'};//字符变量数组

copy_to_user(buff, (const void *)key_values, min(sizeof(key_values), count));


这两种都有返回

请问*from这个指针使用有什么讲究吗?
...全文
1529 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2016-11-02
  • 打赏
  • 举报
回复
楼主要把内核态的变量val_scan通过proc接口读到用户态的buffer里面. malloc(30)对吧,应该不是malloc(3)。
nswcfd 2016-10-28
  • 打赏
  • 举报
回复
目测没有问题,应该返回到buf的前四个字节了。
coraci 2016-10-28
  • 打赏
  • 举报
回复
引用 1 楼 yong_f 的回复:
这三种肯定都没问题,关键是你怎么调用的,有没有返回你是怎么判断的;
我在应用层read(fd,buf,30); 再printf一下
yong_f 2016-10-28
  • 打赏
  • 举报
回复
这三种肯定都没问题,关键是你怎么调用的,有没有返回你是怎么判断的;
猪头三小队长 2016-10-28
  • 打赏
  • 举报
回复
copy_to_user是你把内核里的内存内容拷贝到用户空间的内存而已,你在用户空间直接打印这个buf即可,但是自己要把同步机制做好。 而你又调用了read(fd, buf, 30)这样是又把fd里当前偏移量的内容拷贝了30字节到buf里,必然会把内核空间拷贝到buf里的东西覆盖,实在是没看明白你要做什么。
coraci 2016-10-28
  • 打赏
  • 举报
回复
引用 1 楼 yong_f 的回复:
这三种肯定都没问题,关键是你怎么调用的,有没有返回你是怎么判断的;
int val_scan=1; 在fops的read函数里面 pom_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos) { copy_to_user(buf, &val_scan,min(count,sizeof(val_scan)); } 在这种情况下 我的read(fd,buf,30); buf 指定是 int *buf=(int*)malloc(3); 这样调用可以吧
coraci 2016-10-28
  • 打赏
  • 举报
回复
引用 4 楼 apple_v1 的回复:
判断一下copy_to_user的返回值,你的count值是多少?
有判断 , int val_scan=1; 在fops的read函数里面 pom_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos) { copy_to_user(buf, &val_scan,min(count,sizeof(val_scan)); } 返回是1
apple_v1 2016-10-28
  • 打赏
  • 举报
回复
判断一下copy_to_user的返回值,你的count值是多少?

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧