Có thể lấy thông tin cho cây thiết bị bằng cách sử dụng / sys của kernel đang chạy không?


20

Thông thường cho các hệ thống cánh tay, cây thiết bị cung cấp thông tin phần cứng cho kernel (Linux). Các cây thiết bị này tồn tại dưới dạng tệp dts (nguồn cây thiết bị) được biên dịch và tải vào kernel. Vấn đề là tôi không có quyền truy cập vào một dtstập tin như vậy , thậm chí không có một dtbtập tin.

Tôi có quyền truy cập vào /sys/proctrên máy và tôi muốn hỏi liệu điều đó có cho phép tôi "đoán các giá trị chính xác" được sử dụng trong một dts không?

Ngoài ra câu trả lời tiềm năng có thể làm nổi bật thêm khía cạnh nếu câu trả lời cho câu hỏi này cũng phụ thuộc vào việc giao diện cây thiết bị có được sử dụng ở vị trí đầu tiên hay không (ví dụ: một dtbđược tạo và cung cấp cho kernel) thay vì một số hack nữa "chúng tôi chỉ đơn giản chuyển hướng từ vanilla và vá kernel để giải quyết vấn đề thông tin thiết bị cho kernel của chúng ta "-solution?


Bạn có quyền truy cập vào hình ảnh khởi động? Bạn có thể trích xuất cây thiết bị từ đó. Tôi có thể giúp.
phk

Câu trả lời:


27

/proc/device-tree hoặc là /sys/firmware/devicetree/base

Tôi nghĩ cả hai đều là bí danh, /sys/firmware/devicetree/basecó khả năng là sự lựa chọn tốt hơn sau khi thuần hóa /proc.

Sau đó, bạn có thể truy cập các thuộc tính dts từ các tệp:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

Định dạng đầu ra cho số nguyên là nhị phân, do đó hexdumplà cần thiết.

dtc -I fs

Nhận một cây thiết bị đầy đủ từ hệ thống tập tin:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

xuất các dts đến thiết bị xuất chuẩn.

Xem thêm: Cách liệt kê kernel Device Tree | Trao đổi ngăn xếp Unix & Linux

dtc trong Buildroot

Buildroot có một BR2_PACKAGE_DTC=ycấu hình để đặtdtc bên trong hệ thống tập tin gốc.

QEMU -machine dumpdtb

Nếu bạn đang chạy Linux bên trong QEMU, QEMU sẽ tự động tạo DTB nếu bạn không cung cấp cho nó một cách rõ ràng -dtbvà do đó, nó cũng có thể kết xuất trực tiếp với:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

như đã đề cập tại: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

Đã thử nghiệm với thiết lập QEMU + Buildroot này trên kernel Linux v4.19 arm64.


4

Tôi không chắc chắn nếu tôi hiểu bạn chính xác.

Nếu bạn đang sử dụng hệ thống khởi động bằng dtb, cây thiết bị của bạn sẽ có thể truy cập được trong debugfs.

Bạn cũng có thể thử các công cụ dtc của Pantelis Antoniou, chúng bao gồm fdtdump và fdtget in dts từ một blob.

Nếu bạn hoàn toàn không có cây thiết bị và không khởi động được từ dtb, thì bạn sẽ phải tự mình đi qua mã máy và thêm tất cả các thuộc tính và nút cụ thể của thiết bị vào dts của bạn. Không có cây thiết bị "tổng hợp" nào được tạo cho một khởi động như vậy. Điểm bắt đầu sẽ là một máy hoặc cha mẹ tương tự và sau đó làm việc theo cách của bạn theo hệ thống.


Cảm ơn, để làm rõ. Có một cơ hội mà các dtbcó thể truy cập thông qua thông qua debugfs chưa mà sẽ dựa vào CONFIG_DEBUG_FStrong .configvà thậm chí nếu bộ vẫn còn trên chỉ là ý thích rằng họ thực sự sử dụng một dtbđể bắt đầu, để tôi đọc quyền này? Vì vậy, với một số "xui xẻo", họ đã không làm và sử dụng một số loại vá nhân trực tiếp được cài đặt trên giao diện cây thiết bị, đúng không? Vì vậy, điều này có nghĩa là lần thay thế cuối cùng là mã máy, vì chúng vi phạm GPLv2 và đóng nguồn nhân, phải không?
nhân

Có và có cho hai người đầu tiên. Cuối cùng, IANAL, nhưng vòm máy / ??? / mach - ??? / bảng - ???. C sẽ chứa các thiết bị đặc biệt hiện diện cho một máy trong các hạt nhân cũ. Điều này cần được bảo hiểm bởi GPL và phải có sẵn cho một khoản phí. Trình điều khiển thiết bị cá nhân có thể là nguồn đóng, không có vi phạm ở đó.
FRob
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.