vladimir_orl 0 6 февраля, 2013 Опубликовано 6 февраля, 2013 · Жалоба Здравствуйте. Имеется устройство с установленным на нём uLinux. Устройство имеет кучу периферии, документация на конфигурирование которой весьма запутанная. Имеется также демо программа в бинарных кодах под uLinux, которая конфигурирует устройство требуемым образом. Все регистры отображены в память (адреса известны). Есть идея запустить эту программу, затем посмотреть содержимое этих регистров с помощью своей утилиты. Подскажите, как её сделать. Насколько я знаю, в линуксе, как и в винде программа работает в виртуальном адресном пространстве. Читал про mmap, но практике всё туго. Если можно, подскажите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 6 февраля, 2013 Опубликовано 6 февраля, 2013 · Жалоба Если у вас uclinux, то никакого виртуального адресного пространства у вас нет. Если запускается приложение, то оно должно работать с интерфейсами ядра, а не с регистрами процессора (иначе зачем тогда нужна операционная система), а уже каким образом оно общается с ядром, можно отследить через утилиты вроде strace и ltrace. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба Спасибо. То есть если у меня регистр ADC_DATA находится, к примеру, по адресу 0x2400, то его можно прочесть по указателю на 0x2400. Разумеется, с приведением типов. Я вас правильно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба Не уверен что можно, но я с uclinux не работал, так что ничего сказать по этому поводу не могу. Но сам факт того, что пользовательское приложение работает с регистрами напрямую, ставит под большой вопрос целесообразность использования uclinux, так что я все-таки думаю что общение с периферией реализовано с использованием интерфейсов операционной системы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Здравствуйте. Пакета ltrace там нет. Попробую собрать. Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить. Посоветуйте учебник по ucLinux. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 10 февраля, 2013 Опубликовано 10 февраля, 2013 · Жалоба Посоветуйте учебник по ucLinux Как такового учебника по ucLinux'у нету, но есть неплохая глава совсем для начинающих в книге "Embedded Linux system design and development". Перевод можно найти по этой ссылке . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 7 апреля, 2017 Опубликовано 7 апреля, 2017 · Жалоба Здравствуйте. Имеется устройство с установленным на нём uLinux. Устройство имеет кучу периферии, документация на конфигурирование которой весьма запутанная. Имеется также демо программа в бинарных кодах под uLinux, которая конфигурирует устройство требуемым образом. Все регистры отображены в память (адреса известны). Есть идея запустить эту программу, затем посмотреть содержимое этих регистров с помощью своей утилиты. Подскажите, как её сделать. Насколько я знаю, в линуксе, как и в винде программа работает в виртуальном адресном пространстве. Читал про mmap, но практике всё туго. Если можно, подскажите. регистры доступны из пространства ядра. В теории содержимое регистров может смотреть модуль ядра и передавать в пространство пользователя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 64 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба Да. При обращении к регистрам пишет сегменташион фаулт. Надо будет матчасть подучить. Ваша программа работает в режиме User, а для доступа к регистрам периферии нужен режим Supervisor (речь об аппаратных режимах процессора). Когда вы пытаетесь обратиться по адресу к регистру периферии, возникает аппаратное исключение, обработчик которого (из ядра) и сообщает вам сею весть. Вам правильно сказали: нельзя просто так из приложения лазить к регистрам напрямую - это прямое нарушение концепции безопасности ОС. Для работы с периферийными устройствами используются драйвера оных устройств. Найдите (или напишите) драйвер для своего устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 12 апреля, 2017 Опубликовано 12 апреля, 2017 · Жалоба Вам правильно сказали: нельзя просто так из приложения лазить к регистрам напрямую - это прямое нарушение концепции безопасности ОС. Для работы с периферийными устройствами используются драйвера оных устройств. Найдите (или напишите) драйвер для своего устройства. Неправилно сказали :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 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба P.S. Детали и примеры использования всего этого хозяйства можете посмотреть здесь: Практикум по Linux Kernel. Ссылка криво вставилась, поправьте если не сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Ссылка криво вставилась, поправьте если не сложно. Спасибо, поправил. Пробуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 64 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба Неправилно сказали :smile3009: Не означает ли это, что пользовательское приложение (запущенное от root) может завалить систему? Ну, если есть прямой доступ к железу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба Не означает ли это, что пользовательское приложение (запущенное от root) может завалить систему? Ну, если есть прямой доступ к железу. Нет, не означает. Потому что приложение, запущенное с root-привилегиями уже не является "пользовательским" - не нужно давать ординарным пользователям таких привилегий. А не означает ли то, что тот же пользователь простым нажатием RESET ("если есть прямой доступ к железу" :laughing: ) может достичь того же результата? А вот элементарнейший код, уровня "Hello world", модуля ядра при малейшей ошибке его криворукого написания обязательно завалит систему. А вообще, завалить систему Linux (и любую другую!), имея права root, есть 1000000 и ещё 1 способов, куда эстетичнее, чем тупо писать по портам. :crying: На то они и права root. P.S. То, что пользователь может воткнуть 2 пальца в электророзетку, ещё вовсе не повод к пацифистским призывам отказаться от пользования электричеством вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 64 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Нет, не означает. ... Reset, обесточивание, удар кувалдой и т.п. - это всё понятные способы "завалить систему" с разной степенью фатальности. Речь не о них, а о непреднамеренных действиях, выполняемых по неосторожности/незнанию. Хорошо, по-другому спрошу. Вот некто написал приложение, которае лазит напрямую к железу. Этот некто не имеет рутовых прав, он юзер, и его приложение - сугубо юзерное, не предназначенное для запуска от рута. Вопросы: сможет ли такое приложение получить доступ к аппаратным регистрам? сможет ли такое приложение завалить систему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Хорошо, по-другому спрошу. Я понял - вам просто не с кем поговорить... :1111493779: Вот некто написал приложение, которае лазит напрямую к железу. Этот некто не имеет рутовых прав, он юзер, и его приложение - сугубо юзерное, не предназначенное для запуска от рута. Вопросы: сможет ли такое приложение получить доступ к аппаратным регистрам? сможет ли такое приложение завалить систему? 1. не сможет 2. не сможет Но! ... при таких условиях приложение никогда не сможет получить доступа к аппаратным ресурсам. Никаким способом - точно так же, как такой пользователь не сможет загрузить и модуль ядра, чего бы там супер-пупер гениального он не написал. Без root-прав - сиди в пользовательской песочнице. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться