#궁금? | 리눅스 u-boot DTB 파일이란 무엇인가?(What is DTB [Device Tree Blob (Flat Device Tree)])
시스템/리눅스 시스템 2014. 6. 26. 20:53■ DTB[[Device Tree Blob (Flat Device Tree)]란 무엇인가??
리눅스 부팅 과정을 공부하면서 tizen은 dtb를 이용한 부팅을 한다는 것을 보게되었습니다.
이는 BOOT파티션에 zImage나 uImage와 같이 부팅에 사용되게 되는데요.
지금부터 포스팅 하는 지식은 다음의 informIT 의 글을 보며 작성하도록 하겠습니다.
■ 그렇다면 DTB는?
DTB는 Device Tree Blob (Flat Device Tree)의 약자로 리눅스 포팅(+ U-Boot)에서 여러가지 힘든점 중 하나이다.
DTB는 하나의 데이터베이스(Database)입니다. 이는, 주어진 보드를 대표하는 하드웨어 컴포넌트들입니다. DTB는 IBM OpenFirmware specifications로 부터 왔으며 부트로더에서 커널로 low-level hardware information을 전달시키는 기본 메커니즘으로 선택되었습니다.
DTB를 위한 제일의 요구사항은 U-Boot는 U-Boot안에 헤더 파일로부터 온 커널안의 유사한 헤더 파일과 확실하게 일치하는 보드의 정보 구조체를 커널로 넘겨줘야한다는 것 입니다.
이것은 sync 안에 유지하기하 굉장히 어렵고 잘 변환되지 않습니다. 이것이 flat device tree를 부트로더에서 온 low-level 하드웨어 정보들을 커널로 보내는 하나의 메소드 같이 포함시키는 동기가 되었습니다.
U-Boot나 다른 low-level 펌웨어와 유사하게, DTB를 마스터 하는것에는 하드웨어 단의 완전한 지식이 필요합니다. 인터넷 검색을 통해서 몇개의 device tree에 대해 소개하는 문서들을 찾을 수 있습니다. 정말 좋은 시작 방법은 Denx Software Engineering wiki page를 보는 것입니다. 레퍼런스들은 이 글 아래에 링크되어 있습니다.
시작하기 위해, DTB가 통상의 부트 과정에서 어떻게 사용되는지 보도록 하겠습니다.
아래의 박스는 U-Boot를 이용하는 Porwe Architechture 타겟의 부트 과정을 보여주고 있습니다.
▶ U-Boot에서의 Device Tree Blob과 리눅스를 부팅하는 과정
=> tftp $loadaddr 8548/uImage Speed: 1000, full duplex Using eTSEC0 device TFTP from server 192.168.11.103; our IP address is 192.168.11.18 Filename '8548/uImage'. Load address: 0x600000 Loading: ##################################################### ##################################################### done Bytes transferred = 1838553 (1c0dd9 hex) => tftp $fdtaddr 8548/dtb Speed: 1000, full duplex Using eTSEC0 device TFTP from server 192.168.11.103; our IP address is 192.168.11.18 Filename '8548/dtb'. Load address: 0xc00000 Loading: ## done Bytes transferred = 16384 (4000 hex) => bootm $loadaddr - $fdtaddr ## Booting kernel from Legacy Image at 00600000 ... Image Name: MontaVista Linux 6/2.6.27/freesc Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1838489 Bytes = 1.8 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK ## Flattened Device Tree blob at 00c00000 Booting using the fdt blob at 0xc00000 Uncompressing Kernel Image ... OK Loading Device Tree to 007f9000, end 007fffff ... OK <... Linux begins booting here...> ...and away we go!! |
※ 내용은 지속 작성중이며 추가하는 상태입니다.
'시스템 > 리눅스 시스템' 카테고리의 다른 글
#번외 CMake란 무엇인가? (0) | 2014.06.24 |
---|---|
#1 리눅스 시스템 부팅의 이해 : /sbin/init 프로그램 (0) | 2014.06.06 |