Есть драйвер в виде модуля, для доступа из 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?
Спасибо.