Перейти к содержанию
    

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у вас uclinux, то никакого виртуального адресного пространства у вас нет. Если запускается приложение, то оно должно работать с интерфейсами ядра, а не с регистрами процессора (иначе зачем тогда нужна операционная система), а уже каким образом оно общается с ядром, можно отследить через утилиты вроде strace и ltrace.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. То есть если у меня регистр ADC_DATA находится, к примеру, по адресу 0x2400, то его можно прочесть по указателю на 0x2400. Разумеется, с приведением типов. Я вас правильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не уверен что можно, но я с uclinux не работал, так что ничего сказать по этому поводу не могу. Но сам факт того, что пользовательское приложение работает с регистрами напрямую, ставит под большой вопрос целесообразность использования uclinux, так что я все-таки думаю что общение с периферией реализовано с использованием интерфейсов операционной системы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Пакета ltrace там нет. Попробую собрать. Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить. Посоветуйте учебник по ucLinux.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Как такового учебника по ucLinux'у нету, но есть неплохая глава совсем для начинающих в книге "Embedded Linux system design and development". Перевод можно найти по этой ссылке .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

регистры доступны из пространства ядра. В теории содержимое регистров может смотреть модуль ядра и передавать в пространство пользователя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Неправилно сказали :smile3009:

Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе man по:

ioperm(2), iopl(2), inb(2), outb(2), capabilities(7) и т.д. (процессор i386 только).

Кроме того, Linux предоставляет даже специальное символьное устройство /dev/port для прямых чтения и записи в порты внешних устройств (с правами root, естественно).

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка криво вставилась, поправьте если не сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ссылка криво вставилась, поправьте если не сложно.

Спасибо, поправил.

Пробуйте.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неправилно сказали :smile3009:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Нет, не означает.

Потому что приложение, запущенное с root-привилегиями уже не является "пользовательским" - не нужно давать ординарным пользователям таких привилегий.

А не означает ли то, что тот же пользователь простым нажатием RESET ("если есть прямой доступ к железу" :laughing: ) может достичь того же результата?

 

А вот элементарнейший код, уровня "Hello world", модуля ядра при малейшей ошибке его криворукого написания обязательно завалит систему.

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

 

P.S. То, что пользователь может воткнуть 2 пальца в электророзетку, ещё вовсе не повод к пацифистским призывам отказаться от пользования электричеством вообще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, не означает.

...

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо, по-другому спрошу.

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

 

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

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

1. не сможет

2. не сможет

Но! ... при таких условиях приложение никогда не сможет получить доступа к аппаратным ресурсам. Никаким способом - точно так же, как такой пользователь не сможет загрузить и модуль ядра, чего бы там супер-пупер гениального он не написал.

Без root-прав - сиди в пользовательской песочнице.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...