首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从linux字符设备读取

无法从linux字符设备读取
EN

Stack Overflow用户
提问于 2016-11-22 09:25:33
回答 1查看 997关注 0票数 2

我正在为加速度计实现一个SPI驱动程序。SPI部分已经完成,但我无法从用户空间读取值。

代码语言:javascript
复制
static char charDevMessage[CD_BUFFER_SIZE] = { 0 };
...
static ssize_t char_dev_read(struct file *filep, char *buffer, size_t len, loff_t *position)
{

    int error_count = 0;
    struct xyz_values xyz;
    size_t size_requested;

    xyz = adxl345_get_xyz();
    memset(charDevMessage, 0, CD_BUFFER_SIZE);
    sprintf(charDevMessage, "%d,%d,%d", xyz.x, xyz.y, xyz.z);
    printk(KERN_INFO "MOB: %s, requested size: %d\n", charDevMessage, len);

    if (len >= CD_BUFFER_SIZE)
    {
        size_requested = CD_BUFFER_SIZE;
    }
    else
    {
        size_requested = len;
    }

    error_count = copy_to_user(buffer, charDevMessage, size_requested);      

    if (error_count == 0)          
    {
        printk(KERN_INFO "MOB: Sent %d characters to the user\n", size_requested);
        return (size_requested = 0);      

    }
    else
    {
        printk(KERN_INFO "MOB: Failed to send %d characters to the user\n", error_count);
        return -EFAULT;              

    }
}

在我安装驱动程序时已经创建了节点。但是,当我尝试cat或试图通过python读取时,它会返回一个空字符串。

dmesg说,它已经成功地发送到用户空间:

3094.495972暴徒: SPI字符设备已被打开1次3094.506075暴徒:-349,-512,511,请求大小:49 3094.514487暴徒:发送256个字符给用户3094.522646暴击:字符设备成功关闭3120.658568暴击: SPI字符设备已被打开2次3120.668609暴徒: 0,0,0,0,0,0,0,请求大小:48 3120.676392暴徒:发送256个字符给用户3120.684740暴徒:字符设备成功关闭

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 13:54:30

您误解了.read函数的概念:

读取器(用户空间)只看到.read返回的值,并将其解释为已读取的字节数。

至于.read的最后一个参数(在您的例子中是position),它的解释完全取决于驱动程序的作者。position指出的值在打开文件时由内核初始化为0。在此之后,内核本身从不修改它。

如果您希望始终从一开始就读取,则可以忽略position参数:

代码语言:javascript
复制
return size_requested;

或者,在语义上更好的是,您可以增加position指出的值,因此它将反映读取的字节总数。但在其他情况下忽略它:

代码语言:javascript
复制
*position += size_requested;
return size_requested;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40738054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档