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

噴碼機平臺WinCE5.0系統的BSP開發

2014-09-06 10:49:59王宏文李曉燕黃金蘭
單片機與嵌入式系統應用 2014年6期
關鍵詞:系統

王宏文,李曉燕,黃金蘭

(河北工業大學 控制科學與工程學院,天津 300130)

?

噴碼機平臺WinCE5.0系統的BSP開發

王宏文,李曉燕,黃金蘭

(河北工業大學 控制科學與工程學院,天津 300130)

基于以S3C2440A處理器為核心的噴碼機硬件開發平臺,研究了嵌入式WinCE5.0操作系統板級支持包BSP的開發。分析了噴碼機平臺的硬件組成和BSP的框架結構,利用源代碼重用的思想,完成了Bootloader、OAL、驅動程序、配置文件的開發工作并在BINFS文件系統的基礎上實現Multi-bin成功將內核分塊。實踐表明該BSP在噴碼機臺上運行穩定,可靠性高,能有效提升系統的開機速度,并使平臺擁有了運行大型噴印軟件的能力。

噴碼機;WinCE5.0;Multi-bin;BSP

引 言

本文在實現噴碼機板載系統一體化的目標下,研究了噴碼機軟件系統開發的操作系統板級支持包(Board Support Package,BSP)[1]。

1 BSP結構概述

板級支持包BSP是介于硬件和操作系統之間的一層軟件系統,其作用就是抽象操作系統和主板硬件之間的交互接口。基于具體開發板開發BSP,必須對它的結構有一定的了解。一般情況下,WinCE5.0的BSP包含引導程序(BootLoader)、OEM適配層(OEM Adaptation Layer,OAL)、驅動程序、配置文件四部分。

2 開發板的硬件組成

BSP不僅與特定的操作系統有關,而且與不同的開發平臺也是一一對應的。噴碼機系統的硬件平臺主要由圖1所示的幾大部分組成。

圖1 開發板硬件組成

以噴碼機控制系統的CPU為核心,外圍設備主要包括兩片HY57V561620F(L)T(P)芯片、一片K9F2G08U0A和EN29LV160AB芯片,使開發板擁有了64 MB的SDRAM、256 MB的NAND FLASH以及2 MB的 NOR FLASH。網卡采用DM9000,提供互聯網連接等功能,同時包含4.3寸的觸摸屏、XJ128噴頭以及豐富的接口資源。

3 BSP開發

從零開始研發BSP成本較高、耗時長,所以現實中最常采用的方法是根據需要對現有的相近BSP源碼進行移植。本文就是以相近開發板的BSP為基礎,根據噴碼機硬件平臺的外圍配置,對BSP的源碼做出對應的修改,使之能夠有效支持硬件系統。主要工作介紹如下。

3.1 BootLoader的實現

BootLoader是嵌入式軟件系統最底層的一組代碼,是依賴硬件存在的。微軟公司提供了一套WinCE系統BootLoader的基本框架,由Blcommon庫、Eboot庫、OEM代碼、EDBG驅動以及存儲管理組成[1]。移植時前二者無需改動,后面三部分則需要根據開發板的實際配置進行修改。在實現過程中應盡量使用微軟提供的支持庫,這樣在保證了規范性、高效性的同時還節省了實現時間。

BootLoader需要實現的代碼主要分為兩部分:由匯編語言編寫的啟動代碼以及由C語言編寫的主代碼。匯編代碼startup.s是BootLoader的入口函數,CPU啟動后將立即運行,完成對CPU的初始化、地址映射、及BootLoader代碼的搬運[2]。以下是平臺的部分代碼實現:

ResetHandler

movr0, #0

mcrp15, 0, r0, c8, c7, 0 ; flush both TLB

mcrp15, 0, r0, c7, c5, 0 ; invalidate instruction cache

mcrp15, 0, r0, c7, c6, 0 ; invalidate data cache

ldr r0, = WTCON ; disable watch dog

ldr r1, = 0x0

str r1, [r0]

; set INTMSK, INTSUBMSK, disable all interrupts

ldr r0, = INTMSK

ldr r1, = 0xffffffff ; disable all interrupts

str r1, [r0]

ldr r0, = INTSUBMSK

ldr r1, = 0x7fff;disable all sub interrupt

str r1, [r0]

……

;set INTMOD, Configure MPLL, UPLL

……

;Copy boot loader to memory

……

匯編程序執行完以后,就會跳轉到主程序main函數中,調用BLCOMMON庫blcommon.c中定義的BootLoaderMain函數。由它控制著接下來的整個代碼執行流程,是引導加載程序的主控函數。

① 調用KerneRrelocate()函數(blcommon.c中實現):將BootLoader中的全局變量重新定位到RAM中。

② 調用OEMDebugInit()函數(main.c中實現):初始化調試端口,一般情況下就是異步串行通信口UART,調用OEMInitDebugSerial()函數實現。在噴碼機平臺中選擇串口UART0作為調試端口,查看處理器的芯片手冊,要把通用I/O口的GPH2和GPH3用作功能復用口,設置它們為UART0的發送數據引腳TXD與接收數據引腳RXD,代碼如下:

pIOPortReg->GPHCON &= ~((3 << 4) | (3 << 6));

pIOPortReg->GPHCON |= ((2 << 4) | (2 << 6));

同時,初始化它的傳輸速率、每幀傳輸數據位數、有無奇偶校驗和停止位等,主要是對UART0的各控制寄存器進行設置,如下:

UFCON0 = 0x0; //設置串口FIFO控制寄存器,禁用FIFO

UMCON0 = 0x0; //禁用

ULCON0 = 0x3; //選擇每幀數據位數為8,停止位數為1,無 //奇偶校驗

UCON0 = 0x245;//選擇串口波特率時鐘,發送模式,接收 //模式

UBRDIV0=( (int)(PCLK/(16*115200) -1 );

//設置串口波特率

③ 調用OEMPlatformInit()函數(main.c中實現):調用InitDisplay(),InitUSB(),Isr_Init()等函數完成平臺初始化工作。

④ 調用OEMPreDownload()函數(main.c中實現):當平臺的USB下載不可用時,調用此函數完成以太網下載前其他的一些準備工作。獲得IP地址,初始化TFTP傳輸協議。

⑤ 調用DownloadImage()函數(在blcommon.c中實現):下載操作系統映像到SDRAM中,完成后進行TOC簽名的檢查。

⑥ 調用OEMLaunch()函數(在main.c中實現):啟動操作系統映像。

3.2 OAL移植

OAL(OEM Adaptation Layer)從WinCE5.0以后,引入了OAL的新概念:產品質量級OAL,即PQOAL。它使OAL的目錄結構標準化、代碼分布模塊化,降低了移植的難度[3]。WinCE5.0中OAL的代碼主要分成4部分:板級代碼、SoC芯片級代碼、體系結構級代碼和硬件無關級代碼。

噴碼機平臺相較于學習板主要是在外圍設備方面做了變動,因此這里完成OAL移植的主要工作就是修改板級OAL代碼,位于WINCE500PLATFORM HARDWAER PLATFORM NAMESRC KERNELOAL。在最后的編譯過程中,OAL是被編譯進操作系統內核的,因此OAL的啟動流程實際也就是操作系統內核的啟動流程。圖2是操作系統的初始化啟動流程。

圖2 WinCE5.0內核啟動順序

其中的絕大部分函數由微軟提供,并不需要修改,只有部分涉及到具體硬件的地方需要實現。

① startup函數。這是系統啟動時調用的第一個函數,主要完成CPU和硬件的初始化等工作。本系統的OAL由BootLoader引導,很多硬件設備已經在那里完成初始化,所以此處startup的主要工作就是完成其余部分初始化然后跳轉到OAL的主控函數KernelStart()處開始執行。部分代碼如下:

LEAF_ENTRY StartUp

addr0, pc, #g_oalAddressTable- (.+ 8)

bl KernelStart

ENTRY_END

② 串口調試函數OEMInitDebugSerial()。其由ARMInit()函數調用,主要完成初始化串口的工作,與BootLoader分享相同的代碼。

③ OEMInit()函數。OEMInit()函數也是由ARMInit()調用,主要完成硬件平臺的初始化,包括cache globals、中斷、系統時鐘、KITL等,幾乎完成了所有的硬件初始化工作[4]。如初始化I/O函數ConfigureGPIO()的部分代碼如下:

s2440IOP->GPBDAT=0x60;

s2440IOP->GPBUP=0x7FF;

s2440IOP->GPBCON=0x2A96A8;

……

s2440IOP->GPGCON=0x16A4F3B4;

s2440IOP->GPGUP=0x9BDC;

……

具體操作就是根據噴碼機平臺對端口的要求,查S3C2440A芯片手冊的I/O部分,根據規則設置相關寄存器來初始化它們的實際功用。這些所有的初始化工作都在WINCE500 PLATFORMHARDWAER PLATFORM NAMESRC KERNELOAL init.c中實現。

④ 中斷初始化函數OALIntrInit()。由OEMInit()函數調用,負責初始化外圍硬件的中斷控制器。首先調用OALIntrMapInit()初始化物理中斷Irq和邏輯中斷SysIntr的映射表,然后清除外部中斷和內部中斷,調用BSPIntrInit()對BSP中的GPIO中斷進行初始化工作,這里移植時不作修改。

⑤ 中斷處理函數OEMInterruptHandler()。OAL中對中斷的處理主要是實現ISR部分。當發生硬件中斷時,該函數就會被調用完成ISR部分的中斷處理:讀取系統的中斷標記位、確定中斷源、屏蔽中斷并返回相應的系統中斷號。然后觸發相應的事件,由具體驅動程序的IST完成真正的中斷處理。代碼存放路徑為WINCE500PLATFORM HARDWAER PLATFORM NAMESRC COMMONINTRintr.c,針對開發板實際設置的中斷修改此代碼。同時涉及到中斷處理的函數OALIntrRequestIrqs()、OALIntrEnableIrqs()、OALIntrDisableIrqs() 和OALIntrDoneIrqs()都在intr.c中實現,它們相應地會調用BSPIntrRequestIrqs()、BSPIntrEnableIrq()、BSPIntrDisableIrq()、BSPIntrDoneIrq()來實現同一CPU的不同開發板對中斷所做的一些修改。

⑥ 內核初始化函數KernelInit()。完成初始化系統API函數調用表、系統堆、內存池、內核進程和進程調度等工作,由微軟提供。

⑦ FirstSchedule()。這實際上不是一個函數,而是armtrap.s文件中的一個標簽,使第一個處于就緒態的線程執行[4]。

OAL作為內核與目標硬件之間的接口,主要對硬件的4種部分加以抽象:RTC、Timers、Caches和調試端口,針對實際情況改變了哪里的硬件就修改對應的代碼。具體到噴碼機硬件開發板,移植的重點是硬件初始化部分和中斷處理部分。

3.3 驅動程序的實現

如果增加或刪改了目標板的硬件設備,那么移植BSP時,就必須修改設備驅動程序。WinCE開發平臺提供了多種類型的設備驅動程序,它們的源代碼由兩部分組成:與硬件平臺無關的部分位于WINCE500PUBLICCOMMONOAKDRIVERS目錄下,與硬件平臺有關的部分位于WINCE500PLATFORM下相應BSP目錄的DRIVERS[5]。

我們不需要修改與硬件平臺無關的公共部分,只需要修改與硬件密切相關的源代碼。具體到噴碼機平臺,主要就是XJ128噴頭底層驅動的PMJ_Init(初始化設備)、PMJ_Deinit(卸載設備)、PMJ_Open(打開設備)、PMJ_Close(關閉設備)、PMJ_Write(寫數據到設備)、PMJ_IOControl(設備的I/O控制)等12個流接口驅動函數。

3.4 移植配置文件

PB5使用兩種配置文件來生成操作系統運行時的鏡像,一種是源代碼配置文件,另一種是映像配置文件[6]。配置文件的移植主要集中在Dirs、source、BIB以及REG文件。

根據實驗結果,導入移植好的BSP編譯出的系統鏡像內存太大,燒入噴碼機平臺以后系統開機十分緩慢。因此需要在BINFS基礎上實現Multi-bin技術來將內核分塊,解決開機緩慢的問題。其具體實現主要在配置文件部分:修改config.bib的MEMORY部分如表1所列。

表1 config.bib文件MEMORY部分配置

將內核分為XIPKERNEL和NK兩塊,開機必備的內容存放在XIPKERNEL中,其他部分存放在NK中按需調用。經過實踐,XIPKERNEL應包含如下的幾個模塊(添加在MODULES段):

MODULES

nk.exe $(_FLATRELEASEDIR)kern.exe XIPKERNEL SH coredll.dll $(_FLATRELEASEDIR)coredll.dll XIPKERNEL SH

filesys.exe $(_FLATRELEASEDIR)filesys.exe XIPKERNEL SH

fsdmgr.dll $(_FLATRELEASEDIR)fsdmgr.dll XIPKERNEL SH

mspart.dll $(_FLATRELEASEDIR)mspart.dll XIPKERNEL SH

binfs.dll $(_FLATRELEASEDIR)infs.dll XIPKERNEL SH

ceddk.dll $(_FLATRELEASEDIR)ceddk.dll XIPKERNEL SH regenum.dll $(_FLATRELEASEDIR) egenum.dll XIPKERNEL SHbusenum.dll $(_FLATRELEASEDIR)usenum.dll XIPKERNEL SH

pm.dll $(_FLATRELEASEDIR)pm.dll XIPKERNEL SH smflash.dll $(_FLATRELEASEDIR)smflash.dll XIPKERNEL SHfatfsd.dll $(_FLATRELEASEDIR)fatfsd.dll XIPKERNEL SH

diskcache.dll $(_FLATRELEASEDIR)diskcache.dll XIPKERNEL SH

fatutil.dll $(_FLATRELEASEDIR)fatutil.dll XIPKERNEL SH

除此之外還要在FILES段添加下面兩個模塊:

FILESboot.hv $(_FLATRELEASEDIR)oot.hv XIPKERNEL SH

wince.nls $(_FLATRELEASEDIR)wince.nls XIPKERNEL SH

配合修改platform.bib、common.bin文件完善系統各功能模塊的鏡像歸屬問題,同時在platform.reg中添加BINFS文件的支持。所有工作完成后,導入新的BSP,成功編譯出的系統鏡像如圖3所示。

圖3 編譯生成的系統鏡像

最終將XIP.BIN燒寫到噴碼機平臺,系統啟動時只需將2 MB的XIPKERNEL復制到RAM中,而不是原來將近30 MB的NK。

這樣不僅將開機時間降低至10 s以內,同時增加了29 MB的可用RAM,使系統擁有了運行大型應用軟件的能力。

結 語

噴碼機產品的應用領域越來越廣,針對不同的需要設計開發板,在定制系統時就必須有配套的BSP。移植在滿足應用要求的同時可以大大節省開發時間,減少產品的研發成本。

[1] 何劍鋒,李祥,何月順.基于XScale PXA270處理器平臺WindowsCE5.0系統的BSP二次開發[J].化工自動化及儀表,2009,36(4):72-75.

[2] 張飛,白瑞林,陸林.WinCE5.0 Bootloader的設計與實現[J].計算機工程,2009,35(7):232-234.

[3] 趙永志.WinCE5_0在嵌入式平臺ARK1200上的移植與應用[D].哈爾濱:哈爾濱工業大學,2009.

[4] 夏軍,胡景春.基于ARM的Windows CE移植及應用開發[J].計算機技術與發展,2011,21(4):129-132.

[5] 李尚柏,鐘瑞.基于ARM的嵌入式Windows CE系統高級開發技術[M].北京:清華大學出版社,2011:192-198.

[6] 張德華.基于AT91SAM9261平臺的Windows CE的移植[J].工業控制計算機,2009,22(4):62-65.

王宏文(教授),研究領域為現代傳動控制系統與智能化工程設備;李曉燕、黃金蘭(碩士研究生),研究領域為智能化工程裝備、嵌入式技術。

Development of BSP Based on WinCE 5.0 and Inkjet Printer Platform

Wang Hongwen,Li Xiaoyan,Huang Jinlan

(School of Control Science and Engineering, Hebei University of Technology, Tianjin 300130, China)

Based on the inkjet printer hardware platform with its core of S3C2440A CPU, the development of BSP based on Windows CE5.0 is introduced. Compositions of inkjet printer platform and the frame construction of BSP are analyzed, and then transplantations of Bootloader, OAL, device driver,configuration files and the implementation approach that divides the kernel into a few pieces on the basis of BINFS and Multi-bin are stated in detail by using the comcept of code reuse. Practices show that the BSP in the inkjet printer platform is stable with high-reliability, and can effectively improve system boot speed. Meanwhile it also has the opportunity to run large-scale printing software.

inkjet printer;WinCE5.0;Multi-bin;BSP

TP316

A

迪娜

2013-12-07)

猜你喜歡
系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
基于UG的發射箱自動化虛擬裝配系統開發
半沸制皂系統(下)
FAO系統特有功能分析及互聯互通探討
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統 德行天下
PLC在多段調速系統中的應用
主站蜘蛛池模板: 国产成人免费视频精品一区二区| 日本精品视频| 国产69精品久久| 欧美狠狠干| 久久人体视频| 99久久精彩视频| 色网站免费在线观看| 99精品在线看| 日韩最新中文字幕| 亚洲成人免费看| 亚洲欧洲日产国产无码AV| 久久综合伊人 六十路| 91网址在线播放| 国产精选小视频在线观看| 伊人91视频| 99re在线免费视频| 无码内射在线| 国产精品香蕉在线| 欧美精品成人| a在线观看免费| 精品自拍视频在线观看| 福利国产在线| 毛片久久久| 日本手机在线视频| 91黄视频在线观看| 亚洲视频在线观看免费视频| 国产69精品久久久久孕妇大杂乱| 污污网站在线观看| 99无码中文字幕视频| 亚洲天堂.com| 国产粉嫩粉嫩的18在线播放91| 2021最新国产精品网站| 91啦中文字幕| 国产微拍精品| 国产精品久久自在自2021| 日本免费a视频| 久久久久亚洲AV成人人电影软件 | 在线日韩一区二区| 亚洲 欧美 日韩综合一区| 日本一本正道综合久久dvd | 亚洲欧美日韩另类在线一| 久久黄色毛片| AV天堂资源福利在线观看| 国产精品真实对白精彩久久| 亚洲高清资源| 亚洲国产精品久久久久秋霞影院| 999国内精品视频免费| 国产成人久久综合777777麻豆| 亚洲乱强伦| 无码精品国产dvd在线观看9久| m男亚洲一区中文字幕| 欧美成人综合在线| AV在线天堂进入| 国产91麻豆视频| 日韩天堂视频| 久久亚洲中文字幕精品一区| 毛片免费高清免费| 极品av一区二区| 亚洲天堂高清| 五月丁香伊人啪啪手机免费观看| 在线五月婷婷| 日韩视频免费| 日本成人一区| 白浆免费视频国产精品视频| 国产迷奸在线看| 日韩午夜片| 中文字幕永久在线观看| 国产乱子伦视频在线播放| 国产精品第一区| 国产91特黄特色A级毛片| 国产情侣一区二区三区| 成人毛片在线播放| 青青草国产一区二区三区| 亚洲国产成人精品一二区 | 国产成人精品视频一区视频二区| 精品国产Av电影无码久久久| 九九免费观看全部免费视频| 国产无码精品在线| 九色在线观看视频| 这里只有精品在线播放| 久久人午夜亚洲精品无码区| 精品国产成人国产在线|