실행중인 커널의 / sys를 사용하여 장치 트리에 대한 정보를 얻을 수 있습니까? 이러한 장치 트리는 컴파일되어 커널에로드되는 dts

일반적으로 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에 추가해야합니다. 이러한 부팅에 대해 생성 된 “합성”장치 트리가 없습니다. 출발점은 비슷한 기계 또는 부모이며 시스템별로 시스템을 작동시킵니다.


답변