• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      噴碼機(jī)平臺(tái)WinCE5.0系統(tǒng)的BSP開發(fā)

      2014-09-06 10:49:59王宏文李曉燕黃金蘭
      關(guān)鍵詞:噴碼機(jī)開發(fā)板配置文件

      王宏文,李曉燕,黃金蘭

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

      ?

      噴碼機(jī)平臺(tái)WinCE5.0系統(tǒng)的BSP開發(fā)

      王宏文,李曉燕,黃金蘭

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

      基于以S3C2440A處理器為核心的噴碼機(jī)硬件開發(fā)平臺(tái),研究了嵌入式WinCE5.0操作系統(tǒng)板級(jí)支持包BSP的開發(fā)。分析了噴碼機(jī)平臺(tái)的硬件組成和BSP的框架結(jié)構(gòu),利用源代碼重用的思想,完成了Bootloader、OAL、驅(qū)動(dòng)程序、配置文件的開發(fā)工作并在BINFS文件系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)Multi-bin成功將內(nèi)核分塊。實(shí)踐表明該BSP在噴碼機(jī)臺(tái)上運(yùn)行穩(wěn)定,可靠性高,能有效提升系統(tǒng)的開機(jī)速度,并使平臺(tái)擁有了運(yùn)行大型噴印軟件的能力。

      噴碼機(jī);WinCE5.0;Multi-bin;BSP

      引 言

      本文在實(shí)現(xiàn)噴碼機(jī)板載系統(tǒng)一體化的目標(biāo)下,研究了噴碼機(jī)軟件系統(tǒng)開發(fā)的操作系統(tǒng)板級(jí)支持包(Board Support Package,BSP)[1]。

      1 BSP結(jié)構(gòu)概述

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

      2 開發(fā)板的硬件組成

      BSP不僅與特定的操作系統(tǒng)有關(guān),而且與不同的開發(fā)平臺(tái)也是一一對應(yīng)的。噴碼機(jī)系統(tǒng)的硬件平臺(tái)主要由圖1所示的幾大部分組成。

      圖1 開發(fā)板硬件組成

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

      3 BSP開發(fā)

      從零開始研發(fā)BSP成本較高、耗時(shí)長,所以現(xiàn)實(shí)中最常采用的方法是根據(jù)需要對現(xiàn)有的相近BSP源碼進(jìn)行移植。本文就是以相近開發(fā)板的BSP為基礎(chǔ),根據(jù)噴碼機(jī)硬件平臺(tái)的外圍配置,對BSP的源碼做出對應(yīng)的修改,使之能夠有效支持硬件系統(tǒng)。主要工作介紹如下。

      3.1 BootLoader的實(shí)現(xiàn)

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

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

      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

      ……

      匯編程序執(zhí)行完以后,就會(huì)跳轉(zhuǎn)到主程序main函數(shù)中,調(diào)用BLCOMMON庫blcommon.c中定義的BootLoaderMain函數(shù)。由它控制著接下來的整個(gè)代碼執(zhí)行流程,是引導(dǎo)加載程序的主控函數(shù)。

      ① 調(diào)用KerneRrelocate()函數(shù)(blcommon.c中實(shí)現(xiàn)):將BootLoader中的全局變量重新定位到RAM中。

      ② 調(diào)用OEMDebugInit()函數(shù)(main.c中實(shí)現(xiàn)):初始化調(diào)試端口,一般情況下就是異步串行通信口UART,調(diào)用OEMInitDebugSerial()函數(shù)實(shí)現(xiàn)。在噴碼機(jī)平臺(tái)中選擇串口UART0作為調(diào)試端口,查看處理器的芯片手冊,要把通用I/O口的GPH2和GPH3用作功能復(fù)用口,設(shè)置它們?yōu)閁ART0的發(fā)送數(shù)據(jù)引腳TXD與接收數(shù)據(jù)引腳RXD,代碼如下:

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

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

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

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

      UMCON0 = 0x0; //禁用

      ULCON0 = 0x3; //選擇每幀數(shù)據(jù)位數(shù)為8,停止位數(shù)為1,無 //奇偶校驗(yàn)

      UCON0 = 0x245;//選擇串口波特率時(shí)鐘,發(fā)送模式,接收 //模式

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

      //設(shè)置串口波特率

      ③ 調(diào)用OEMPlatformInit()函數(shù)(main.c中實(shí)現(xiàn)):調(diào)用InitDisplay(),InitUSB(),Isr_Init()等函數(shù)完成平臺(tái)初始化工作。

      ④ 調(diào)用OEMPreDownload()函數(shù)(main.c中實(shí)現(xiàn)):當(dāng)平臺(tái)的USB下載不可用時(shí),調(diào)用此函數(shù)完成以太網(wǎng)下載前其他的一些準(zhǔn)備工作。獲得IP地址,初始化TFTP傳輸協(xié)議。

      ⑤ 調(diào)用DownloadImage()函數(shù)(在blcommon.c中實(shí)現(xiàn)):下載操作系統(tǒng)映像到SDRAM中,完成后進(jìn)行TOC簽名的檢查。

      ⑥ 調(diào)用OEMLaunch()函數(shù)(在main.c中實(shí)現(xiàn)):啟動(dòng)操作系統(tǒng)映像。

      3.2 OAL移植

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

      噴碼機(jī)平臺(tái)相較于學(xué)習(xí)板主要是在外圍設(shè)備方面做了變動(dòng),因此這里完成OAL移植的主要工作就是修改板級(jí)OAL代碼,位于WINCE500PLATFORM HARDWAER PLATFORM NAMESRC KERNELOAL。在最后的編譯過程中,OAL是被編譯進(jìn)操作系統(tǒng)內(nèi)核的,因此OAL的啟動(dòng)流程實(shí)際也就是操作系統(tǒng)內(nèi)核的啟動(dòng)流程。圖2是操作系統(tǒng)的初始化啟動(dòng)流程。

      圖2 WinCE5.0內(nèi)核啟動(dòng)順序

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

      ① startup函數(shù)。這是系統(tǒng)啟動(dòng)時(shí)調(diào)用的第一個(gè)函數(shù),主要完成CPU和硬件的初始化等工作。本系統(tǒng)的OAL由BootLoader引導(dǎo),很多硬件設(shè)備已經(jīng)在那里完成初始化,所以此處startup的主要工作就是完成其余部分初始化然后跳轉(zhuǎn)到OAL的主控函數(shù)KernelStart()處開始執(zhí)行。部分代碼如下:

      LEAF_ENTRY StartUp

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

      bl KernelStart

      ENTRY_END

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

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

      s2440IOP->GPBDAT=0x60;

      s2440IOP->GPBUP=0x7FF;

      s2440IOP->GPBCON=0x2A96A8;

      ……

      s2440IOP->GPGCON=0x16A4F3B4;

      s2440IOP->GPGUP=0x9BDC;

      ……

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

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

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

      ⑥ 內(nèi)核初始化函數(shù)KernelInit()。完成初始化系統(tǒng)API函數(shù)調(diào)用表、系統(tǒng)堆、內(nèi)存池、內(nèi)核進(jìn)程和進(jìn)程調(diào)度等工作,由微軟提供。

      ⑦ FirstSchedule()。這實(shí)際上不是一個(gè)函數(shù),而是armtrap.s文件中的一個(gè)標(biāo)簽,使第一個(gè)處于就緒態(tài)的線程執(zhí)行[4]。

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

      3.3 驅(qū)動(dòng)程序的實(shí)現(xiàn)

      如果增加或刪改了目標(biāo)板的硬件設(shè)備,那么移植BSP時(shí),就必須修改設(shè)備驅(qū)動(dòng)程序。WinCE開發(fā)平臺(tái)提供了多種類型的設(shè)備驅(qū)動(dòng)程序,它們的源代碼由兩部分組成:與硬件平臺(tái)無關(guān)的部分位于WINCE500PUBLICCOMMONOAKDRIVERS目錄下,與硬件平臺(tái)有關(guān)的部分位于WINCE500PLATFORM下相應(yīng)BSP目錄的DRIVERS[5]。

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

      3.4 移植配置文件

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

      根據(jù)實(shí)驗(yàn)結(jié)果,導(dǎo)入移植好的BSP編譯出的系統(tǒng)鏡像內(nèi)存太大,燒入噴碼機(jī)平臺(tái)以后系統(tǒng)開機(jī)十分緩慢。因此需要在BINFS基礎(chǔ)上實(shí)現(xiàn)Multi-bin技術(shù)來將內(nèi)核分塊,解決開機(jī)緩慢的問題。其具體實(shí)現(xiàn)主要在配置文件部分:修改config.bib的MEMORY部分如表1所列。

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

      將內(nèi)核分為XIPKERNEL和NK兩塊,開機(jī)必備的內(nèi)容存放在XIPKERNEL中,其他部分存放在NK中按需調(diào)用。經(jīng)過實(shí)踐,XIPKERNEL應(yīng)包含如下的幾個(gè)模塊(添加在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段添加下面兩個(gè)模塊:

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

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

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

      圖3 編譯生成的系統(tǒng)鏡像

      最終將XIP.BIN燒寫到噴碼機(jī)平臺(tái),系統(tǒng)啟動(dòng)時(shí)只需將2 MB的XIPKERNEL復(fù)制到RAM中,而不是原來將近30 MB的NK。

      這樣不僅將開機(jī)時(shí)間降低至10 s以內(nèi),同時(shí)增加了29 MB的可用RAM,使系統(tǒng)擁有了運(yùn)行大型應(yīng)用軟件的能力。

      結(jié) 語

      噴碼機(jī)產(chǎn)品的應(yīng)用領(lǐng)域越來越廣,針對不同的需要設(shè)計(jì)開發(fā)板,在定制系統(tǒng)時(shí)就必須有配套的BSP。移植在滿足應(yīng)用要求的同時(shí)可以大大節(jié)省開發(fā)時(shí)間,減少產(chǎn)品的研發(fā)成本。

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

      [2] 張飛,白瑞林,陸林.WinCE5.0 Bootloader的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(7):232-234.

      [3] 趙永志.WinCE5_0在嵌入式平臺(tái)ARK1200上的移植與應(yīng)用[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.

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

      [5] 李尚柏,鐘瑞.基于ARM的嵌入式Windows CE系統(tǒng)高級(jí)開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2011:192-198.

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

      王宏文(教授),研究領(lǐng)域?yàn)楝F(xiàn)代傳動(dòng)控制系統(tǒng)與智能化工程設(shè)備;李曉燕、黃金蘭(碩士研究生),研究領(lǐng)域?yàn)橹悄芑こ萄b備、嵌入式技術(shù)。

      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)

      猜你喜歡
      噴碼機(jī)開發(fā)板配置文件
      提示用戶配置文件錯(cuò)誤 這樣解決
      船用型材切割智能生產(chǎn)線噴碼機(jī)運(yùn)動(dòng)控制研究
      搭建簡單的Kubernetes集群
      互不干涉混用Chromium Edge
      忘記ESXi主機(jī)root密碼怎么辦
      新型小字符噴碼機(jī)提供高質(zhì)量編碼和可靠性
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      馬肯依瑪士小字符噴碼機(jī)9400系列全新上市
      馬肯依瑪士9000系列新成員9028全新上市
      南投市| 五河县| 阿坝县| 玛多县| 安乡县| 大足县| 建平县| 赞皇县| 平果县| 西青区| 蕲春县| 图木舒克市| 南宁市| 法库县| 濮阳县| 澄城县| 邯郸县| 齐河县| 桃源县| 清徐县| 全南县| 日照市| 安多县| 台东市| 昌图县| 安吉县| 鄱阳县| 新丰县| 蓝山县| 渑池县| 沙坪坝区| 南江县| 洛阳市| 芜湖市| 东丰县| 林州市| 即墨市| 六安市| 呼伦贝尔市| 托克托县| 大同市|