реклама на сайте
подробности

 
 
> Доступ к регистрам, доступ к регистрам устройства на линукс
vladimir_orl
сообщение Feb 6 2013, 11:35
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Здравствуйте. Имеется устройство с установленным на нём uLinux. Устройство имеет кучу периферии, документация на конфигурирование которой весьма запутанная. Имеется также демо программа в бинарных кодах под uLinux, которая конфигурирует устройство требуемым образом. Все регистры отображены в память (адреса известны). Есть идея запустить эту программу, затем посмотреть содержимое этих регистров с помощью своей утилиты. Подскажите, как её сделать. Насколько я знаю, в линуксе, как и в винде программа работает в виртуальном адресном пространстве. Читал про mmap, но практике всё туго. Если можно, подскажите.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vladimir_orl
сообщение Feb 8 2013, 04:39
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Здравствуйте. Пакета ltrace там нет. Попробую собрать. Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить. Посоветуйте учебник по ucLinux.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 02:01
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (vladimir_orl @ Feb 8 2013, 11:39) *
Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить.

Ваша программа работает в режиме User, а для доступа к регистрам периферии нужен режим Supervisor (речь об аппаратных режимах процессора). Когда вы пытаетесь обратиться по адресу к регистру периферии, возникает аппаратное исключение, обработчик которого (из ядра) и сообщает вам сею весть.

Вам правильно сказали: нельзя просто так из приложения лазить к регистрам напрямую - это прямое нарушение концепции безопасности ОС. Для работы с периферийными устройствами используются драйвера оных устройств. Найдите (или напишите) драйвер для своего устройства.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Olej
сообщение Apr 12 2017, 09:13
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(dxp @ Apr 8 2017, 05:01) *
Вам правильно сказали: нельзя просто так из приложения лазить к регистрам напрямую - это прямое нарушение концепции безопасности ОС. Для работы с периферийными устройствами используются драйвера оных устройств. Найдите (или напишите) драйвер для своего устройства.

Неправилно сказали smile3009.gif
Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе man по:
ioperm(2), iopl(2), inb(2), outb(2), capabilities(7) и т.д. (процессор i386 только).
Кроме того, Linux предоставляет даже специальное символьное устройство /dev/port для прямых чтения и записи в порты внешних устройств (с правами root, естественно).

Более того, во многих случаях в Linux всячески поощряется организация ввода/вывода именно из пространства пользователя, без написания модулей ядра (драйверов). Для того делаются специальные и достаточно сложные инструменты промежуточного слоя. Самые известные тому примеры: проект libusb и файловая система FUSE, на которых в последние годы реализуется стандартная поддержка тысяч разнообразных устройств от их производителей.

P.S. Детали и примеры использования всего этого хозяйства можете посмотреть здесь: Практикум по Linux Kernel.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение May 21 2017, 13:12
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Olej @ Apr 12 2017, 13:13) *
Неправилно сказали smile3009.gif
Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе man по:
ioperm(2), iopl(2), inb(2), outb(2), capabilities(7) и т.д. (процессор i386 только).
Кроме того, Linux предоставляет даже специальное символьное устройство /dev/port для прямых чтения и записи в порты внешних устройств (с правами root, естественно).

Более того, во многих случаях в Linux всячески поощряется организация ввода/вывода именно из пространства пользователя, без написания модулей ядра (драйверов). Для того делаются специальные и достаточно сложные инструменты промежуточного слоя. Самые известные тому примеры: проект libusb и файловая система FUSE, на которых в последние годы реализуется стандартная поддержка тысяч разнообразных устройств от их производителей.

P.S. Детали и примеры использования всего этого хозяйства можете посмотреть здесь: Практикум по Linux Kernel.


ТС навряд ли использует i386. Скорее всего ARM. В обычном Линуксе для доступа к регистрам я делаю следующим образом. Сначала смотрю по каким адресам зарегистрированы регистры в псевдо файле: /proc/iomem.
Все последуящие операции производятся пользователем root.
Потом, используя map для устройства /dev/mem, получаю доступ к области памяти. Насколько я понимаю вопрос: Если область памяти не зарегистрирована в ядре (что мы и видим в /proc/iomem), то до памяти не достучишься. Как обстоит дело с вашей системой я не знаю. Дело в том, что операция map производится для того, чтобы получить виртуальный адрес, соответствующий искомому физическому. ucLinux не нуждается в такой операции ибо у него нет виртуальной памяти.
Попробуйте напрямую писать и читать в область памяти из /proc/iomem, соответствующую вашему устройству.
Я сейчас пишу в свободное время утилитку для подобного доступа к регистрам. Будет готова -- дам ссылку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vladimir_orl   Доступ к регистрам   Feb 6 2013, 11:35
- - kurtis   Если у вас uclinux, то никакого виртуального адрес...   Feb 6 2013, 15:51
- - vladimir_orl   Спасибо. То есть если у меня регистр ADC_DATA нахо...   Feb 7 2013, 04:09
- - kurtis   Не уверен что можно, но я с uclinux не работал, та...   Feb 7 2013, 10:50
|- - dxp   QUOTE (Olej @ Apr 12 2017, 16:13) Неправи...   Apr 14 2017, 06:38
||- - Olej   Цитата(dxp @ Apr 14 2017, 09:38) Не означ...   Apr 14 2017, 08:03
||- - dxp   QUOTE (Olej @ Apr 14 2017, 15:03) Нет, не...   Apr 15 2017, 00:57
||- - Olej   Цитата(dxp @ Apr 15 2017, 03:57) Хорошо, ...   Apr 15 2017, 05:41
||- - Lagman   Цитата(Olej @ Apr 15 2017, 08:41) Но...   Apr 15 2017, 10:09
||- - Olej   Цитата(Lagman @ Apr 15 2017, 13:09) А есл...   Apr 15 2017, 11:56
||- - Tarbal   Цитата(Olej @ Apr 15 2017, 15:56) P.S. Ес...   May 20 2017, 22:09
|- - Olej   Цитата(Tarbal @ May 21 2017, 16:12) Я сей...   Jun 3 2017, 11:17
|- - Tarbal   Цитата(Olej @ Jun 3 2017, 15:17) Интересн...   Jun 10 2017, 02:38
- - xor.kruger   ЦитатаПосоветуйте учебник по ucLinux Как такового ...   Feb 10 2013, 12:23
- - TigerSHARC   Цитата(vladimir_orl @ Feb 6 2013, 14:35) ...   Apr 7 2017, 19:43
- - nill   Цитата(Olej @ Apr 12 2017, 16:13) P.S. Де...   Apr 13 2017, 06:21
|- - Olej   Цитата(nill @ Apr 13 2017, 09:21) Ссылка ...   Apr 13 2017, 08:12
- - Tarbal   Выложил: https://github.com/stepanovr/linuxreg По...   Jun 10 2017, 03:49
|- - HardJoker   Цитата(Tarbal @ Jun 10 2017, 06:49) Вылож...   Jun 20 2017, 20:48
|- - Tarbal   Цитата(HardJoker @ Jun 21 2017, 00:48) На...   Jun 21 2017, 03:44
|- - HardJoker   Цитата(Tarbal @ Jun 21 2017, 06:44) Не оч...   Jun 21 2017, 07:38
|- - Tarbal   Цитата(HardJoker @ Jun 21 2017, 11:38) Да...   Jun 21 2017, 23:29
- - andrew_b   Есть программка devregs: https://community.nxp.com...   Jun 10 2017, 11:49
- - ltDrakon   посматрите примерны на "малинке" ( я тож...   Jun 10 2017, 12:01
|- - Tarbal   Цитата(ltDrakon @ Jun 10 2017, 16:01) пос...   Jun 10 2017, 13:27
|- - andrew_b   Цитата(Tarbal @ Jun 10 2017, 16:27) Ну да...   Jun 10 2017, 15:01
||- - Tarbal   Цитата(andrew_b @ Jun 10 2017, 19:01) Лег...   Jun 10 2017, 15:53
|- - Olej   Цитата(Tarbal @ Jun 10 2017, 16:27) сдела...   Jun 10 2017, 21:14
|- - Tarbal   Цитата(Olej @ Jun 11 2017, 01:14) Не знаю...   Jun 10 2017, 22:39
- - ltDrakon   Цитата(Tarbal @ Jun 10 2017, 16:27) Как р...   Jun 10 2017, 22:54
- - Tarbal   Цитата(ltDrakon @ Jun 11 2017, 02:54) там...   Jun 10 2017, 23:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 23:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016