Причина передачи данных с использованием структурных и структурных файлов в программировании драйвера в Linux

Я изучаю главу 3.5 драйверов устройств , 3-е издание . Этот раздел вводит метод для получения пользовательской структуры, который мы определили от inode inode inode в открытой функции:

int scull_open(struct inode *inode, struct file *filp)
{
    struct scull_dev *dev;

    dev = container_of(inode->i_cdev, struct scull_dev, cdev);
    filp->private_data = dev; /* for other methods */

    }
    return 0;          
}

из моего понимания, в то время как устройство открывается, структура inode inode * Представление устройства передается в SCALL_OPEN . Затем пользовательская структура dev извлекается и передается в Filp-> Private_data , так что другие методы, такие как SCALL_READ , могут использовать его:

ssize_t scull_read(struct file *filp, char _ _user *buf, size_t count,
                loff_t *f_pos)
{
    struct scull_dev *dev = filp->private_data; 
    /* other codes that uses *dev   */
}

Это выглядит нормально Для меня до тех пор, пока я понял, что у нас уже было struct Scull_dev * dev во время инициализации в SCULL_SETUP_CDEV здесь .

Я довольно путающуюся с тех пор, как я думал, что мы можем сделать struct Scull_dev * dev глобальная переменная, затем SCALL_READ и другие методы в конечном итоге будут иметь доступ к нему, не проходя через все Прохождение с использованием INODE и файл .

У меня вопрос, почему бы нам не сделать его глобальную переменную?

Может кто-нибудь дать некоторые практические примеры использования этого метода для передачи данных?

12
задан I'm a frog dragon 9 September 2011 в 08:17
поделиться