Команда Shell для читання регістрів пристроїв?


18

Чи є на одноплановому комп'ютері під управлінням Linux, як можна прочитати вміст регістрів конфігурації пристрою, які керують обладнанням? Я думаю, це було б обгорткою для inw().

Я шукаю щось еквівалентне mdкоманді dump ( ) U-boot memory , яка повинна використовуватися в контексті налагодження драйвера.


2
Це може допомогти, але не забудьте прочитати цілу нитку: list.arm.linux.org.uk/lurker/message/…
перестаньте бути злим"

Будь-які оновлення з цього приводу ??
Сен

@Sen: Негативно. Я все ще спотикався. Я читаю пов'язаний потік, який говорить про те, що inw () не робить те, що я думав: "inb () і друзі призначені лише для емуляції адресного простору PCI та ISA IO." Я використовував осцилоскоп і читав багато кодів драйвера ядра як мої наступні найкращі варіанти.
пінгверт

Відповіді:


14

Якщо вам відома фізична адреса пристрою, ви можете використовувати devmem2.

devmem2 <physical address> <size (b/h/w)> [value]

3

Я не знаю, чи можна це зробити безпосередньо з ванільним ядром.

Але слід досить швидко рухатися вперед, щоб написати простий драйвер, який використовує "файл" в / proc для експорту вмісту пам'яті, який ви хотіли б бачити.

Тоді ви можете прочитати свій "файл" за допомогою простого сценарію та мати доступ до цієї пам'яті.


1

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


Я думаю, що цей маршрут має потенціал, але, здається, є проблема. Ця команда, виконана як root: "dd if = / dev / mem bs = 1 skip = 10000 count = 512", дає цю помилку: "dd: / dev / mem: Неправильна адреса" Я не впевнений, що це означає. 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?


2
Це справді коментар, а не відповідь на запитання. Будь ласка, використовуйте "Додати коментар", щоб залишити відгук для автора.
Ренан

@Renan "Це справді коментар" Напевно, ненавмисне, але смішне, незалежно. +1 за яскравість мого дня тавтологією. редагувати: Я щойно зрозумів, що це може виявитися саркастичним. Я не маю на увазі це так.
корінь

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.