คำสั่ง Shell เพื่ออ่านการลงทะเบียนอุปกรณ์?


18

บนคอมพิวเตอร์บอร์ดเดียวที่ใช้ Linux มีวิธีอ่านเนื้อหาของการกำหนดค่าอุปกรณ์ที่ลงทะเบียนซึ่งควบคุมฮาร์ดแวร์หรือไม่ inw()ฉันคิดว่ามันจะเป็นเสื้อคลุมสำหรับ

ฉันกำลังมองหาบางสิ่งที่เทียบเท่ากับmdคำสั่งการถ่ายโอนข้อมูลหน่วยความจำ U-boot ( ) เพื่อใช้ในบริบทของการดีบักไดรเวอร์


2
สิ่งนี้อาจช่วยได้ แต่อย่าลืมอ่านกระทู้ทั้งหมด: lists.arm.linux.org.uk/lurker/message/ ......
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

มีการอัพเดทอะไรบ้าง ??
Sen

@Sen: เชิงลบ ฉันยังคงนิ่งงัน ฉันอ่านเธรดที่เชื่อมโยงซึ่งแสดงให้เห็นว่า inw () ไม่ได้ทำสิ่งที่ฉันคิด: "inb () และเพื่อน ๆ เป็นเพียงการจำลองการกำหนดพื้นที่ที่อยู่ PCI และ ISA IO" ฉันใช้ออสซิลโลสโคปและอ่านรหัสไดรเวอร์เคอร์เนลมากมายเป็นตัวเลือกที่ดีที่สุดของฉัน
pingswept

คำตอบ:


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 แต่แทนที่จะชี้ไปที่ RAM การ์ดกราฟิกของคุณอาจลองชี้ไปที่อุปกรณ์ที่ลงทะเบียน
LawrenceC

0

การกำหนดค่าอุปกรณ์ PCI ใน / sys / bus / pci / devices / * / config ของความช่วยเหลือใด ๆ ?


2
นี่เป็นความคิดเห็นจริงๆไม่ใช่คำตอบสำหรับคำถาม กรุณาใช้ "เพิ่มความคิดเห็น" เพื่อแสดงความคิดเห็นสำหรับผู้เขียน
Renan

@ Renan "นี่เป็นความเห็นจริงๆ" อาจเป็นไปได้โดยไม่ตั้งใจ แต่ก็ตลกไม่ว่าอะไรก็ตาม +1 เพื่อเพิ่มความสว่างให้วันของฉันด้วยการพูดซ้ำซาก แก้ไข: ฉันเพิ่งรู้ว่าสิ่งนี้อาจออกมาประชดประชัน ฉันไม่ได้หมายความอย่างนั้น
รูต

0

busybox devmem

busybox devmemเป็นเวอร์ชันที่ฉันต้องการdevmem2ซึ่งมีการกล่าวถึงที่: /unix//a/134661/32558

devmem2มาในรุ่นที่แตกต่างจากหลาย upstreams สะดุดตา 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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.