11.09.2006

Difference #4: Kernel / OAL Separation

CE6 有一項對OEM而言,很大的進步, 但對application developers 來說沒有影響.
在 CE5 , kernel 和OAL 是Link 在一起,成 nk.exe.
CE6 將二者分開成 oal.exe (which ends up getting renamed to nk.exe) 和 kernel.dll.
另外 Kernel Independent Transport Layer (KITL) 也獨立成 kitl.dll.
這樣的改變要是為了讓Update 更方便,
以往當MS release一個kernel patch,OEM 必須要重新link整個nk.exe.
現在 OEM 只要換掉image中的 kernel.dll 就好了.
另外一個好處是,統一規定了 kernel, OAL 和 KITL 間的介面.
這三個components藉由交換 function pointers ,variable values table 讓彼此呼叫對方提供的function.

We tried to simplify this change as much as possible, to ease porting of CE5 OALs to CE6. We hid the existence of the function pointer tables inside wrapper functions that the OAL can use, so that exactly the same set of functions are available to the OAL. Anecdotal experience from our beta partners said that BSP porting to CE6 took them mostly between one day and one month. Travis Hobrla, a member of our BSP team, developed an awesome demo for MEDC 2006 (Mobile & Embedded DevCon) where he ported the CE5 CEPC OAL to CE6 in about 15 minutes. If you are an OEM, your experiences may vary, but we don’t anticipate it being too painful. It was our goal to make it an easy port. The main area where people will have to make big changes is if their OAL called kernel APIs that we did not intend to expose to the OAL. Since in CE5 the kernel and OAL were linked together, some people found that they could call kernel functions if they knew the function signatures (which they could get from our shared source code). In CE6 those people will have to move that functionality out of the OAL, into a kernel mode driver.

沒有留言: