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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Доступ к регистрам, доступ к регистрам устройства на линукс
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
kurtis
сообщение Feb 6 2013, 15:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Если у вас uclinux, то никакого виртуального адресного пространства у вас нет. Если запускается приложение, то оно должно работать с интерфейсами ядра, а не с регистрами процессора (иначе зачем тогда нужна операционная система), а уже каким образом оно общается с ядром, можно отследить через утилиты вроде strace и ltrace.
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Feb 7 2013, 04:09
Сообщение #3


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

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



Спасибо. То есть если у меня регистр ADC_DATA находится, к примеру, по адресу 0x2400, то его можно прочесть по указателю на 0x2400. Разумеется, с приведением типов. Я вас правильно понял?
Go to the top of the page
 
+Quote Post
kurtis
сообщение Feb 7 2013, 10:50
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Не уверен что можно, но я с uclinux не работал, так что ничего сказать по этому поводу не могу. Но сам факт того, что пользовательское приложение работает с регистрами напрямую, ставит под большой вопрос целесообразность использования uclinux, так что я все-таки думаю что общение с периферией реализовано с использованием интерфейсов операционной системы.
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Feb 8 2013, 04:39
Сообщение #5


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

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



Здравствуйте. Пакета ltrace там нет. Попробую собрать. Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить. Посоветуйте учебник по ucLinux.
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Feb 10 2013, 12:23
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Цитата
Посоветуйте учебник по ucLinux

Как такового учебника по ucLinux'у нету, но есть неплохая глава совсем для начинающих в книге "Embedded Linux system design and development". Перевод можно найти по этой ссылке .
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Apr 7 2017, 19:43
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(vladimir_orl @ Feb 6 2013, 14:35) *
Здравствуйте. Имеется устройство с установленным на нём uLinux. Устройство имеет кучу периферии, документация на конфигурирование которой весьма запутанная. Имеется также демо программа в бинарных кодах под uLinux, которая конфигурирует устройство требуемым образом. Все регистры отображены в память (адреса известны). Есть идея запустить эту программу, затем посмотреть содержимое этих регистров с помощью своей утилиты. Подскажите, как её сделать. Насколько я знаю, в линуксе, как и в винде программа работает в виртуальном адресном пространстве. Читал про mmap, но практике всё туго. Если можно, подскажите.


регистры доступны из пространства ядра. В теории содержимое регистров может смотреть модуль ядра и передавать в пространство пользователя.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 02:01
Сообщение #8


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
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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
nill
сообщение Apr 13 2017, 06:21
Сообщение #10


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

Группа: Validating
Сообщений: 124
Регистрация: 10-08-05
Пользователь №: 7 502



Цитата(Olej @ Apr 12 2017, 16:13) *
P.S. Детали и примеры использования всего этого хозяйства можете посмотреть здесь: Практикум по Linux Kernel.

Ссылка криво вставилась, поправьте если не сложно.
Go to the top of the page
 
+Quote Post
Olej
сообщение Apr 13 2017, 08:12
Сообщение #11


Местный
***

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



Цитата(nill @ Apr 13 2017, 09:21) *
Ссылка криво вставилась, поправьте если не сложно.

Спасибо, поправил.
Пробуйте.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 14 2017, 06:38
Сообщение #12


Adept
******

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



QUOTE (Olej @ Apr 12 2017, 16:13) *
Неправилно сказали smile3009.gif

Не означает ли это, что пользовательское приложение (запущенное от root) может завалить систему? Ну, если есть прямой доступ к железу.


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


Местный
***

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



Цитата(dxp @ Apr 14 2017, 09:38) *
Не означает ли это, что пользовательское приложение (запущенное от root) может завалить систему? Ну, если есть прямой доступ к железу.

Нет, не означает.
Потому что приложение, запущенное с root-привилегиями уже не является "пользовательским" - не нужно давать ординарным пользователям таких привилегий.
А не означает ли то, что тот же пользователь простым нажатием RESET ("если есть прямой доступ к железу" laughing.gif ) может достичь того же результата?

А вот элементарнейший код, уровня "Hello world", модуля ядра при малейшей ошибке его криворукого написания обязательно завалит систему.
А вообще, завалить систему Linux (и любую другую!), имея права root, есть 1000000 и ещё 1 способов, куда эстетичнее, чем тупо писать по портам. crying.gif На то они и права root.

P.S. То, что пользователь может воткнуть 2 пальца в электророзетку, ещё вовсе не повод к пацифистским призывам отказаться от пользования электричеством вообще.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 15 2017, 00:57
Сообщение #14


Adept
******

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



QUOTE (Olej @ Apr 14 2017, 15:03) *
Нет, не означает.
...

Reset, обесточивание, удар кувалдой и т.п. - это всё понятные способы "завалить систему" с разной степенью фатальности. Речь не о них, а о непреднамеренных действиях, выполняемых по неосторожности/незнанию.

Хорошо, по-другому спрошу. Вот некто написал приложение, которае лазит напрямую к железу. Этот некто не имеет рутовых прав, он юзер, и его приложение - сугубо юзерное, не предназначенное для запуска от рута. Вопросы:

  • сможет ли такое приложение получить доступ к аппаратным регистрам?
  • сможет ли такое приложение завалить систему?


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


Местный
***

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



Цитата(dxp @ Apr 15 2017, 03:57) *
Хорошо, по-другому спрошу.

Я понял - вам просто не с кем поговорить... 1111493779.gif

Цитата(dxp @ Apr 15 2017, 03:57) *
Вот некто написал приложение, которае лазит напрямую к железу. Этот некто не имеет рутовых прав, он юзер, и его приложение - сугубо юзерное, не предназначенное для запуска от рута. Вопросы:
  • сможет ли такое приложение получить доступ к аппаратным регистрам?
  • сможет ли такое приложение завалить систему?

1. не сможет
2. не сможет
Но! ... при таких условиях приложение никогда не сможет получить доступа к аппаратным ресурсам. Никаким способом - точно так же, как такой пользователь не сможет загрузить и модуль ядра, чего бы там супер-пупер гениального он не написал.
Без root-прав - сиди в пользовательской песочнице.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:40
Рейтинг@Mail.ru


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