일반적으로 무기 시스템의 경우장치 트리커널(Linux)에 하드웨어 정보를 제공합니다. 이러한 장치 트리는 컴파일되어 커널에 로드되는 dts(장치 트리 소스) 파일 형식으로 존재합니다. 문제는 내가 그런 dts
파일 에 접근할 수 없다는 점이다 dtb
. 심지어 파일에도 접근할 수 없다.
/sys
접근 권한 이 있고 /proc
컴퓨터에 있습니다. 이것이 dts에서 사용할 "올바른 값을 추측"할 수 있는지 묻고 싶습니다.
이 질문에 대한 대답이 더 해킹적인 것보다는 장치 트리 인터페이스가 처음에 사용되는지(즉, dtb
생성되어 커널에 제공되는지)에 따라 달라지는 경우 "우리는 장치 정보 문제를 해결하기 위해 방금 바닐라에서 이동하여 커널을 패치했습니다. 그것은 우리 커널에만 적용됩니다." - 해결책은 무엇입니까?
답변1
/proc/device-tree
또는/sys/firmware/devicetree/base
/proc/device-tree
/sys/firmware/devicetree/base
는 및에 대한 심볼릭 링크입니다.커널 문서에 따르면사용자 모드는 다음을 주장해야 합니다 /proc/device-tree
.
사용자 공간은 /sys/firmware/devicetree/base 경로를 직접 사용해서는 안 되며, /proc/device-tree 심볼릭 링크를 따라야 합니다. 절대 경로는 향후 변경될 수 있지만 기호 링크는 안정적인 ABI입니다.
그런 다음 파일에서 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으로 출력합니다.
또한보십시오:커널 장치 트리를 나열하는 방법 | Unix 및 Linux 스택 교환
dtc
빌드 루트 디렉터리에
Buildroot에는 루트 파일 시스템 BR2_PACKAGE_DTC=y
에 넣을 수 있는 구성이 있습니다.dtc
QEMU-machine dumpdtb
QEMU에서 Linux를 실행하는 경우 QEMU는 명시적으로 지정하지 않으면 -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
시험용이 QEMU + Buildroot 설정Linux 커널 v4.19 arm64.
감사해요/proc/device-tree
Harry Tsai는 커널 문서에서 이것이 사용자 영역에서 선호되는 선택이라고 지적합니다 ..
답변2
내 이해가 맞는지 잘 모르겠습니다.
dtb로 부팅하는 시스템을 사용하는 경우 debugfs 내에서 장치 트리에 액세스할 수 있어야 합니다.
blob에서 dt를 인쇄하는 fdtdump 및 fdtget을 포함하는 Pantelis Antoniou의 dtc 도구를 사용해 볼 수도 있습니다.
장치 트리가 전혀 없고 dtb에서 부팅하지 않는 경우 기계 코드를 직접 살펴보고 모든 장치 관련 속성과 노드를 dts에 추가해야 합니다. 이 유형의 부팅에는 "합성" 장치 트리가 생성되지 않습니다. 시작점은 유사한 시스템이거나 상위 시스템일 수 있으며 시스템별로 작업할 수 있습니다.