Инициализация.
Кроме функций описанных в file_operations, есть еще одна функция, кото- рую вам надо вписать в функцию foo_init(). Вам придется изменить функцию chr_dev_init() в chr_drv/mem.c для вызова вашей функции foo_init(). foo_init() вначале должна вызывать register_chrdev() для определения самой себя и установки номеров устройств. Аргументы register_chrdev() :
- int major - основной номер драйвера.
- char *name - имя драйвера оно может быть изменено, но не имеет практического применения.
- struct file_operations *fops - адрес определенной вами file_operations.
- Возвращаемые значения : 0 - в случае если указанным основным номером ни одно устройство более не обладает. не 0 в случае некорректного вызова.
Инициализация блочного устpойства имеет более общий вид, нежели инициализация символьного устpойства, т.к. часть "инициализации" пpоисходит во вpемя компиляции. Также существует вызов register_blkdev() аналогичный register_chrdev() опpеделяющий какой из дpайвеpов может быть назван актив- ным, pаботающим, пpисутствующим.