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.

[責任編輯:薛俊歌]

主站蜘蛛池模板: 精品久久人人爽人人玩人人妻| 欧美日韩国产成人在线观看| 亚洲日韩精品伊甸| 国产精品19p| a亚洲视频| 国产精品女同一区三区五区| 无码国产伊人| 午夜人性色福利无码视频在线观看| 99久久国产自偷自偷免费一区| 色综合网址| 国产精品高清国产三级囯产AV| 激情五月婷婷综合网| 全色黄大色大片免费久久老太| 热久久这里是精品6免费观看| 欧美日韩亚洲综合在线观看| 日韩午夜伦| 日韩福利在线视频| 欧美一区二区精品久久久| 日本黄网在线观看| 亚洲视频一区在线| 欧美精品不卡| 国产欧美高清| 国产无码精品在线播放| 日韩欧美国产精品| 欧美成人免费一区在线播放| 91小视频在线观看| 亚洲IV视频免费在线光看| 国产91小视频在线观看| 国产人碰人摸人爱免费视频| 久久综合五月| 久久久久久久蜜桃| 欧美一区日韩一区中文字幕页| 国产在线精品99一区不卡| 97视频精品全国免费观看| 亚洲Av激情网五月天| 国产精品熟女亚洲AV麻豆| 伊人色在线视频| 国产成人无码AV在线播放动漫| 国产无套粉嫩白浆| 中文国产成人久久精品小说| 久久中文字幕2021精品| 欧美精品亚洲二区| 在线观看网站国产| 99人体免费视频| 玩两个丰满老熟女久久网| 亚洲一级毛片在线观| 国产精品太粉嫩高中在线观看| 一级毛片免费观看久| 一级看片免费视频| 99er精品视频| 免费激情网址| 人妻中文久热无码丝袜| 免费a在线观看播放| 激情无码字幕综合| 欧美精品成人一区二区视频一| 亚洲婷婷丁香| 伊伊人成亚洲综合人网7777| 国产一区二区三区视频| 国产成人综合在线视频| 在线看片中文字幕| 精品视频在线一区| 国产成人精品无码一区二| 99国产精品免费观看视频| 亚洲精品国产首次亮相| 国产黑丝视频在线观看| 国产精品视频导航| 亚洲男人的天堂网| 亚洲国产天堂久久综合226114| 伊人蕉久影院| 亚洲日韩精品伊甸| 亚洲av日韩综合一区尤物| 91极品美女高潮叫床在线观看| 国产精品三级av及在线观看| 国产亚洲视频免费播放| 亚洲精品国产精品乱码不卞 | 欧美三級片黃色三級片黃色1| 91精品国产一区自在线拍| 国产啪在线| 成人在线欧美| 亚洲综合色吧| 国产真实乱了在线播放| 91青青视频|