VxWorks驅動移植至SylixOS總結

本文檔描述了將VxWorks中的驅動源碼快速移植至SylixOS中的方法,使用時須要結合SylixOS中的VxWorks兼容層實現。數組

1. 驅動註冊與初始化

1.1 VxWorks中驅動註冊與初始化

1.1.1 初始化函數

VxWorks中大部分函數使用了VxWorks的VxBus結構,對於基於VxBus的驅動結構,一般都定義了以下所示的結構體。函數

LOCAL struct drvBusFuncs xxxDrvFuncs = {
xxxInstInit, /* devInstanceInit */

xxxInstInit2, /* devInstanceInit2 */

xxxInstConnect /* devConnect */ 
};
  • devInstanceInit在Kernel初始化前被調用,若設備或其一部分被Kernel使用,則相關的初始化實如今該函數中完成。
  • devInstanceInit2在Kernel初始化後被調用,若無特別要求,初始化都應在此函數中實現。
  • devInstanceConnect用於設備的鏈接,一般能夠不使用,但若是它依賴於其餘設備,則啓動代碼在其中實現。

1.1.2 中斷鏈接

VxWorks的中斷鏈接在系統配置相關c文件中統一實現。code

1.2 SylixOS中驅動註冊與初始化

1.2.1 初始化函數

SylixOS中驅動的初始化入口在bspInit.c中能夠根據實際使用須要在halBusInit、halDrvInit、halDevInit中進行調用。 因此需將VxWorks中devInstanceInit、devInstanceInit2中的實現整合爲一個Init函數,在bspInit.c中對應位置進行調用。文檔

1.2.3 中斷鏈接

SylixOS的中斷鏈接須要在驅動中調用API_InterVectorConnect、API_InterVectorEnable函數註冊中斷並使能中斷。源碼

2. 關於地址映射

VxWorks下的不少虛擬地址在開機初始化時就進行了映射,其映射關係經過一個VIRT_TO_PHYS的數組描述,一般規律是地址的最高位不一樣,但低31位都相同。 在SylixOS中,應用程序空間的虛擬地址到物理地址的映射,並不必定聽從低31位相同的規則,使用時需使用API_VmmVirtualToPhysical函數獲取其映射後的物理地址。it

3. 不使用系統IO層、協議棧的驅動移植

對於不使用系統IO層、協議棧的驅動,能夠改寫devInstanceInit、devInstanceInit2等函數,使其爲一個Init函數,在bspInit.c中調用;而且定義中斷鏈接的操做,在Init函數中調用。配置

4. 使用系統IO層、協議棧的驅動移植

對於使用系統IO層、協議棧的驅動,則必須根據使用場景進行改寫。程序

相關文章
相關標籤/搜索