Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
1

Работа с портами из kernel module

01.08.2011, 22:12. Просмотров 2280. Ответов 17
Метки нет (Все метки)

Возникла задача написать обработчик прерываний для некоторго устройства. Для этого нужно написать модуль ядра и нужны функции чтения регистра, записи в регистр устройства. В userspace это делается при помощи ioperm+inb,outb. Как это сделать из kernel module?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2011, 22:12
Ответы с готовыми решениями:

vmware kernel module updater
Запускаю vmware и получаю окно, которое отскринил и приложил к сообщению. Я...

Failed to load the NVIDIA kernel module
Доброго времени суток! У меня тут проблема возникла, не знаю как решить)...

Не получается собрать Linux Kernel Module - Commands commence before first target
Добрый день. Тема совершенно новая для меня. Разбираю пример hello_world . ...

Работа с портами
Нужна библиотека на подобии inpout32 чтоб подключаться непосредственно к...

работа с портами
Контролер ЕЛТ имеет порт адреса 3д4 в который записывает номер регистра элт ...

17
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
02.08.2011, 08:26 2
ядерный аналог ioperm() - request_region()
1
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
02.08.2011, 13:00  [ТС] 3
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
ядерный аналог ioperm() - request_region()
Что-то не совсем понфтно про №ий параметр фунции const char *name. Откуда его можно узнать?
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
02.08.2011, 13:16 4
мой склероз говорит, что это название модуля который просит регион, т.е. можете смело обозвать "my_kernel_module", но лучше погуглите сами или сделайте rtfs.
1
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
02.08.2011, 23:00  [ТС] 5
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
мой склероз говорит, что это название модуля который просит регион, т.е. можете смело обозвать "my_kernel_module", но лучше погуглите сами или сделайте rtfs.
Да, оказалось, что можно писать что угодно.

Добавлено через 7 минут
Еще 1 вопрос есть =) Не подскажите где можно почитать про shared memory?
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
03.08.2011, 09:06 6
Цитата Сообщение от dasalam Посмотреть сообщение
Еще 1 вопрос есть =) Не подскажите где можно почитать про shared memory?
Например у Стивенса "UNIX Network Programming" 2й том, или маны shmget (SYSV) shm_open(POSIX) и далее по ссылкам из них.
0
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
03.08.2011, 11:34  [ТС] 7
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Например у Стивенса "UNIX Network Programming" 2й том, или маны shmget (SYSV) shm_open(POSIX) и далее по ссылкам из них.
Я правильно понимаю, что в модуле ядра и в пользовательской программе я могу использовать одни и те же вызовы?
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
03.08.2011, 12:09 8
Нет. Вы вопрос свой как-нибудь уточните что бы не гадать, что именно вам нужно сделать.
0
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
03.08.2011, 18:02  [ТС] 9
Вот есть у меня в kernel module массив из long int, я хочу чтобы пользовательская программа смогла счиатть некоторые значения элементов этого массива. Только считать и все
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
03.08.2011, 19:01 10
Мало рассказали чтобы выбирать за вас)
посмотрите как сделано через mmap
1
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
03.08.2011, 22:02  [ТС] 11
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Мало рассказали чтобы выбирать за вас)
посмотрите как сделано через mmap
К сожалению приведенная там программа не работает. Я немного подредактировал код модуля (добавил #include <linux/slab.h> и закоментил .nopage = mmap_nopage, (т.к. когда делал make c nopage, то была ошибка
Bash
1
mmap_simple_kernel.c:66:2: ошибка: неизвестное поле «nopage» в инициализаторе
))и код пользовательской программы(поменяв открываемый файл в open). Модуль загрузил, но при запуске пользовательской программы получаю
Bash
1
2
initial message: 
Ошибка сегментирования

Добавлено через 27 минут
Да, debugfs смонтировал
Bash
1
mount -t debugfs none /sys/kernel/debug
Файл при помощи debugfs_create_file создается
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
03.08.2011, 23:29 12
Вы уж простите, но ковыряться вместо вас в хедерах ядра я не хочу. Выкинули вы "сердце" модуля, именно этот кусок и выделял страницу памяти - не удивительно что он падает. nopage сейчас зовут fault, семантика поменялась, но смысл прежний.
1
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
03.08.2011, 23:55  [ТС] 13
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Вы уж простите, но ковыряться вместо вас в хедерах ядра я не хочу. Выкинули вы "сердце" модуля, именно этот кусок и выделял страницу памяти - не удивительно что он падает. nopage сейчас зовут fault, семантика поменялась, но смысл прежний.
Я не прошу что-то за себя делать. Прошу только посоветовать какую-то литературу на эту тему и если есть какой-нибудь рабочий пример.
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.08.2011, 00:00 14
литература хз... вряд ли она успевает за ядром. попробуйте поискать свежее издание linux device drivers (у меня на работе 3е и там вроде еще nopage в этом месте).
Примеры... сделайте grep по ядру или в онлайн поищите (сайтов с кросс рефернце ядреных исходников полно)
0
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
07.08.2011, 22:17  [ТС] 15
g_u_e_s_t, а не подскажите как писать в файл созданный при помощи debugfs_create_file из модуля kernel?
Все, разобрался сам =)
0
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
10.08.2011, 22:10  [ТС] 16
Вроде бы модуль написал paste.org.ru/?d6jt5k. Разобрался как читать/писать в память из пользоватльской программы, но вот как это делать из самого модуля не понял. g_u_e_s_t, не подскажите?
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
15.08.2011, 13:06 17
Цитата Сообщение от dasalam Посмотреть сообщение
g_u_e_s_t, не подскажите?
Если еще актуально... Адрес буфера лежит в vm_area_struct->vm_private_data читать/писать из ядра можно как угодно.
0
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
15.08.2011, 15:10  [ТС] 18
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Если еще актуально... Адрес буфера лежит в vm_area_struct->vm_private_data читать/писать из ядра можно как угодно.
Да, актуально, спасибо
0
15.08.2011, 15:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2011, 15:10

Работа с COM портами
Всем привет! Начал работу с com-портами на php. Попытка открыть порт: $file...

Работа с COM портами
Здравствуйте. Облазил много различных ресурсов в сети но не могу найти решение...

Работа с портами
Добрый день. Стоит задача дипломного проекта - сканирование портов локальных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru