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.

[責任編輯:薛俊歌]

主站蜘蛛池模板: 国产综合另类小说色区色噜噜| 色综合中文综合网| 91小视频在线| 老司机精品一区在线视频| 中文字幕有乳无码| 国产欧美日韩va另类在线播放| 精品综合久久久久久97超人| 另类专区亚洲| 久久国产精品国产自线拍| 国产爽妇精品| 精品自窥自偷在线看| 婷婷99视频精品全部在线观看| 亚洲欧美综合在线观看| 四虎永久在线| 亚洲天堂免费在线视频| 日本不卡在线视频| 99久久亚洲综合精品TS| 国产乱人伦AV在线A| 国产福利在线观看精品| 99er精品视频| 亚洲成A人V欧美综合| 91精品综合| 中文字幕日韩欧美| 日韩在线观看网站| 黄色福利在线| 国内精品免费| 久久人妻xunleige无码| 日本五区在线不卡精品| 亚洲丝袜第一页| 刘亦菲一区二区在线观看| 亚洲无码A视频在线| 19国产精品麻豆免费观看| 国产自产视频一区二区三区| 波多野结衣亚洲一区| 亚洲人视频在线观看| 永久天堂网Av| 中文纯内无码H| 99无码中文字幕视频| 成人午夜视频网站| 天天躁日日躁狠狠躁中文字幕| 日韩天堂视频| 一级片免费网站| 国产内射在线观看| 国产成人精品一区二区不卡| 99久久国产自偷自偷免费一区| 亚洲国产欧美国产综合久久| 国产乱码精品一区二区三区中文 | 免费高清毛片| 亚洲男人在线天堂| 亚洲一区黄色| 高清不卡一区二区三区香蕉| 91亚洲国产视频| 国产幂在线无码精品| 福利在线免费视频| 中文字幕无码制服中字| 91小视频在线观看| 亚洲精品国产综合99久久夜夜嗨| 国产精品v欧美| 成年人午夜免费视频| 特级aaaaaaaaa毛片免费视频| 亚洲资源站av无码网址| 日韩精品成人在线| 免费国产小视频在线观看| 99精品国产电影| 国产欧美精品一区二区| 亚洲欧美另类日本| 国产午夜无码片在线观看网站 | 日本尹人综合香蕉在线观看| 国产精品久久久久婷婷五月| 国产chinese男男gay视频网| 亚洲精品在线91| 无码免费的亚洲视频| 亚洲娇小与黑人巨大交| 国产爽歪歪免费视频在线观看| 成年看免费观看视频拍拍| 最新亚洲av女人的天堂| 99久久精品国产自免费| 亚洲视频三级| 国产成人在线无码免费视频| 亚洲人成网站色7799在线播放 | 亚洲成A人V欧美综合天堂| 91视频区|