LINUX.ORG.RU

Системный вызов


0

0

Как узнать какая функция в ядре обрабатывает системный ioctrl над конкретным файлом в /dev/. Собственно хочу разобраться как работает драйвер uart а то устанавливаю одну скорость а получаю большую ошибку

anonymous

За файлом закреплена структура file_operations. В ней поле операция ioctl. Этому полю присваивается указатель на функцию обработчик
типа:
....
.ioctl = file_ioctl;
....

Chumka ★★★
()

Да, кстати, скорость я устанавливаю больше 230400. До этой скорости включительно, всё ок.

anonymous
()
Ответ на: комментарий от anonymous

Во первых, не по имени, а по major,minor паре, а во вторых:

Поиск 'ioctl' по /usr/src/linux/drivers/serial/* выводит на uart_ioctl в файле serial_core.c

Это что, такая сложная наука?

smartly ★★★
()
Ответ на: комментарий от smartly

Хорошо не прав, maior minor пара. Но поиск в дереве исходных текстов ядра в каталоге drivers/serial это же несистемный подход. Я хотел узнать может кто знает как в общем случае зная maior minor пару определит какие функции обслуживают системные вызовы, тоесть узнать указатель на file_operations этого файла. Ну а там дальше вроде понятно как узнать функцию обработчик.

anonymous
()
Ответ на: комментарий от anonymous

>Но поиск в дереве исходных текстов ядра в каталоге drivers/serial это же несистемный подход.

Чем не нравится?

>Я хотел узнать может кто знает как в общем случае зная maior minor пару определит какие функции обслуживают системные вызовы, тоесть узнать указатель на file_operations этого файла.

Поиск по дереву дал результат, что для этого тебе нужно запутить ядро под отладчиком. Насколько я понял, драйверы регистрируют себя в ядре уже после запуска. А номера MAJOR, MINOR обычно хранятся в исходниках драйвера в виде макроса.

smartly ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.