999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于龍芯2F平臺下Vxworks移植的研究與實現

2014-08-15 20:59:21郭勇等
科技視界 2014年18期

郭勇等

【摘 要】本文簡單介紹了VxWorks實時操作系統和龍芯2F處理器,對基于龍芯2F平臺的VxWorks系統移植進行了分析,并詳細介紹了移植內容,包括文件的配置、中斷管理、PCI庫的實現和驅動程序等方面詳細。

【關鍵詞】龍芯2F;VxWorks;BSP;系統移植

0 引言

VxWorks是美國WindRiver公司推出的一種嵌入式實時操作系統,以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中。

龍芯系列處理器是中國科學院計算所自主開發的國產處理器系,龍芯2F微處理器是64位MIPS 指令集的通用RISC處理器,其最高工作頻率為1GHZ[1],具有高性能、低功耗等特點?,F有的龍芯平臺大都基于Linux操作系統,但是在工業控制、高性能嵌入式等領域,對實時性、定制性的要求很高,因此VxWorks系統才是比較理想的選擇。

本文首先明確移植的基本思路,然后分別從中斷分級管理性維護、地址空間的訪問擴展、PCI設備的讀寫機制和驅動程序開發與配置的建立等幾個方面來展開相關的工作。

1 BVxWorks移植分析

1.1 VxWorks移植的主要內容

VxWorks主要由三部分組成:BSP、微內核及I/O系統,BSP( Board Support Package)是板級支持包,是介于主板硬件和操作系統之間的一層,包括硬件初始化、中斷處理、時鐘管理、MMU等功能.在龍芯2F平臺上移植VxWorks,主要就是完成板級支持包BSP的開發.

1.2 VxWorks啟動流程分析與移植思路

與X86的BIOS不同,龍芯2開發板的BIOS采用了PMON,可以通過網絡或硬盤直接加載ELF格式的VxWorks映像文件到內存中運行。對可下載型的VxWorks映像文件,說明如下[2]。

SysInit()為VxWorks映像的入口函數,它由匯編語言編寫。SysInit()通過對CPU內部各種控制與狀態寄存器的設置來使得CPU具有確定的工作方式和穩定的狀態等,然后跳到c語言函數usrInit()。

usrInit()函數主要進行外圍硬件初始化,為下載VxWorks內核映像做初始準備,主要包括cache庫初始化、系統中斷向量初始化、目標板硬件初始化等,最后調用kernelInit()。

kernelInit()為由風河vxWorks庫文件封裝的,功能為提取kernel并運行,使得后期的初始化能夠以kernel下運行的任務來完成。該任務名為tRootTask,它執行的方式類似于usrRoot。

針對龍芯2F開發板,usrInit()調用的cacheLibInit()、sysHwInit()、sysHwInit2()等函數是與硬一些主要的硬件初始化函數。一部分處理器由于有第三方支持的BSP,可以使用戶方便的使用。而對于龍芯2F,由于其為國產處理器,則通常需要自己建立龍芯2F 專用的BSP。

通常情況下BSP開發的流程是,先實現一個最小化的VxWorks內核,向其中添加定時器、串口設備、中斷控制器等基本驅動程序,使得VxWorks系統基本可用,然后在此基礎上添加其他設備,最終滿足目標需求.本文進行龍芯2F平臺的BSP開發也是基于該流程。

2 龍芯2F平臺的VxWorks移植

2.1 Config.h與MakeFile文件的配置

為了使Pmon能夠直接加載VxWorks,需要在BSP 包的MakeFile與Config.h件中修改VxWorks映像文件的入口地址,使其在Pmon支持的加載地址范圍內。Config.h文件還涵蓋了龍芯2F的所有包含文件和定義,需要對其修改.修改Config.h文件如下:

#define ROM_BASE_ADRS 0xbfc00000

#define ROM_TEST_ADRS 0xbfc00000

#define ROM_SIZE 0x00100000

#define ROM_HIGH_ADRS 0x bfd00000

#define ROM_LOW_ADRS 0x 00100000

中,ROM_BASE_ADRS表示ROM的基地址,ROM_TEST_ADRS表示初始化啟動代碼存放在ROM中的起始地址,ROM_SIZE表示ROM 的大小,若存儲空間大小為8Mbit,則應該定義為為0x00100000.ROM_HIGH_ADRS表示復制BooTROM 到RAM 所使用的目標地址,ROM_LOW_ADRS表示RAM中的VxWorks運行的起始地址。

此外還要修改MakeFile文件,如CPU類型號,選擇編譯工具,附加編譯選項等。應注意要保證MakeFile和ConFig.h中ROM和RAM宏定義中地址一致等。

2.2 中斷管理

龍芯處理器在它的Cause寄存器中有8個獨立的中斷位,分別對應IP1-IP8,當中斷發生觸發異常,異常處理函數讀取Cause寄存器的EXCODE域為0,判斷異常為中斷產生,然后讀取Cause寄存器IP位判斷中斷來自哪個引腳[3-4]。

VxWorks通過intPrioTable[]來管理MIPS的一級中斷,intPrioTable[]表項數據類型為PRIO_TABLE,根椐本課題實際應用,intPrioTable[]數組設計如下。

PRIO_TABLE intPrioTable[] =

{

{CAUSE_SW1, (ULONG) IV_SWTRAP0_VEC, 0x000100, 0},

{CAUSE_SW2, (ULONG) IV_SWTRAP1_VEC, 0x000200, 0},

{CAUSE_IP3, (ULONG) sysFeiInt, 0x000400, 1},

{CAUSE_IP4, (ULONG) sysSerialprint, 0x000800, 36},

{CAUSE_IP5, (ULONG) NULL, 0x001000, 0},

{CAUSE_IP6, (ULONG) NULL, 0x002000, 0},

{CAUSE_IP7, (ULONG) sysNetInt, 0x004000, 40},

{CAUSE_IP8, (ULONG) IV_TIMER_VEC, 0x008000, 0},

};

2.3 PCI庫的實現

在Vxworks的硬件初始化函數sysHwInit()中對PCI庫進行初始化。對于龍芯2而言,PCI采用配置機制0,讀寫函數具體由sysPciConfigRead()和sysPciConfigWrite()來實現,通過PCI總線號,PCI設備號,PCI功能號,按傳入的字節寬度,實現對PCI配置空間的寄存器地址進行讀寫操作。PCI庫初始化如下:

pci Config LibInit (PCI_MECHANISM_0, ULONG) sysPciConfigRead, ULONG)sysPciConfigWrite,NONE);sysPciConfigRead()和sysPciConfigWrite()基本實現見[4]。Vxworks中實現PCI資源(I/O端口地址、PCI Memory地址、中斷號)的自動分配可以通過sysPciAutoConfig ()接口來實現。

2.4 串口驅動程序開發

龍芯2F平臺的啟動過程中,需要對串口設備初始化.普通多模式串行驅動程序存放在target/src/drv/sio目錄下.此目錄中包括了很多常見的串口設備的驅動源文件,如i8250SIO.c和nsl16550sio.c等等,同時還包含了templateSio.c模板文件.龍芯2F中的UART串口設備兼容NS 16550,因此可以直接使用nsl16550sio.c作為串口驅動.如果需要添加特殊串口設備時,需要先在模版templateSio.c上創建驅動程序,然后修改BSP的syslib.c或sysSerial.c文件,以使它們包括所需的驅動程序.由于本文龍芯2F平臺的所用硬件均為普通的常用設備,可同樣按照上述方式添加與配置.

3 結束語

針對不同的用途和需求,龍芯2F的硬件平臺配置也各不相同,但Vxworks移植的方法是類似的.本文詳細研究了龍芯2F平臺下的Vxworks移植方法,并在龍芯2F開發板上驗證了其可行性,一定程度上可以拓展龍芯系列在高性能嵌入式等領域的應用范圍。

【參考文獻】

[1]龍心.中國科學院計算技術研究所.2F處理器用戶手冊[Z].2008.

[2]王金剛,譯.Wind River.VxWorks BSP開發人員指南[M].北京:清華大學出版社,2003.

[3]Wind River Ststem,Inc,VxWorks BSP Developers Guide [Z] ,2008.

[4]趙傳良,張福新,陶品,等,譯.Dominic Sweetman MIPS處理器設計透視[M]. 北京:北京航空航天大學出版社,2005.

[責任編輯:薛俊歌]

{CAUSE_SW2, (ULONG) IV_SWTRAP1_VEC, 0x000200, 0},

{CAUSE_IP3, (ULONG) sysFeiInt, 0x000400, 1},

{CAUSE_IP4, (ULONG) sysSerialprint, 0x000800, 36},

{CAUSE_IP5, (ULONG) NULL, 0x001000, 0},

{CAUSE_IP6, (ULONG) NULL, 0x002000, 0},

{CAUSE_IP7, (ULONG) sysNetInt, 0x004000, 40},

{CAUSE_IP8, (ULONG) IV_TIMER_VEC, 0x008000, 0},

};

2.3 PCI庫的實現

在Vxworks的硬件初始化函數sysHwInit()中對PCI庫進行初始化。對于龍芯2而言,PCI采用配置機制0,讀寫函數具體由sysPciConfigRead()和sysPciConfigWrite()來實現,通過PCI總線號,PCI設備號,PCI功能號,按傳入的字節寬度,實現對PCI配置空間的寄存器地址進行讀寫操作。PCI庫初始化如下:

pci Config LibInit (PCI_MECHANISM_0, ULONG) sysPciConfigRead, ULONG)sysPciConfigWrite,NONE);sysPciConfigRead()和sysPciConfigWrite()基本實現見[4]。Vxworks中實現PCI資源(I/O端口地址、PCI Memory地址、中斷號)的自動分配可以通過sysPciAutoConfig ()接口來實現。

2.4 串口驅動程序開發

龍芯2F平臺的啟動過程中,需要對串口設備初始化.普通多模式串行驅動程序存放在target/src/drv/sio目錄下.此目錄中包括了很多常見的串口設備的驅動源文件,如i8250SIO.c和nsl16550sio.c等等,同時還包含了templateSio.c模板文件.龍芯2F中的UART串口設備兼容NS 16550,因此可以直接使用nsl16550sio.c作為串口驅動.如果需要添加特殊串口設備時,需要先在模版templateSio.c上創建驅動程序,然后修改BSP的syslib.c或sysSerial.c文件,以使它們包括所需的驅動程序.由于本文龍芯2F平臺的所用硬件均為普通的常用設備,可同樣按照上述方式添加與配置.

3 結束語

針對不同的用途和需求,龍芯2F的硬件平臺配置也各不相同,但Vxworks移植的方法是類似的.本文詳細研究了龍芯2F平臺下的Vxworks移植方法,并在龍芯2F開發板上驗證了其可行性,一定程度上可以拓展龍芯系列在高性能嵌入式等領域的應用范圍。

【參考文獻】

[1]龍心.中國科學院計算技術研究所.2F處理器用戶手冊[Z].2008.

[2]王金剛,譯.Wind River.VxWorks BSP開發人員指南[M].北京:清華大學出版社,2003.

[3]Wind River Ststem,Inc,VxWorks BSP Developers Guide [Z] ,2008.

[4]趙傳良,張福新,陶品,等,譯.Dominic Sweetman MIPS處理器設計透視[M]. 北京:北京航空航天大學出版社,2005.

[責任編輯:薛俊歌]

{CAUSE_SW2, (ULONG) IV_SWTRAP1_VEC, 0x000200, 0},

{CAUSE_IP3, (ULONG) sysFeiInt, 0x000400, 1},

{CAUSE_IP4, (ULONG) sysSerialprint, 0x000800, 36},

{CAUSE_IP5, (ULONG) NULL, 0x001000, 0},

{CAUSE_IP6, (ULONG) NULL, 0x002000, 0},

{CAUSE_IP7, (ULONG) sysNetInt, 0x004000, 40},

{CAUSE_IP8, (ULONG) IV_TIMER_VEC, 0x008000, 0},

};

2.3 PCI庫的實現

在Vxworks的硬件初始化函數sysHwInit()中對PCI庫進行初始化。對于龍芯2而言,PCI采用配置機制0,讀寫函數具體由sysPciConfigRead()和sysPciConfigWrite()來實現,通過PCI總線號,PCI設備號,PCI功能號,按傳入的字節寬度,實現對PCI配置空間的寄存器地址進行讀寫操作。PCI庫初始化如下:

pci Config LibInit (PCI_MECHANISM_0, ULONG) sysPciConfigRead, ULONG)sysPciConfigWrite,NONE);sysPciConfigRead()和sysPciConfigWrite()基本實現見[4]。Vxworks中實現PCI資源(I/O端口地址、PCI Memory地址、中斷號)的自動分配可以通過sysPciAutoConfig ()接口來實現。

2.4 串口驅動程序開發

龍芯2F平臺的啟動過程中,需要對串口設備初始化.普通多模式串行驅動程序存放在target/src/drv/sio目錄下.此目錄中包括了很多常見的串口設備的驅動源文件,如i8250SIO.c和nsl16550sio.c等等,同時還包含了templateSio.c模板文件.龍芯2F中的UART串口設備兼容NS 16550,因此可以直接使用nsl16550sio.c作為串口驅動.如果需要添加特殊串口設備時,需要先在模版templateSio.c上創建驅動程序,然后修改BSP的syslib.c或sysSerial.c文件,以使它們包括所需的驅動程序.由于本文龍芯2F平臺的所用硬件均為普通的常用設備,可同樣按照上述方式添加與配置.

3 結束語

針對不同的用途和需求,龍芯2F的硬件平臺配置也各不相同,但Vxworks移植的方法是類似的.本文詳細研究了龍芯2F平臺下的Vxworks移植方法,并在龍芯2F開發板上驗證了其可行性,一定程度上可以拓展龍芯系列在高性能嵌入式等領域的應用范圍。

【參考文獻】

[1]龍心.中國科學院計算技術研究所.2F處理器用戶手冊[Z].2008.

[2]王金剛,譯.Wind River.VxWorks BSP開發人員指南[M].北京:清華大學出版社,2003.

[3]Wind River Ststem,Inc,VxWorks BSP Developers Guide [Z] ,2008.

[4]趙傳良,張福新,陶品,等,譯.Dominic Sweetman MIPS處理器設計透視[M]. 北京:北京航空航天大學出版社,2005.

[責任編輯:薛俊歌]

主站蜘蛛池模板: 日韩高清欧美| 中文国产成人久久精品小说| 国产内射在线观看| 亚洲欧美另类中文字幕| 欧美性猛交一区二区三区| 国产一区二区精品高清在线观看 | 无码免费的亚洲视频| 国产精品自拍合集| 亚洲av日韩av制服丝袜| 亚洲免费黄色网| 69av在线| 国产国产人成免费视频77777| 中文字幕在线看视频一区二区三区| 国产成人调教在线视频| 国内精品久久久久久久久久影视| 亚洲天堂久久久| 国产在线视频福利资源站| 国产成人AV男人的天堂| 国产成人乱无码视频| 人妻21p大胆| 亚洲国产在一区二区三区| 亚洲中文字幕在线一区播放| 一区二区三区国产精品视频| 在线精品视频成人网| 欧美一区日韩一区中文字幕页| 亚洲精品男人天堂| 久久精品人妻中文系列| 国产欧美性爱网| 成人另类稀缺在线观看| 高清不卡毛片| a亚洲视频| 在线欧美国产| 国产另类视频| 国产精品手机在线观看你懂的| 亚洲天堂成人| 精品国产网| 国产成人精品一区二区| 亚洲人成网7777777国产| 国产自在线拍| 亚洲娇小与黑人巨大交| 朝桐光一区二区| 国产va免费精品观看| 成人午夜视频免费看欧美| 国产视频久久久久| 国产精品永久在线| 国产美女一级毛片| 人妻精品全国免费视频| 日韩专区欧美| 欧美激情视频一区| 色国产视频| a网站在线观看| 国产原创第一页在线观看| vvvv98国产成人综合青青| 国产精品无码制服丝袜| 欧美三级日韩三级| 九九精品在线观看| 日本成人福利视频| 国产精品30p| 久久伊人操| 成人午夜天| 欧美性爱精品一区二区三区| 99国产精品免费观看视频| 日本成人不卡视频| 亚洲成年人片| 免费国产福利| 精品福利国产| 71pao成人国产永久免费视频| 97se亚洲综合在线韩国专区福利| 亚洲成人www| 免费av一区二区三区在线| 热伊人99re久久精品最新地| 特级毛片免费视频| 免费看一级毛片波多结衣| 欧美日一级片| 666精品国产精品亚洲| 在线不卡免费视频| 国产人妖视频一区在线观看| 欧美一道本| 国产91小视频在线观看| 五月综合色婷婷| 欧美精品1区| 久草国产在线观看|