Tarbal 3 10 июня, 2017 Опубликовано 10 июня, 2017 · Жалоба тама смещенные адреса - тоже пободался чутка, было дело .. факт лишь тот - что прямой доступ только по руту или драйвер ... ПС: по факту, в итоге - плюнул - для простеньких задач быстрее прямо на контроллере ... Смещенные гигабайт :). Я бодался пока не нашел какую-то апликацию в сети и в ней увидел, что вместо 7f200000-7f2000b3 адреса 3f200000-3f2000b3. Меня это разозлило и я написал апликацию, которая сама видит где правильные адреса. Мне то что по руту не мешает. Я для поиска правильной конфигурации регистров писал апликацию, которую и с рутом можно запустить. Мне в тот момент надо было измерить джиттер кернелного таймера. Просто было любопытно если драйвер телефонного таймера без железа, а чисто на софте -- сильно будет гулять интервал. Дело в том, что для VOIP телефонов подклученых к Asterisk можно потерять синхронизацию в conference call (не знаю как по-русски -- уехал из республики развалившегосю СССР когда такого еще не было). Для этого последним в конфигурации ставят телефон на железе, а не программный или если нет такого -- то таймер. Самое смешное, что все сделал -- увидел осциллографом сигнал. Сделал логгер и осталось сделать резисторный делитель, чтобы согласовать выход 3.3V GPIO со входом логгера 250 милливольт аудио. Уже несколько месяцев некогда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardJoker 12 20 июня, 2017 Опубликовано 20 июня, 2017 · Жалоба Выложил: https://github.com/stepanovr/linuxreg Поскольку делал для Raspberry PI, то на 32 бита получилось. 64 бита криво выглядят -- надо будет найти время. Вам, olej, она навряд ли подойдет. Ведь вы в основном на 386 архитектуре, а она сегодня 64 бита. Насколько по основе данный сервис схож с devmem2 + mem2io.c? http://sg.danny.cz/foxg20/ag25g20_utils-0.96r10/ http://www.makelinux.net/books/embedded_li...drivers/text152 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 3 21 июня, 2017 Опубликовано 21 июня, 2017 · Жалоба Насколько по основе данный сервис схож с devmem2 + mem2io.c? http://sg.danny.cz/foxg20/ag25g20_utils-0.96r10/ http://www.makelinux.net/books/embedded_li...drivers/text152 Не очень понимаю о чем вы. Никакого сервиса нет. Я просто апликацию написал, которая находит по каким адресам находится периферия и мапирует адреса для получения доступа к ним. Как я описывал ранее. Если ядро скомпилировано с защитой от доступа,то никакая апликация не сможет увидеть. Нужно писать драйвер, что позволит влегкую подвесить ядро вводом неверных параметров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardJoker 12 21 июня, 2017 Опубликовано 21 июня, 2017 · Жалоба Не очень понимаю о чем вы. Никакого сервиса нет. Я просто апликацию написал, которая находит по каким адресам находится периферия и мапирует адреса для получения доступа к ним. Как я описывал ранее. Если ядро скомпилировано с защитой от доступа,то никакая апликация не сможет увидеть. Нужно писать драйвер, что позволит влегкую подвесить ядро вводом неверных параметров. Да, хорошая аппликация. Вопрос, собственно был о разнице или, наоборот, схожести методов получения доступа к регистрам, который применили вы и который используется в devmem2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 3 21 июня, 2017 Опубликовано 21 июня, 2017 · Жалоба Да, хорошая аппликация. Вопрос, собственно был о разнице или, наоборот, схожести методов получения доступа к регистрам, который применили вы и который используется в devmem2. Спасибо не добром слове. Думаю, что не так много способов есть доступа. Открывается файл и затем маппируется. Все функции в этом файле кроме самой первой это делают. Весь трюк доступа здесь и есть -- остальное оформление и удобства: https://github.com/stepanovr/linuxreg/blob/...ter/app/rdmem.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 30 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба В продолжение темы о доступе к регистрам. Вот есть PCIe устройство, для него выделен регион памяти (через BAR0), в котором реализованы регистры управления этим устройством. Адрес (физический) этого региона, положим, 0xfb0a4000. Вопрос: как с помощью inb/inw/inl/outb/outw/outl и прочих обратиться к регистру (32-битному), находящемуся по этому адресу? P.S. Платформа x86. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 3 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба On 5/6/2019 at 4:54 AM, dxp said: В продолжение темы о доступе к регистрам. Вот есть PCIe устройство, для него выделен регион памяти (через BAR0), в котором реализованы регистры управления этим устройством. Адрес (физический) этого региона, положим, 0xfb0a4000. Вопрос: как с помощью inb/inw/inl/outb/outw/outl и прочих обратиться к регистру (32-битному), находящемуся по этому адресу? P.S. Платформа x86. Надо создать виртуальный поинтер при помощи mmap и по нему обращаться как к памяти. Посмотрите как это делается в моей апликации, что я упомянул ранее. https://github.com/stepanovr/linuxreg Возможно вам и апликации хватит, а если она не покажет нужную память, то можете ее модифицировать и получить нужное. Если вашу память видно в /proc/iomem, то апликация даст вам доступ к ней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 30 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба Обращаться как к памяти, преобразовав адреса через mmap, я умею (и из Си, и из Питона получилось). Но речь шла именно о командах in/out, которые из userspace дают возможность добраться до регистров периферии, что вроде как заявляется как предпочтительным способом работы с периферией вместо того, чтобы городить интерфейс через драйвер. И вот не ясно, как в описанном выше случае это сделать. В 12.04.2017 в 16:13, Olej сказал: Программный код пользовательского режима вполне может (с существенными ограничениями) обращаться к регистрам внешних устройств. См. прямо в системе man по: ioperm(2), iopl(2), inb(2), outb(2), capabilities(7) и т.д. (процессор i386 только). Кроме того, Linux предоставляет даже специальное символьное устройство /dev/port для прямых чтения и записи в порты внешних устройств (с правами root, естественно). Более того, во многих случаях в Linux всячески поощряется организация ввода/вывода именно из пространства пользователя, без написания модулей ядра (драйверов). Для того делаются специальные и достаточно сложные инструменты промежуточного слоя. Самые известные тому примеры: проект libusb и файловая система FUSE, на которых в последние годы реализуется стандартная поддержка тысяч разнообразных устройств от их производителей. Насколько я понимаю, в моём случае этого сделать нельзя, т.к. in/out - это интерфейс работы через порты ввода-вывода, а они определены для ограниченного перечня устройств (типа стандартных COM/LPT портов), и в общем случае для произвольного периферийного устройства их нет. Поэтому либо через отображение памяти, либо через API драйвера. Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 3 23 мая, 2019 Опубликовано 23 мая, 2019 · Жалоба On 5/20/2019 at 10:42 PM, dxp said: Обращаться как к памяти, преобразовав адреса через mmap, я умею (и из Си, и из Питона получилось). Но речь шла именно о командах in/out, которые из userspace дают возможность добраться до регистров периферии, что вроде как заявляется как предпочтительным способом работы с периферией вместо того, чтобы городить интерфейс через драйвер. И вот не ясно, как в описанном выше случае это сделать. Насколько я понимаю, в моём случае этого сделать нельзя, т.к. in/out - это интерфейс работы через порты ввода-вывода, а они определены для ограниченного перечня устройств (типа стандартных COM/LPT портов), и в общем случае для произвольного периферийного устройства их нет. Поэтому либо через отображение памяти, либо через API драйвера. Так? Ну что-то вроде того. Для этих команд нужно специальное исполнение в железе. Они в другом адресном пространстве. Если разработчики железа подкючат сигналы к узлам выработки сигнала выбора устройства, то они будут работать. Причем только таким способом и никаким другим к ним можно будет добраться. Поскольку к тому адресному пространству не применяют средства виртуализации памяти, то и адресация всегда будет в лоб без маппирования. Прямо по тому адресу, что есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться