|
Доступ к регистрам, доступ к регистрам устройства на линукс |
|
|
|
 |
Ответов
|
Apr 12 2017, 09:13
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

|
Цитата(dxp @ Apr 8 2017, 05:01)  Вам правильно сказали: нельзя просто так из приложения лазить к регистрам напрямую - это прямое нарушение концепции безопасности ОС. Для работы с периферийными устройствами используются драйвера оных устройств. Найдите (или напишите) драйвер для своего устройства. Неправилно сказали Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе man по: ioperm(2), iopl(2), inb(2), outb(2), capabilities(7) и т.д. (процессор i386 только). Кроме того, Linux предоставляет даже специальное символьное устройство /dev/port для прямых чтения и записи в порты внешних устройств (с правами root, естественно). Более того, во многих случаях в Linux всячески поощряется организация ввода/вывода именно из пространства пользователя, без написания модулей ядра (драйверов). Для того делаются специальные и достаточно сложные инструменты промежуточного слоя. Самые известные тому примеры: проект libusb и файловая система FUSE, на которых в последние годы реализуется стандартная поддержка тысяч разнообразных устройств от их производителей. P.S. Детали и примеры использования всего этого хозяйства можете посмотреть здесь: Практикум по Linux Kernel.
|
|
|
|
|
May 21 2017, 13:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Olej @ Apr 12 2017, 13:13)  Неправилно сказали Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе 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, соответствующую вашему устройству. Я сейчас пишу в свободное время утилитку для подобного доступа к регистрам. Будет готова -- дам ссылку.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|