안녕하세요.
고도리입니다.
근래, ARM 커널이 devicetree가 적용되기 시작하였습니다.
대략 3.4 버전서부터 적용이 실제로 되기 시작하였습니다.
http://devicetree.org/Device_Tree_Usage
여기를 보시면 관련 정보가 나와 있을겁니다.
그리고, 여기에 보시면 ARM에 적용된 것이 있을겁니다.
http://elinux.org/images/d/d8/Vwool-device_trees_arm.pdf
DeviceTree 문서는 현재 없을 겁니다. 아마도 앞으로도 없을거라는데 100원 겁니다...^^
현재, 리눅스 문서들은 대부분 confidential이라고 보시면 됩니다.
절때루 공개하지 않고, 그들만의 리그로 되어 있습니다.
유일하게 공개되는 부분은 linux conference에서 가끔 공개가 됩니다.
DeviceTree usage는 작년에 대부분 봤었고, 가장 먼저 적용된 상용보드가
Arndale board이다보니 좀 보기는 했습니다. 물론, ppc때 쫌 보기는 했고요....^^
일단, 좋은 점은 코드량이 엄청 줄어듭니다.
그리고, 코드의 복잡도가 줄어듭니다.
이유는 기존에 resource를 표현하던 Device 설명이 전부 script로 되기 때문입니다.
대신 문제는 있습니다.
이를 처리하기 위하여 부트로더에서 해야할 일이 늘었습니다.
기존에 kernel, ramdisk 만 건네줘야 했으나, devicetree를 사용하는데
사용되는 dtb 파일을 건네줘야 합니다.
dtb 파일은 DeviceTreeBlob의 약자입니다.
커널 소스의 arch/arm/boot/dts 디렉토리에 보시면
.dts 파일들이 있습니다.
이 파일들을 DeviceTreeCompiler가 동작되면서 DTB 파일을 만듭니다.
=========================================================
1. 커널 컴파일 순서는 다음과 같습니다.
make zImage 혹은 make uImage
make dtbs 혹은 make exynos5250-arndale.dtb
2. ramdisk를 사용할 경우는 u-boot로 다음과 같이 세가지를 로딩합니다.
주의: u-boot는 dtb를 지원하도록 컴파일 되어 있어야 합니다.
1> u-boot에서 다음과 같이 입력합니다.
삼성칩의 경우는 dnw를 이용해서 다운로드 하시면 됩니다.
dnw 40800000
dnw 41000000
dnw 43000000
setenv bootargs "root=/dev/ram0 rw console=ttySAC2,115200"
커널, ramdisk, dtb
2> 호스트에서는 이렇게 컴파일된 결과물을 download합니다.
smdk-usbdl -f arch/arm/boot/uImage
smdk-usbdl -f arndale-ramdisk.img
smdk-usbdl -f arch/arm/boot/exynos5250-arndale.dtb
3> u-boot에서 이렇게 부팅을 합니다.
bootm 40800000 41000000 43000000
이렇게 하시면 되고
4> ramdisk가 없을 때는 ramdisk를 빼고 다운로드 하고
bootm 40800000 - 43000000
이렇게 부팅하시면 됩니다.
=========================================================
대략의 순서는 이렇고....devicetree를 쓰면 안좋은 점은 다음과 같다라고
개인적으로 생각합니다.
1. devicetree script 사용법을 알아야 한다.
2. devicetree가 device에 대한 설명을 script로 넘기는 것이므로
이를 이용하는 driver코드가 devicetree를 지원하도록 해야한다.
3. 기존에 devicetree를 지원하지 않는 코드를 devicetree에 붙일
경우 쉽지 않다. --> 이건 해보면 앱니다....쩝
4. 부트로더도 또 봐야한다. devicetree 지원한다라고 한다면
u-boot의 .its 파일도 봐야한다. 이는 Flattened Image Tree(FIT)와 관련이 있다.
5. devicetree를 parsing해야하므로, 커널 부팅에 1~2초 정도 더 걸린다.
(Exynos5250으로 테스트 했을 경우 2초 정도 더 걸린 듯 합니다)
6. 점점 더 어려워 진다.
지금 리눅스 공부를 시작하시는 분들에게는 이 것도 난관이 될 듯 합니다.
여하튼 아직까지는 꽤 난제이지 않나 싶습니다.
참, 써놓고 보니.....안좋다는 얘기만 했네요....^^.
익숙해지면 코드관리가 쉬운 점이 장점입니다.
다만 과도기적으로 대부분의 코드가 devicetree를 지원하지 않도록 되어 있을 경우는
애 먹을 수는 있다라고 생각합니다.
전부 devicetree로 건너가야만 편하게 쓸 수 있다는 얘기일 듯 싶네요.
리눅스를 가지고 밥먹고 사는 사람 입장에서는 좋은 쪽이라고 해야할지 아닐지....애매하네요.
쩝...