И по первому и по второму вопросу (отладка в ядре) читай мой перевод Linux
Device Driver на http://www.nclug.ru/wiki/index.php?page=knz_ldd2.
Что касается первого вопроса, вкратце.
Любой системный вызов, в том числе и open(), принимается ядро на обработку.
Ядро делает какие-то дефолтовые вещи связанные с данным системным вызовом, а
потом вызывает функцию драйвера, связанную с этим вызовом (если такая функция
в драйвере зарегистрирована). Обратите внимание, функцию драйвера вызывает
ядро. Оно же формирует необходимые параметры для этого вызова. Вы обращаетесь
к системному вызову в категориях пользовательского пространства.
Отладке в ядре посвящена 4-я глава.
В сообщении от Чт 23 Март 2006 17:36 Denis Silin написал(a):
> Здравствуйте.
>
> Объясните как при открытии файла устройства с помощью
>
> 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
>
> };
>
>
>