linux字符驱动向vxworks移植,VxWorks驱动移植至SylixOS总结
本文檔描述了將VxWorks中的驅(qū)動(dòng)源碼快速移植至SylixOS中的方法,使用時(shí)需要結(jié)合SylixOS中的VxWorks兼容層實(shí)現(xiàn)。
1. 驅(qū)動(dòng)注冊(cè)與初始化
1.1 VxWorks中驅(qū)動(dòng)注冊(cè)與初始化
1.1.1 初始化函數(shù)
VxWorks中大部分函數(shù)使用了VxWorks的VxBus結(jié)構(gòu),對(duì)于基于VxBus的驅(qū)動(dòng)結(jié)構(gòu),通常都定義了如下所示的結(jié)構(gòu)體。
LOCAL struct drvBusFuncs xxxDrvFuncs = {
xxxInstInit, /* devInstanceInit */
xxxInstInit2, /* devInstanceInit2 */
xxxInstConnect /* devConnect */
};
devInstanceInit在Kernel初始化前被調(diào)用,若設(shè)備或其一部分被Kernel使用,則相關(guān)的初始化實(shí)現(xiàn)在該函數(shù)中完成。
devInstanceInit2在Kernel初始化后被調(diào)用,若無(wú)特別要求,初始化都應(yīng)在此函數(shù)中實(shí)現(xiàn)。
devInstanceConnect用于設(shè)備的連接,通常可以不使用,但如果它依賴于其他設(shè)備,則啟動(dòng)代碼在其中實(shí)現(xiàn)。
1.1.2 中斷連接
VxWorks的中斷連接在系統(tǒng)配置相關(guān)c文件中統(tǒng)一實(shí)現(xiàn)。
1.2 SylixOS中驅(qū)動(dòng)注冊(cè)與初始化
1.2.1 初始化函數(shù)
SylixOS中驅(qū)動(dòng)的初始化入口在bspInit.c中可以根據(jù)實(shí)際使用需要在halBusInit、halDrvInit、halDevInit中進(jìn)行調(diào)用。 所以需將VxWorks中devInstanceInit、devInstanceInit2中的實(shí)現(xiàn)整合為一個(gè)Init函數(shù),在bspInit.c中對(duì)應(yīng)位置進(jìn)行調(diào)用。
1.2.3 中斷連接
SylixOS的中斷連接需要在驅(qū)動(dòng)中調(diào)用API_InterVectorConnect、API_InterVectorEnable函數(shù)注冊(cè)中斷并使能中斷。
2. 關(guān)于地址映射
VxWorks下的很多虛擬地址在開機(jī)初始化時(shí)就進(jìn)行了映射,其映射關(guān)系通過(guò)一個(gè)VIRT_TO_PHYS的數(shù)組描述,通常規(guī)律是地址的最高位不同,但低31位都相同。 在SylixOS中,應(yīng)用程序空間的虛擬地址到物理地址的映射,并不一定遵從低31位相同的規(guī)則,使用時(shí)需使用API_VmmVirtualToPhysical函數(shù)獲取其映射后的物理地址。
3. 不使用系統(tǒng)IO層、協(xié)議棧的驅(qū)動(dòng)移植
對(duì)于不使用系統(tǒng)IO層、協(xié)議棧的驅(qū)動(dòng),可以改寫devInstanceInit、devInstanceInit2等函數(shù),使其為一個(gè)Init函數(shù),在bspInit.c中調(diào)用;并且定義中斷連接的操作,在Init函數(shù)中調(diào)用。
4. 使用系統(tǒng)IO層、協(xié)議棧的驅(qū)動(dòng)移植
對(duì)于使用系統(tǒng)IO層、協(xié)議棧的驅(qū)動(dòng),則必須根據(jù)使用場(chǎng)景進(jìn)行改寫。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的linux字符驱动向vxworks移植,VxWorks驱动移植至SylixOS总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android自定义组合布局,Andro
- 下一篇: bert 多义词_BERT之后,GLUE