일반적으로 arm 시스템의 경우 장치 트리는 하드웨어 정보를 커널 (Linux)에 제공합니다. 이러한 장치 트리는 컴파일되어 커널에로드되는 dts (장치 트리 소스) 파일로 존재합니다. 문제는 그러한 dts
파일에 액세스 할 수 없으며 파일에도 액세스 할 수 없다는 것 dtb
입니다.
나는에 액세스 할 수 있습니다 /sys
및 /proc
시스템에서와 나는 그 날은 DTS에서 사용되는 “올바른 값을 추측”할 수 있도록 것인지 물어보고 싶은게?
또한이 질문에 대한 답변이 장치 트리 인터페이스가 처음에 사용되었는지 (즉 dtb
, 커널에 제공되어 커널에 제공 되었는가 ) 더 많은 해킹 대신 “바닐라에서 우회하는 경우”에 따라 잠재적 인 답변이 측면을 추가로 강조 할 수 있습니다. 커널 전용 장치 정보 문제를 해결하기 위해 커널을 패치하십시오. “-solution?
답변
/proc/device-tree
또는 /sys/firmware/devicetree/base
나는 둘 다 별칭이라고 생각 /sys/firmware/devicetree/base
하고 길들이기 후에 더 나은 선택 일 것입니다 /proc
.
그런 다음 파일에서 dts 속성에 액세스 할 수 있습니다.
hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency
정수의 출력 형식은 이진이므로 hexdump
필요합니다.
dtc -I fs
파일 시스템에서 전체 장치 트리를 가져옵니다.
sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base
dts를 stdout으로 출력합니다.
참조 : 커널 장치 트리를 나열하는 방법 | 유닉스 및 리눅스 스택 교환
dtc
Buildroot에서
Buildroot에는 루트 파일 시스템 안에 BR2_PACKAGE_DTC=y
넣을 수 있는 설정이 dtc
있습니다.
QEMU -machine dumpdtb
QEMU 내에서 Linux를 실행하는 경우 QEMU는으로 명시 적으로 제공하지 않으면 DTB를 자동으로 생성 -dtb
하므로 다음과 같이 직접 DTB 를 덤프 할 수도 있습니다.
qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb
https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html 에서 언급했듯이
Linux 커널 v4.19 arm64 에서이 QEMU + Buildroot 설정 으로 테스트했습니다 .
답변
내가 당신을 올바르게 이해하는지 잘 모르겠습니다.
dtb를 사용하여 부팅 한 시스템을 사용하는 경우 debugfs 내에서 장치 트리에 액세스 할 수 있어야합니다.
Pantelis Antoniou의 dtc 도구를 사용해 볼 수도 있습니다. 여기에는 bdt에서 dts를 인쇄하는 fdtdump 및 fdtget이 포함되어 있습니다.
장치 트리가없고 dtb에서 부팅하지 않았다면 머신 코드를 직접 살펴보고 모든 장치 별 속성과 노드를 dts에 추가해야합니다. 이러한 부팅에 대해 생성 된 “합성”장치 트리가 없습니다. 출발점은 비슷한 기계 또는 부모이며 시스템별로 시스템을 작동시킵니다.