首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

初学者有关问题 驱动中copy_to_user有关问题

2013-09-07 
菜鸟问题 驱动中copy_to_user问题在驱动里面我需要讲一个char *buf[24]拷贝出来 使应用程序可以read copy_

菜鸟问题 驱动中copy_to_user问题
在驱动里面我需要讲一个char *buf[24]拷贝出来 使应用程序可以read copy_to_usr()应该怎么写呢?
c语言指针问题真是一大学问啊 C 指针 coy_to_usr
[解决办法]
ssize_t sil9135_read(struct file *filp, char __user *buf, size_t count, loff_t *offset)
{
    size_t ret = 0;
    int i = 0;
    u32 val = 0;
    char *buf1;
    char *kbuf[28];//指向char类型的指针数组。
    unsigned int temp = 0;
    temp = sil9135_read_byte_data(12);
    printk("DS2782_REG_VOLT_MSB = %d\n",temp);
     
    temp = sil9135_read_byte_data(13);
    printk("DS2782_REG_VOLT_LSB = %d\n",temp);
    for(i=0;i<0x1b;i++)
    {
        val = sil9135_read_byte_data(i);//读I2C寄存器值
        buf1 = kmalloc(3, GFP_KERNEL );
        buf1 = IntToStr(buf1,val);
        kbuf[i] = buf1;//kbuf[i](字符指针)指向新开辟的/处于内核空间的buf1内存单元
    }
    for(i=0;i<0x1b;i++)
    {
        printk("kbuf[%d] = %s\n",i,kbuf[i]);//打印kbuf字符型指针数组各成员所指向的字符串
    }
    for(i=0;i<0x1b;i++)
    {
        kfree(kbuf[i]);//释放kbuf字符型指针数组各成员所指向的字符串的内存单元,但是kbuf[i]仍然指向该内存单元
    }
    printk("****%s*****%d\n",__FUNCTION__,__LINE__);
#if 1
    if(copy_to_user(buf, kbuf, strlen(kbuf)))
         //拷贝kbuf字符指针数组成员的值到buf中(kbuf[i]是指针,指向内核空间)
//strlen ???幸亏内存中的NULL很多.
    {
        printk("copy_to_usr error!\n");


        ret = - EFAULT;
    }
    else 
    {
        //printk("buf is %s\n",buf);
        ret = count;
    }
#endif
    return ret;
}

热点排行