- 论坛徽章:
- 0
|
本帖最后由 zotozo 于 2013-03-28 18:35 编辑
因为要从用户空间更新数据要往寄存器循环写入十六进制数据,采用方法:把用户空间数据拷贝到内核空间- ssize_t hl_proc_write(struct file *filp, const char __user * buff,unsigned long len, void *data)
- {
- char *p_buf = NULL,temp;
- int i = 0;
- p_buf = kmalloc(12*PAGE_SIZE, GFP_KERNEL);
- //memset(p_buf, 0, len);
- if (len)
- {
- if (!access_ok(VERIFY_READ, buff, len)) return -EFAULT;
- if (copy_from_user(p_buf, buff, len)) return -EFAULT;
- h_write_register_byte(this_client, 0x7d, 0xad);
- h_write_register_byte(this_client, 0x3, 0);
- udelay(HL_DELAY_US_BETWEEN_IO_WRITES);
- for(i = 0;i < len;i++)
- {
- //h_write_register_byte(this_client, i ? 0x4b : 0x4a, p_buf[i]);
- printk("user input : %x\n", p_buf[i]);
- udelay(H_DELAY_US_BETWEEN_IO_WRITES);
- }
- temp = h_read_register_byte(this_client, 0x3);
- if((temp & 0x60) == 0x40)
- printk(KERN_INFO "download patch ok %x \n", temp);
- else
- printk(KERN_INFO "download patch failed %x \n", temp);
- kfree(p_buf);
- }
复制代码 在内核中查看log,buf内容打印不完全(printk("user input : %x\n", p_buf);即这句话输出),机器就会重启。哪位大神知道什么原因buf内容大小40K |
|