- 1. 驅動注冊與初始化
- 1.1 VxWorks中驅動注冊與初始化
- 1.1.1 初始化函數
- 1.1.2 中斷連接配接
- 1.2 SylixOS中驅動注冊與初始化
- 1.2.1 初始化函數
- 1.2.3 中斷連接配接
- 1.1 VxWorks中驅動注冊與初始化
- 2. 關于位址映射
- 3. 不使用系統IO層、協定棧的驅動移植
- 4. 使用系統IO層、協定棧的驅動移植
本文檔描述了将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檔案中統一實作。
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函數擷取其映射後的實體位址。
3. 不使用系統IO層、協定棧的驅動移植
對于不使用系統IO層、協定棧的驅動,可以改寫devInstanceInit、devInstanceInit2等函數,使其為一個Init函數,在bspInit.c中調用;并且定義中斷連接配接的操作,在Init函數中調用。
4. 使用系統IO層、協定棧的驅動移植
對于使用系統IO層、協定棧的驅動,則必須根據使用場景進行改寫。