驱动层
//_________________________________________________________________________________
#define MAX_CS 8
#define MAX_OFFSET 192
#define MAXCOPYDATA 1024
static unsigned char cpdata[MAXBUFF];
static ssize_t led_3d_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
unsigned char *cpd=cpdata;
int texx,cc;unsigned char teyy;
memset(cpd,1,MAXBUFF);
copy_from_user(cpd,buf,MAXCOPYDATA);
printk(KERN_ALERT"/-------------------------- \n");
printk(KERN_ALERT"cpd[0]-->teyy=%x \n",cpd[0]);
printk(KERN_ALERT"cpd[1]-->teyy=%x \n",cpd[1]);
printk(KERN_ALERT"/-------------------------- \n");
}
//_________________________________________________________________________________
用户层
main()
{
int fd,x;
char* filename;
unsigned char display[5000];
unsigned char cop[2];
unsigned char val,*disp=display;
cop[1]=val=*argv[4];
printf("argv[4]=%x \n",val);
cop[0]=val=*argv[3];
printf("argv[3]=%x \n",val);
memcpy(display,cop,2);
}
//_________________________________________________________________________________
运行[\u@\h\W]#./ledtest /dev/led on a 4
为什么printk 出的结果
有时为
cpd[0]-->teyy=61
cpd[1]-->teyy=34
有时为
cpd[0]-->teyy=0
cpd[1]-->teyy=0
由于什么原因引起这copy_form_user 失败的?
|