■ 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!!




※ 내용은 지속 작성중이며 추가하는 상태입니다.




Posted by 시크한공돌이
,