这是经典书籍Linux设备驱动程序的错误吗?

时间:2014-06-15 14:32:53

标签: c linux

以下代码摘自经典书籍 Linux设备驱动程序(第3版,第57页)

static void scull_setup_cdev(struct scull_dev *dev, int index)
{
    int err, devno = MKDEV(scull_major, scull_minor + index);

    cdev_init(&dev->cdev, &scull_fops);
    dev->cdev.owner = THIS_MODULE;
    dev->cdev.ops = &scull_fops;

    err = cdev_add (&dev->cdev, devno, 1);

    /* Fail gracefully if need be */
    if (err)
    printk(KERN_NOTICE "Error %d adding scull%d", err, index);
}

令我困惑的是陈述dev->cdev.ops = &scull_fops;。由于前面的语句cdev_init(&dev->cdev, &scull_fops);将执行相同的操作,即cdev_init()将执行dev->cdev.ops = &scull_fops;,因此以下dev->cdev.ops = &scull_fops;没有意义。

这是这本书的错误吗?

1 个答案:

答案 0 :(得分:2)

我相信你是对的。他们肯定似乎对相同的数据结构做了同样的事情。此异常也列在本书的Unconfirmed Errata部分的网站上。因此,除非你是那个提交勘误建议的人,否则其他人也会做出同样的假设。该条目大约是页面的四分之一。搜索“scull_fops”将带您直接进入。