기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요.
요새 연구실에서 Arndale 보드로
Xen ARM과 ARM의 Hypervisor Extesion쪽을 공부하고 있습니다.
요즘 커널에서는 Kernel 빌드시에 dtb도 같이 빌드하고
부팅시 dtb를 통해 Kernel에게 하드웨어 정보를 전달하는걸로 알고 있습니다.
Anrdale의 u-boot에서
'bootargs = Kernel Address - dtb Address' 사용하고 있습니다.
dts파일을 열어보면 트리형태의 자료구조라는거는 알겠는데...
이걸 왜 컴파일하여 binary형태로 만드는건지 잘 모르겠고,
이 바이너리 실행을 통해?
Kernel에게 하드웨어 정보를 전달한다는 개념이 잘 이해가 안됩니다.
또한 궁금한점은
dtb를 이용하기 전의 예전 Kernel에서는 디바이스 정보나 CPU Core정보같은
하드웨어 정보를 어떤식으로 얻는지 알고 싶습니다.
감사합니다.
1. parser가 내장되어 있습니다.
2. dtb를 사용하는 이유는 코드의 유지보수 때문이라고 얘기합니다.
다만 실제를 보면.....드라이버 코드는 parser와 연결이 되어 있고, 이 parser는 dtb에서 관련 정보를 받아서
driver코드에 연결해 주는 역할만 합니다.
==> 쉽죠?....ㅎㅎ, 하지만, 실제로는 그 연결부분이 보이지 않기 때문에 꽤 어려운 내용이고
서로 어떤 부분을 어떻게 parsing하는지에 대한 부분을 일일이 알아야 하기 때문에 또 하나의
언어를 공부하는 것과 같다라고 보시면 됩니다.
----------------------
dtb를 만드는 dts를 보시면 관련 cpu에 대한 언급이 있습니다.
이 cpu를 string으로 받아서 적절하게 cpu chip id를 읽은 후에 비교를 해서
관련 코드를 셋업합니다.
그리고, 제가 간단하게 써 놓은 글도 참고가 되실겁니다.
저도 dtb이해 하는데 무척 애먹은 기억이 있네요.
고도리님 말씀대로 코드 유지보수 때문인데 개발자 입장에서는...유지보수가 되는건지......
예전에는 platform device에 등록을 할려면 일일이 작없을 해주었지만 이제 dtb에 넣어주기만 하면
sysfs devices에 등록되어지는 부분은 정말 편리 하긴 하더군요,,(노드 작업을 해주어야 되지만....)
바이너리로 안만들면 어떻게? XML파서라도 커널에 내장시켜야 할까요?