免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3027 | 回复: 6
打印 上一主题 下一主题

copy_from_user 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-11 10:47 |只看该作者 |倒序浏览
源程序如下:
驱动部分:
static ssize_t ds18b20_write(struct file *file,const char *buffer, size_t count,loff_t *f_pos)
{
static char *data;
char temp;
int i,dat=0;

kfree(data);


data = (char *)kmalloc(sizeof(char)*(count+1),GFP_KERNEL);


copy_from_user(data,buffer,count+1);

temp=*data;
printk("write temp=%x\n",temp);

........
return count;
}

应用程序如下:
int main (void)
{.....
char *buf1;
......
*buf1=0xCC;
.....
fd=open(ds18b20,O_RDWR);
......
if((len=write(fd,buf1,strlen(buf1)))<0)
{ perror("write:");
exit(1);}
else printf("write:%x\n",*buf1);
......
实际应用中出现的问题是:
# ./ds18b20

the ds18b20 is open now!
open ds18b20 sucess 3
write temp=0 (?????)
pc : [<0200068c>] lr : [<02000660>] Not tainted
sp : bffffe78 ip : 400bff30 fp : bffffeb0
r10: 4010926c r9 : 02000594 r8 : 00000001
r7 : 4001fe94 r6 : 020003e0 r5 : bffffed4 r4 : 00000648
r3 : 000000cc r2 : 00000001 r1 : 000000cc r0 : 00000001
Flags: nzCv IRQs on FIQs on Mode USER_32 Segment user
Control: C000317F Table: 30978000 DAC: 00000015
the ds18b20 is close!
Segmentation fault
请高手指教为什么copy_from_user 没有把CC传入内核驱动中?
copy_from_user(data,buffer,count+1); 函数中传入的数据长度为什么是count+1?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2008-09-11 11:18 |只看该作者
一上来就kfree(data);不知道是什么用意?
data = (char *)kmalloc(sizeof(char)*(count+1),GFP_KERNEL); 你申请这么多,所以传那么多。

论坛徽章:
0
3 [报告]
发表于 2008-09-11 13:55 |只看该作者

回复 #2 dreamice 的帖子

我要申请的数据长度是count,但是我看到一些例子传参数时都是count+1,所有有些不明白,这是规定的吗?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2008-09-11 17:12 |只看该作者

回复 #3 simba711 的帖子

应该不是规定,只是为了防止溢出吧,我觉得这样写没有什么意义。

论坛徽章:
0
5 [报告]
发表于 2008-09-11 18:05 |只看该作者
申请内存应该是多少就多多少把,要多申请一个?

论坛徽章:
0
6 [报告]
发表于 2008-09-12 14:08 |只看该作者
是不是个人习惯啊,要不lz少申请一个单位,运行下看有啥异常没
xhcbrave 该用户已被删除
7 [报告]
发表于 2008-09-25 17:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP