Perintah Shell untuk membaca register perangkat?

18

Pada komputer papan tunggal yang menjalankan Linux, apakah ada cara untuk membaca konten register konfigurasi perangkat yang mengontrol perangkat keras? Saya pikir itu akan menjadi pembungkus untuk inw().

Saya mencari sesuatu yang setara dengan mdperintah dump memori U-boot ( ), untuk digunakan dalam konteks debugging driver.

pingswept
sumber
2
Ini mungkin membantu, tetapi pastikan untuk membaca seluruh utas: lists.arm.linux.org.uk/lurker/message/…
Gilles 'SO- stop being evil'
Adakah pembaruan tentang ini ??
Sen
@ Sen: Negatif. Saya masih bingung. Saya membaca utas tertaut, yang menunjukkan bahwa inw () tidak melakukan apa yang saya pikirkan: "inb () dan teman-teman hanya untuk meniru ruang alamat PCI dan ISA IO." Saya telah menggunakan osiloskop dan membaca banyak kode driver kernel sebagai opsi terbaik berikutnya.
pingswept

Jawaban:

14

Jika Anda tahu alamat fisik perangkat, Anda dapat menggunakan devmem2.

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

Saya tidak tahu apakah Anda bisa melakukannya langsung dengan kernel vanilla.

Tetapi harus cukup maju untuk menulis driver sederhana yang menggunakan "file" di / proc untuk mengekspor konten memori yang ingin Anda lihat.

Kemudian Anda dapat membaca "file" Anda dengan skrip sederhana dan memiliki akses ke memori itu.

Johan
sumber
1

Saya bisa salah dan benar-benar salah tentang hal ini, dan maafkan saya jika saya, tetapi jika perintah md uboot hanya membaca alamat memori yang dipetakan ke register perangkat dan mengembalikan konten kepada Anda, tidak bisakah Anda membaca lokasi memori yang sama dengan penggunaan yang cerdik dari dd if=/dev/mem ...?

LawrenceC
sumber
Saya pikir rute ini memiliki potensi, tetapi tampaknya ada masalah. Perintah ini dieksekusi sebagai root: "dd if = / dev / mem bs = 1 lewati = 10.000 count = 512" memberikan kesalahan ini: "dd: / dev / mem: Alamat buruk" Saya tidak yakin apa artinya itu. Google memberi tahu saya bahwa ini ada hubungannya dengan perubahan yang diperkenalkan di kernel 2.6, tetapi saya belum cukup memahami tentang ini untuk mengatasinya.
Ayah menangis
1
Mungkin coba gunakan driver mtdblock. Lihat ini: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Tapi alih-alih mengarahkannya ke RAM kartu grafis Anda, mungkin coba arahkan ke register perangkat.
LawrenceC
0

Apakah konfigurasi perangkat PCI di / sys / bus / pci / devices / * / config ada bantuan?

user3487
sumber
2
Ini benar-benar sebuah komentar, bukan jawaban untuk pertanyaan itu. Silakan gunakan "tambahkan komentar" untuk meninggalkan umpan balik untuk penulis.
Renan
@Renan "Ini benar-benar komentar" Mungkin tidak disengaja, tapi lucu, terlepas dari itu. +1 untuk mencerahkan hari saya dengan tautologi. sunting: Saya baru menyadari ini mungkin dianggap sarkastik. Saya tidak bermaksud seperti itu.
root
0

busybox devmem

busybox devmemadalah versi pilihan saya devmem2yang disebutkan di: /unix//a/134661/32558

devmem2datang dalam banyak versi yang berbeda dari beberapa upstreams, terutama Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Tetapi utilitas Busybox lebih bersifat kanonik, tersedia secara luas dan dipelihara.

Misalnya, devmem2ditolak dari Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (tetapi paket Ubuntu dibuat tanpa harus dilakukan).

Anda bisa mendapatkannya di Ubuntu dengan:

sudo apt-get install busybox

Penggunaan: baca 4 byte dari alamat fisik 0x12345678:

sudo busybox devmem 0x12345678

Tulis 0x9abcdef0ke alamat itu:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Berikut adalah beberapa cara keren untuk menguji devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
0

Ada utilitas bernama pcimem ( https://github.com/billfarrow/pcimem )

Anda dapat menggunakannya untuk membaca dan menulis ke / dari perangkat pci.

simba
sumber