우우… 한 2주 넘게 계속 문서 보면서 공부하고, 샘플 소스 보고했더니 머리가 다 아프다=_=
그래도 아직 잘 모르겠당;;;;
일단 이제 까지의 내용을 정리해 보면…
최초로 할 일은 역시 BSP를 만드는 일이다.
BSP라는건 타겟 보드에서 Windows CE를 돌리는데 필요한 것들을 OEM이 구현해 놓은 것으로…
bootloader, OAL, Divece Driver, 설정 파일 등으로 이루어 진다.
Windows CE 라는게 소스를 다 공개하지 않는 이상. 환경이 다른 수많은 타겟 보드에 올라가게 하기 위해서는
역시나 뛰어난 추상화와 계층화로 칩이나 보드에 따라 달라지는 부분들만 분리 시켜서 각 OEM이 그 것들을
원하는 대로 수정하게 하는것. 바로 그 부분. OEM Layer에 해당하는 것이 BSP다.
bootloader라는 것은 알다시피 타겟이 부팅되면 최초로 실행되어 OS를 로딩해 주는 부분. 문서상으로 봤을때는,
개발시에 타겟으로 OS를 다운로드하고 램으로 로딩하는 역할을 해서 개발을 도와주며, 최종 제품에는 포함되지
않을 수도 있다는 것 같은데… 그건 잘 모르겠다.
그 다음. OAL. 대충 Windows CE의 서비스나 기능 중에서 타겟에 따라 변경해 주어야 하는 함수들의 집합이라고 할까..
근데 이게 상당히 골 때리는게 4.0에서 5.0으로 넘어 오면서 함수 구성이 좀 바뀐거 같은데…
문서가 반영을 못하는 듯 하다-_-;
머.. 암튼 아무리 타겟마다 달라진다해도.. 그건 일부에 불과 하고 로직이 같은 경우가 많을 터…
어떤 타겟에서든 동일한 로직이 있고, 칩이 같은데 한해서 동일한 로직이 있겠지.
나머지는 보드 구성에 따라 달라지는 부분이 있을테고…
기존에는 아마 이런 부분들을 모두 복사해온 다음에 그 다른 부분만 고쳐서 쓴거 같은데…
이번에는 각각 구분해서 나눠진거 같다.
전체적으로 같이 쓰는 루틴이 담기 함수가 있고 거기서,
칩마다 다른 함수를 부르고…
거기서 다시 보드 마다 다른 함수를 부르고..
머.. 이런식..
그래서 같은 칩을 쓴 타겟에 대한 BSP가 있을 경우엔 일이 상당히 줄어 들게 되는 듯…
( 머.. 어차피 그전에도 일이 적은건 마찬가지네;;; )
암튼…. 문서에도 그렇게 안 나와 있고 누구하나 얘기를 안해줘서 잘 모르겠다만;;-_-;;;
마지막으로 디바이스 드라이버.
머.. 장치마다 구현해 줘야 하는건 당연한 거고… 날 괴롭혔던 것 한가지는.. ISR을 어떻게 할것인가…
즉… 인터럽트가 발생 했을 때.. 해당 하는 디바이스에 맞게 처리를 어떻게 해줄까인데…
혼란 시켰던 것 중에 하나가 ARM 계열은 단일 ISR을 지원한다는것.
즉, 인터럽트가 발생하면 무조건 특정한 함수(OEMInterruptHandler)가 호출된다는것. 그럼 모든 인터럽트에 대한
처리를 여기서 해줘야하나? 그건 아니다.
디바이스 드라이버가 초기화 될때 별도로 인터럽트에 해당하는 ISR을 등록할 수가 있거든.
거기서 등록해 놓으면, OEMInterruptHandler에서 자기가 처리하지 않은 인터럽트에 대해서는 등록된 ISR을
호출해 주도록 하는 것이다. 이 때, IST(Interrupt Service Thread)인가 에서 적당한 처리를 해주게 하기 위해서
논리적 IRQ(sysintr. OEMInit 시에 물리적인 IRQ와 맵핑시킴)과 Event 객체를 등록하기도 한다.
==
음…
일단 오늘은 이정도…