Отправляет email-рассылки с помощью сервиса Sendsay

За 2006-03-23

Re: Отладка на уровне кода ядра

Здравствуйте, Denis.

Вы писали 23 марта 2006 г., 20:40:06:

> Здравствуйте.

> С помощью каких программ можно проводить отладку на уровне кода ядра?
> Т.е. например в моей программе была вызвана функция open(), и я хочу с помощью
> отладчика попасть на код этой функции в исходниках ядра.


а gdb разве не работает в этих случаях ?

   2006-03-23 23:33:42 (#530388)

Re: Параметры функции open() в модуле ядра

Knyazev Alexey пишет:

>И по первому и по второму вопросу (отладка в ядре) читай мой перевод Linux
>Device Driver на http://www.nclug.ru/wiki/index.php?page=knz_ldd2.
>
>Что касается первого вопроса, вкратце.
>
>Любой системный вызов, в том числе и open(), принимается ядро на обработку.

>Ядро делает какие-то дефолтовые вещи связанные с данным системным вызовом, а
>
>потом вызывает функцию драйвера, связанную с этим вызовом (если такая функция
>
>в драйвере зарегистрирована). Обратите внимание, функцию драйвера вызывает
>ядро. Оно же формирует необходимые параметры для этого вызова. Вы обращаетесь
>
>к системному вызову в категориях пользовательского пространства.
>
>Отладке в ядре посвящена 4-я глава.
>
>
За работу - 5 баллов! Буду вчитываться!

   Oleg Ponomarev 2006-03-23 23:33:15 (#530387)

Re: Параметры функции open() в модуле ядра

В сообщении от 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)

Вы чего пишете - драйвер? Тогда от open() в программе до
метода open() в драйвере - дистанция огромного размера. Вам
в драйвере нужен в основном minor:
int minor = MINOR(ino->i_rdev);
А от file - поле private_data, куда вы будете складывать то,
что считаете нужным, и получать это в остальных методах.

   "Sergey B. Khvatov" 2006-03-23 23:33:00 (#530386)

Re: Параметры функции open() в модуле ядра

И по первому и по второму вопросу (отладка в ядре) читай мой перевод 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
>
> };
>
>
>

   2006-03-23 18:37:20 (#530296)

Отладка на уровне кода ядра

Здравствуйте.

С помощью каких программ можно проводить отладку на уровне кода ядра?
Т.е. например в моей программе была вызвана функция open(), и я хочу с помощью
отладчика попасть на код этой функции в исходниках ядра.



-*Название листа "Перевод и доработка документации под 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
Номер письма: 291; Возраст листа: 884; Участников: 997
Адрес сайта рассылки: http://www.linuxrsp.ru/
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.docs/msg/530273

   "Denis Silin" 2006-03-23 17:36:56 (#530273)

Параметры функции 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

   "Denis Silin" 2006-03-23 17:33:46 (#530270)