Lệnh Shell để đọc thanh ghi thiết bị?


18

Trên một máy tính bảng đơn chạy Linux, có cách nào để đọc nội dung của các thanh ghi cấu hình thiết bị điều khiển phần cứng không? Tôi nghĩ rằng nó sẽ là một bọc cho inw().

Tôi đang tìm kiếm một cái gì đó tương đương với mdlệnh dump bộ nhớ U-boot , được sử dụng trong bối cảnh gỡ lỗi trình điều khiển.


2
Điều này có thể giúp ích, nhưng hãy chắc chắn đọc toàn bộ chủ đề: list.arm.linux.org.uk/lurker/message/ Kẻ
Gilles 'SO- ngừng trở nên xấu xa'

Bất kỳ cập nhật về điều này ??
Sen

@Sen: Tiêu cực. Tôi vẫn còn bối rối. Tôi đọc luồng được liên kết, điều đó cho thấy rằng inw () không làm những gì tôi nghĩ: "inb () và bạn bè chỉ để mô phỏng không gian địa chỉ IO của PCI và ISA." Tôi đã sử dụng máy hiện sóng và đọc rất nhiều mã trình điều khiển hạt nhân như là lựa chọn tốt nhất tiếp theo của tôi.
pingswept

Câu trả lời:


14

Nếu bạn biết địa chỉ vật lý của thiết bị, bạn có thể sử dụng devmem2.

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

3

Tôi không biết nếu bạn có thể làm điều đó trực tiếp với một hạt nhân vani.

Nhưng bạn nên viết một trình điều khiển đơn giản sử dụng "tệp" trong / Proc để xuất nội dung bộ nhớ mà bạn muốn xem.

Sau đó, bạn có thể đọc "tệp" của mình bằng một tập lệnh đơn giản và có quyền truy cập vào bộ nhớ đó.


1

Tôi có thể hoàn toàn và hoàn toàn sai về điều này, và tha thứ cho tôi nếu tôi, nhưng nếu lệnh md của uboot chỉ đọc các địa chỉ bộ nhớ được ánh xạ tới các thanh ghi thiết bị và trả lại nội dung cho bạn, bạn không thể đọc những vị trí bộ nhớ tương tự bằng cách sử dụng thông minh của dd if=/dev/mem ...?


Tôi nghĩ rằng tuyến đường này có tiềm năng, nhưng dường như có một vấn đề. Lệnh này được thực thi dưới dạng root: "dd if = / dev / mem bs = 1 Skip = 10000 Count = 512" đưa ra lỗi này: "dd: / dev / mem: Địa chỉ xấu" Tôi không chắc điều đó có nghĩa là gì. Google nói với tôi rằng đó là điều cần làm với những thay đổi được giới thiệu trong kernel 2.6, nhưng tôi chưa hiểu đủ về điều này để giải quyết vấn đề này.
pingswept

1
Có thể thử sử dụng trình điều khiển mtdblock. Hãy xem điều này: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Nhưng thay vì chỉ nó vào RAM card đồ họa của bạn, có thể thử trỏ nó vào thanh ghi thiết bị.
LawrenceC

0

Cấu hình thiết bị PCI trong / sys / bus / pci / thiết bị / * / config có giúp được gì không?


2
Đây thực sự là một bình luận, không phải là một câu trả lời cho câu hỏi. Vui lòng sử dụng "thêm nhận xét" để để lại phản hồi cho tác giả.
Renan

@Renan "Đây thực sự là một bình luận" Có lẽ vô tình, nhưng buồn cười, bất kể. +1 để làm sáng ngày của tôi với tautology. chỉnh sửa: Tôi chỉ nhận ra điều này có thể đi ra như mỉa mai. Tôi không có ý đó.
root

0

busybox devmem

busybox devmemlà phiên bản ưa thích của tôi devmem2đã được đề cập tại: /unix//a/134661/32558

devmem2đến từ nhiều phiên bản khác nhau từ một số thượng nguồn, đáng chú ý là Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Nhưng một tiện ích Busybox là hợp quy hơn, có sẵn rộng rãi và được duy trì.

Ví dụ: devmem2đã bị từ chối từ Debian: https://bugs.debian.org/cgi-bin/orpreport.cgi?orms=595805 (nhưng một gói Ubuntu đã được tạo ra dù sao).

Bạn có thể lấy nó trong Ubuntu với:

sudo apt-get install busybox

Cách sử dụng: đọc 4 byte từ địa chỉ vật lý 0x12345678:

sudo busybox devmem 0x12345678

Viết 0x9abcdef0vào địa chỉ đó:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Dưới đây là một số cách thú vị để kiểm tra devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.