Командная консоль для чтения регистров устройства?

18

Есть ли способ прочитать содержимое регистров конфигурации устройства, управляющих аппаратным обеспечением, на одноплатном компьютере под управлением Linux? Я думаю, что это будет обертка для inw().

Я ищу что-то эквивалентное команде дампа памяти U-boot md, которое будет использоваться в контексте отладки драйвера.

pingswept
источник
2
Это может помочь, но обязательно прочитайте всю ветку
Жиль "
Есть ли какие-либо обновления по этому вопросу?
Сен
@ Сен: отрицательный. Я все еще в тупике. Я прочитал связанную ветку, в которой говорится, что inw () не выполняет то, что я думал: «inb () и друзья предназначены только для эмуляции адресного пространства PCI и ISA IO». Я использую осциллограф и читаю много кода драйвера ядра в качестве моих следующих лучших вариантов.
pingswept

Ответы:

14

Если вы знаете физический адрес устройства, вы можете использовать devmem2.

devmem2 <physical address> <size (b/h/w)> [value]
Эрик
источник
3

Я не знаю, можете ли вы сделать это напрямую с ванильным ядром.

Но было бы довольно просто написать простой драйвер, который использует «файл» в / proc для экспорта содержимого памяти, которое вы хотели бы видеть.

Затем вы можете прочитать свой «файл» с помощью простого скрипта и получить доступ к этой памяти.

Johan
источник
1

Я мог бы быть совершенно и совершенно неправ в этом, и простите меня, если я ошибаюсь, но если команда md uboot просто читает адреса памяти, сопоставленные с регистрами устройств, и возвращает вам содержимое, вы не могли бы прочитать те же самые области памяти с умным использованием из dd if=/dev/mem ...?

LawrenceC
источник
Я думаю, что у этого маршрута есть потенциал, но кажется, что есть проблема. Эта команда, выполняемая от имени root: «dd if = / dev / mem bs = 1 skip = 10000 count = 512» выдает эту ошибку: «dd: / dev / mem: Bad address» Я не уверен, что это значит. Google говорит мне, что это как-то связано с изменениями, внесенными в ядро ​​2.6, но я пока недостаточно разбираюсь в этом, чтобы обойти это.
pingswept
1
Возможно попробуйте использовать драйвер mtdblock. Проверьте это: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Но вместо того, чтобы направлять его в ОЗУ вашей видеокарты, возможно, попробуйте указать его в регистрах устройства.
LawrenceC
0

Конфигурация устройства PCI в / sys / bus / pci / devices / * / config помогает?

user3487
источник
2
Это действительно комментарий, а не ответ на вопрос. Пожалуйста, используйте "Добавить комментарий", чтобы оставить отзыв для автора.
Ренан
@Renan "Это действительно комментарий" Вероятно, непреднамеренный, но смешной, независимо от. +1 за то, что осветил мой день тавтологией. редактировать: я только что понял, что это может быть саркастичным. Я не это имел в виду.
root
0

busybox devmem

busybox devmemмоя любимая версия, devmem2которая была упомянута по адресу: /unix//a/134661/32558

devmem2пришли во многих различных версиях из нескольких апстримов, в частности, Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Но утилита Busybox более канонична, широко доступна и поддерживается.

Например, devmem2было отклонено из Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (но пакет Ubuntu был создан, тем не менее).

Вы можете получить его в Ubuntu с помощью:

sudo apt-get install busybox

Использование: прочитать 4 байта с физического адреса 0x12345678:

sudo busybox devmem 0x12345678

Пишите 0x9abcdef0по этому адресу:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Вот несколько интересных способов проверить devmemэто: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник