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.

[責任編輯:薛俊歌]

主站蜘蛛池模板: 精品国产网站| 色偷偷一区二区三区| 综合色在线| 四虎永久免费在线| 日本人妻一区二区三区不卡影院| 日本三级欧美三级| 男女猛烈无遮挡午夜视频| 8090成人午夜精品| 67194在线午夜亚洲| 怡红院美国分院一区二区| 色成人综合| 亚洲精品日产精品乱码不卡| 亚洲毛片网站| 久久国产精品波多野结衣| 香蕉eeww99国产在线观看| 国产精品黑色丝袜的老师| 亚洲成人黄色在线| 日本高清在线看免费观看| 色婷婷在线播放| 日韩欧美国产精品| 日韩精品中文字幕一区三区| 国产成人精品第一区二区| 色欲色欲久久综合网| 国产人碰人摸人爱免费视频| 中文国产成人精品久久| 国产男女XX00免费观看| 欧美中出一区二区| 97超爽成人免费视频在线播放| 国语少妇高潮| 高清无码一本到东京热| 亚洲AV无码乱码在线观看裸奔 | 国产一在线观看| 亚洲国产精品日韩av专区| 国产高清免费午夜在线视频| 免费网站成人亚洲| 精品国产aⅴ一区二区三区| 毛片大全免费观看| 国产粉嫩粉嫩的18在线播放91 | 91视频99| 国产中文一区a级毛片视频| 高清精品美女在线播放| 亚洲国产无码有码| 四虎永久免费在线| 亚洲资源在线视频| 制服丝袜在线视频香蕉| 午夜福利无码一区二区| 88国产经典欧美一区二区三区| 欧美精品v| 最新精品久久精品| 一本久道热中字伊人| 亚洲黄色激情网站| 亚洲成人高清在线观看| 激情六月丁香婷婷四房播| 欧美日韩免费观看| 亚洲国产综合精品一区| 亚洲中文无码h在线观看| 午夜视频在线观看区二区| 日韩av无码DVD| 国产美女视频黄a视频全免费网站| 真人免费一级毛片一区二区| 国产91高清视频| 国产黑丝一区| 日韩天堂网| 精品成人一区二区三区电影| 亚洲国产在一区二区三区| 久久亚洲国产最新网站| 成人在线观看一区| 亚洲国产日韩欧美在线| 国产精品yjizz视频网一二区| 色综合天天视频在线观看| a亚洲视频| 91av国产在线| 亚洲午夜国产精品无卡| 国产人成在线观看| 欧美激情第一区| 中文字幕无线码一区| 一本久道久久综合多人| 精品国产网站| 久久精品国产精品国产一区| 国产精品一区不卡| 看你懂的巨臀中文字幕一区二区| 亚洲精品久综合蜜|