1 Introduction
디바이스 트리는 시스템의 물리적인 하드웨어를 기술하는 데 사용되는 트리 구조체이다. 트리의 각 노드는 디바이스가 나타내는 특성을 기술한다. 필연적으로 클라이언트 프로그램에서 동적으로 감지하거나 발견할 수 없는 시스템의 디바이스 정보를 기술하는 것이 디바이스 트리의 목적이다. 예를 들어, PCI 호스트는 연결된 디바이스를 조사(probe)하고 감지할 수 있다. 따라서 PCI 디바이스를 기술하는 디바이스 트리 노드가 꼭 필요한 것은 아니다. 그러나 조사(probe)하여 감지할 수 없는 경우, 시스템의 PCI 호스트 브리지를 기술하기 위해 디바이스 노드가 필요하다.
디바이스 트리가 등장하기 전에, 커널에는 디바이스 전용 코드가 포함되어 있었다. I2C 주변 장치의 주소 수정과 같은 작은 변경 사항은, 커널 이미지의 재컴파일을 실행하도록 강제한다.
부트 로더(예로 U-Boot)는 단일 바이너리인 커널 이미지를 로드하고 실행한다.
디바이스 트리 이전에는, 복잡성을 줄여서 소량의 정보를 커널에 전달하려는 여러 시도가 있었다. 부트 로더는 일반적으로 몇 가지 추가 정보를 준비하고, 미리 정의된 레지스터가 가리키는 위치에 있는 시스템 램에 배치한다. 이 정보에는 메모리 크기와 위치, 그리고 IP 주소와 같은 커널 명령줄 정보가 포함된다. 목표는 커널이 하드 코딩된 초기화 기능(예: 하드 코딩된 IP 주소)이 아닌 하드웨어에 대한 구문 분석 가능한 정보를 기반으로 하드웨어를 구성할 수 있도록 하는 것이다.
디바이스 트리를 사용하면, 각 하드웨어 버전에 대한 전용 코드가 더 이상 커널 자체에 필요하지 않다. 대신 코드는 별도의 바이너리인 디바이스 트리 blob에 있다. 훨씬 간단하고 훨씬 작은 디바이스 트리 바이너리를 변경하여, 다른 하드웨어를 대상으로 동일한 커널 이미지를 사용할 수 있다.
다바이스 트리는 커널 이미지에 추가하거나 부트로더를 통해 커널에 전달할 수 있다. 머신 유형은 이제 디바이스 트리 자체에 정의된다. 부트로더는 일부 정보(예: clock 주파수)를 디바이스 트리에 동적으로 추가한 다음 r2(ARM® 아키텍처의 경우)나 r3(Power Architecture®의 경우)을 통해 시스템 메모리에 있는 트리에 대한 포인터를 전달할 수 있다. 그런 다음 커널은 디바이스 트리를 unflatten(평면화, 중첩)하고 구문 분석한다.
'NXP i.MX SoC Family > Device Trees' 카테고리의 다른 글
Introduction to Device Trees - Interrupts (0) | 2022.10.12 |
---|---|
Introduction to Device Trees - Memory mapping and addressing (0) | 2022.10.12 |
Introduction to Device Trees - Syntax (0) | 2022.10.11 |
Introduction to Device Trees - Basic device tree (0) | 2022.10.11 |
Introduction to Device Trees (0) | 2022.10.11 |