выгрузка модуля (устройство остаётся видимым в /proc/devices)

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2561
ОС: Debian

выгрузка модуля

Сообщение IMB »

Доброго дня!
Есть драйвер в виде модуля, для доступа из user-space используется символьное устройство, зарегистрированное через register_chrdev(). Драйвер успешно загружается, устройство регистрируется и отображается в /proc/devices.
При выгрузке драйвера вызывается функция unregister_chrdev(), драйвер выгружается без сообщений о ошибках, его не видно через lsmod, но зарегистрированное устройство не прорадает из /proc/devices.
Во всех примерах, что я нашёл в сети и драйверах используется именно эта функция.
Код вызываемый при выгрузке модуля:

Код: Выделить всё

static void nvp2120_i2c_cleanup(void)
{
    if (debug)
        printk("[nvp2120_eeprom] Starting %s\n", __FUNCTION__);

    struct i2c_driver *driver = &nvp2120_i2c_driver;

    if (nvp2120_i2c_registration) {
        if (Device_Open)
            printk("Device busy\n");
        i2c_detach_client(&nvp2120_i2c_client);
        i2c_del_driver(driver);
        nvp2120_i2c_client.adapter = NULL;
        nvp2120_i2c_registration = UNREGISTERED;
        if (0 != unregister_chrdev(MAJOR_NUM, DEVICE_NAME))
            printk(KERN_ALERT "Error: unregister_chrdev: %s\n", DEVICE_NAME);
    }
}

Что дополнительно необходимо выполнить при выгрузке модуля для очистки /proc/devices?
Спасибо.
Спасибо сказали:
Ответить