Re: Параметры функции open() в модуле ядра
Здравствуйте.
Объясните как при открытии файла устройства с помощью
fd = open("/dev/my_dev",O_RDWR);
(параметры char*, int)
в модуль передаются параметры типа inode* и file* ?
static int device_open(struct inode *inode, struct file *filp)
struct file_operations Fops =
{
open: device_open,
release: device_close,
write: device_write
};
-*Название листа "Перевод и доработка документации под Linux и другие системы";
Написать в лист: comp.soft.linux.docs-list@subscribe.ru
Архив Листа - http://subscribe.ru/archive/comp.soft.linux.docs Поиск: http://www.google.com
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.docs/rules
Номер письма: 290; Возраст листа: 884; Участников: 997
Адрес сайта рассылки: http://www.linuxrsp.ru/
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.docs/msg/530270
И по первому и по второму вопросу (отладка в ядре) читай мой перевод Linux
Device Driver на http://www.nclug.ru/wiki/index.php?page=knz_ldd2.
Что касается первого вопроса, вкратце.
Любой системный вызов, в том числе и open(), принимается ядро на обработку.
Ядро делает какие-то дефолтовые вещи связанные с данным системным вызовом, а
потом вызывает функцию драйвера, связанную с этим вызовом (если такая функция
в драйвере зарегистрирована). Обратите внимание, функцию драйвера вызывает
ядро. Оно же формирует необходимые параметры для этого вызова. Вы обращаетесь
к системному вызову в категориях пользовательского пространства.
Отладке в ядре посвящена 4-я глава.
В сообщении от Чт 23 Март 2006 17:36 Denis Silin написал(a):