디바이스트리

Devicetree

컴퓨팅에서 디바이스 트리(디바이스 트리)는 특정 컴퓨터의 하드웨어 컴포넌트를 기술하는 데이터 구조입니다.이것에 의해, operating system의 커널이 CPUCPU, 메모리, 버스, 및 내장 주변기기를 포함한 이러한 컴포넌트를 사용하고 관리할 수 있게 됩니다.

디바이스 트리는 Open Firmware 프로젝트를 통해 SPARC 기반 컴퓨터에서 파생되었습니다.현재의 Devicetree 사양은[1] 소규모 시스템을 대상으로 하고 있지만 일부 서버급 시스템(를 들어 Power Architecture Platform Reference에 기재되어 있는 시스템)에서 사용되고 있습니다.

x86 아키텍처를 사용하는 개인용 컴퓨터는 일반적으로 디바이스 트리를 사용하지 않고 다양한 자동 구성 프로토콜(ACPI 등)에 의존하여 하드웨어를 검색합니다.디바이스 트리를 사용하는 시스템은 일반적으로 정적 디바이스 트리(ROM에 저장되어 있을 가능성이 있음)를 운영체제에 전달하지만 부팅 초기 단계에서 디바이스 트리를 생성할 수도 있습니다.를 들어 Das U-Bootkexec은 새 운영 체제를 시작할 때 디바이스 트리를 전달할 수 있습니다.디바이스 트리를 지원하지 않는 부트로더가 있는 시스템에서는 운영체제와 함께 스태틱디바이스 트리를 설치할 수 있습니다.Linux 커널은 이 방법을 지원합니다.

Devicetree 사양은 현재 devicetree.org이라는 커뮤니티에 의해 관리되고 있으며, 특히 Linaro 및 Arm과 관련되어 있습니다.

디바이스 트리 형식

디바이스 트리는 내부적으로는 이름 있는 노드 및 속성트리이기 때문에 모든 종류의 데이터를 유지할 수 있습니다.노드에는 속성 및 하위 노드가 포함되며 속성은 이름과 값의 쌍입니다.

디바이스 트리에는, operating system의 바이너리 형식과 편집과 관리를 용이하게 [1]하는 텍스트 형식이 있습니다.

Linux에서의 사용방법

올바른 디바이스 트리를 지정하면 컴파일된 동일한 커널이 더 넓은 아키텍처 패밀리 내에서 서로 다른 하드웨어 구성을 지원할 수 있습니다.ARC, ARM, C6x, H8/300, MicroBlaze, MIPS, NDS32, Nios II, OpenRISC, PowerPC, RISC-V, SuperHXtensa 아키텍처용 Linux 커널은 디바이스 트리 정보를 읽습니다.따라서 ARM, 새로운 디바이스는 모두 필수입니다.이는 역사적으로 서로 다른 ARM 보드를 지원하기 위해 만들어진 수많은 포크(Linux 및 Das U-Boot)에 대한 해결책으로 볼 수 있습니다.그 목적은 하드웨어 설명의 상당 부분을 커널 바이너리에서 컴파일된 디바이스 트리 블롭으로 이동하는 것입니다.이 디바이스 트리 블롭은 부트 로더에 의해 커널에 전달되며 커널 [2]내의 보드 고유의 C 소스 파일 및 컴파일 시간 옵션을 대체하는 것입니다.

이 파일은 Devicetree 소스 파일(.dts)로 지정되며 Devicetree 컴파일러(DTC)를 통해 Devicetree Blob 또는 디바이스 트리 이진 파일(.dtb)로 컴파일됩니다.디바이스 트리 소스 파일에는 디바이스 트리 [3][1]소스라고 하는 다른 파일이 포함될 수 있습니다.

ARM 기반의 Linux 디스트리뷰션에서는 부트 로더를 포함하는 것이 관례로 되어 있습니다.부트 로더는 특정 보드(예: Lasberry Pi 또는 Hackberry A10)용으로 커스터마이즈 되어 있습니다.이로 인해 Linux 디스트리뷰션 작성자에게 문제가 생겼습니다.이는 운영체제의 일부를 각 보드 모델별로 컴파일하거나 새로운 보드를 지원하기 위해 업데이트해야 하기 때문입니다.그러나 일부 최신 SoC(예: Freescale i)가 있습니다.MX6)는 운영체제와는 다른 칩에 디바이스 트리를 탑재한 [4]벤더 제공 부트 로더를 탑재하고 있습니다.

유사한 목적으로 사용되는 독자적인 컨피규레이션파일 형식인 FEX 파일 [5]형식은 Allwinner SoC사실상의 표준입니다.

Windows에서의 사용방법

Windows 에서는, ACPI 디바이스 트리는 플러그 앤 플레이 매니저에 의해서 유지 관리되어 디바이스를 안전하게 [6]이젝트할 수 있는지를 평가합니다.

Devicetree Source(DTS) 형식의 예:

현재 시각/dts-v1/;  / {     사회 복지 기관 {         flash_controller: 플래시 컨트롤러@4001e000 {             조정하다 = < >0x4001e000 0x1000>;             flash0: 섬광@0 {                 라벨. = "SOC_FLASH";                 소거 블록 = < >4096>;             };         };     }; }; 

위의 예에서 행은/dts-v1/;는 DTS 구문의 버전1을 나타냅니다.

트리에는 4개의 노드가 있습니다./(루트 노드),soc('System on a Chip'의 약자),flash-controller@4001e000그리고.flash@0(플래시 컨트롤러를 사용하는 플래시의 일부).이들 노드명 외에 후자의 2개의 노드에는 라벨이 붙어 있습니다. flash_controller그리고.flash0각각 다음과 같다.

후자의 2개의 노드에는 이름/값 쌍을 나타내는 속성이 있습니다.소유물label문자열 유형, 속성 있음erase-block정수 유형 및 속성이 있습니다.reg는 정수 배열(32비트 부호 없는 값)입니다.속성 값은 디바이스 트리의 다른 노드를 팬들에 의해 참조할 수 있습니다.라벨이 있는 노드의 팬들flash0라고 쓰여질 것이다&flash0팬들 역시 32비트 값입니다.

"at" 기호 뒤에 있는 노드 이름의 일부(@)는 유닛 주소입니다.단위 주소는 상위 노드의 주소 공간에 있는 노드의 주소를 지정합니다.

위의 트리는 표준 DTC 컴파일러에서 바이너리 DTB 형식 또는 어셈블리로 컴파일할 수 있습니다.그러나 Zephyr RTOS에서는 DTS 파일이 C 헤더 파일(.h)로 컴파일되어 빌드 시스템이 특정 [7]보드의 코드를 컴파일하기 위해 사용됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c "Devicetree specification" (PDF). Release v0.3. devicetree.org. 2020-02-13.
  2. ^ a b "ARM SoC Linux support checklist" (PDF).
  3. ^ Simmonds, Chris (2017). Mastering embedded Linux programming : unleash the full potential of embedded Linux (Second ed.). Birmingham, UK. ISBN 978-1-78728-885-0. OCLC 995052708.
  4. ^ "u-boot update for Boundary Devices' boards".
  5. ^ "Fex Guide". linux-sunxi.org. 2014-05-30. Retrieved 2014-06-12.
  6. ^ Hudek, Ted; Sherer, Tim (2017-06-16). "Device Tree - Windows drivers". docs.microsoft.com. Microsoft. Retrieved 2020-02-08.{{cite web}}: CS1 maint :url-status (링크)
  7. ^ "Introduction to devicetree – Zephyr Project Documentation". 2.6.0. Zephyr Project. 2021-06-05.

외부 링크