- 论坛徽章:
- 0
|
源程序如下:
驱动部分:
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? |
|