嵌入式軟件開發(fā)課件_第1頁
嵌入式軟件開發(fā)課件_第2頁
嵌入式軟件開發(fā)課件_第3頁
嵌入式軟件開發(fā)課件_第4頁
嵌入式軟件開發(fā)課件_第5頁
已閱讀5頁,還剩397頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

BSP開發(fā)板級支持包(BSP)簡介BSP是在標準開發(fā)板上運行的一部分軟件,主要功能是支持操作系統(tǒng)的引導(dǎo)與開發(fā)。通過BSP我們可以在開發(fā)板上快速的啟動操作系統(tǒng)以及分析操作系統(tǒng)的性能。有了BSP的支持,各個OEM(原始設(shè)備制造商)廠商和獨立硬件開發(fā)商就可以縮短基于WindowsCE平臺產(chǎn)品的開發(fā)周期。CPU支持包(CSP)&OEM抽象層(OAL)OAL:OEM抽象層位于WindowsCE系統(tǒng)內(nèi)核和目標板硬件之間,負責(zé)操作系統(tǒng)和目標板的通信。由引導(dǎo)程序調(diào)用,隨后進行目標板的初始化工作,包括中斷服務(wù),實時時鐘,內(nèi)部計時器,調(diào)試部件,中斷使能等等由硬件OEM廠商提供CPU支持包(CSP)&OEM抽象層(OAL)CSP:CPU支持包包括用以支持特定CPU和相關(guān)芯片的OEM抽象層和設(shè)備驅(qū)動,這一部分是與特定開發(fā)板無關(guān)的。通常由操作系統(tǒng)開發(fā)商提供,WinCE操作系統(tǒng)是由微軟公司開發(fā)的。板級支持包的組成內(nèi)容描述引導(dǎo)程序加載操作系統(tǒng)映象OEM抽象層(OAL)連接內(nèi)核映象,支持硬件的初始化和管理設(shè)備驅(qū)動支持相關(guān)外圍設(shè)備以及動態(tài)安裝的設(shè)備配置文件可以通過對環(huán)境變量、.bib文件和and.reg文件的修改來重新配置BSPBSP架構(gòu)硬件抽象層驅(qū)動配置文件引導(dǎo)程序標準開發(fā)板BSP創(chuàng)建BSP的兩種方法編寫全新的BSP需要編寫所有的部分包括OEM抽象層,驅(qū)動,引導(dǎo)程序大約消耗20人/月工作量改寫現(xiàn)有的BSP對與目標板具有相似硬件組成的BSP的基礎(chǔ)上進行某些改寫,使其適用與目標板,這是最簡單的方式。BSP向?qū)旅媸莿?chuàng)建基于WindowsCE的BSP的一般步驟,典型的情況下會產(chǎn)生一個.cecw文件Platform->BSPWizardBSP開發(fā)流程如果操作系統(tǒng)映象可以直接引導(dǎo),引導(dǎo)程序不是必須的但通常使用一個引導(dǎo)程序,以便日后的擴充。另外也可以用于支持制造過程中的下載測試

引導(dǎo)程序的重要性在于可以支持開發(fā)過程中的運行時映象加載功能,也就是說在系統(tǒng)運行過程中,動態(tài)加載需要調(diào)試的模塊引導(dǎo)程序(可選)引導(dǎo)程序的功能初始化目標設(shè)備內(nèi)存和中斷控制器設(shè)置時鐘和內(nèi)存管理單元直接引導(dǎo)現(xiàn)存的flash或RAM映象下載之前清空RAM內(nèi)存讀寫測試下載WindowsCE映象到RAM或flash:并口網(wǎng)卡引導(dǎo)程序的加載引導(dǎo)菜單引導(dǎo)程序的開發(fā)實現(xiàn)OEM的應(yīng)用程序接口(API).連接Microsoft提供的庫引導(dǎo)程序的任務(wù)黑體字標識的函數(shù)需要由OEM廠商來實現(xiàn).控制流圖C:\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON引導(dǎo)程序–StartUp函數(shù)硬件復(fù)位和運行時復(fù)位需要執(zhí)行的第一條指令設(shè)置為超級用戶模式執(zhí)行必須的硬件初始化:CPU內(nèi)存控制器系統(tǒng)時鐘串口緩存快表(TLBs)根據(jù)使用的CPU修改Startup.s引導(dǎo)程序--EbootMainEbootMain是C代碼運行的入口調(diào)用BLCOMMON庫BLCOMMON庫源文件在Blcommon.c文件中,路徑為%_WINCEROOT%\Public\Common\Oak\Drivers\Ethdbgdirectory引導(dǎo)程序–OEMDebugInit用來初始化串行口,作為調(diào)試輸出

OEMDebugInit初始化完成后,一個WindowsCE的標記會出現(xiàn),表示這個接口可以使用了.引導(dǎo)程序--OEMPlatformInit各種OEM硬件平臺初始化函數(shù),包括時鐘,PCI接口,或者NIC接口.NIC接口用于下載映象,另外服務(wù)于后面一些函數(shù).引導(dǎo)程序--OEMPreDownload在加載一個運行時映象時首先被BLCOMMON調(diào)用.查找硬件設(shè)備的IP地址,并與宿主機相連如果出錯返回-1引導(dǎo)程序--OEMLaunchOEMLaunch是引導(dǎo)程序的最后一個需要運行的函數(shù).負責(zé)跳轉(zhuǎn)的到需要運行的映象.跳轉(zhuǎn)到由dwLaunchAddr指定的第一條指令,這條指令在運行時映象的啟動函數(shù)里.OAL開發(fā)類似于引導(dǎo)程序的開發(fā)可以重用引導(dǎo)部分的代碼OAL架構(gòu)內(nèi)核開發(fā)

黑體顯示的函數(shù)需要由OEM廠商來實現(xiàn)內(nèi)核工作流KITL這樣的設(shè)計可以很容易加入任何調(diào)試服務(wù)功能把通信協(xié)議和與之直接通信的硬件層分離開來減少用戶在創(chuàng)建硬件獨立層的工作量在系統(tǒng)映象中包含對KITL的支持啟動流程CPU加電,跳轉(zhuǎn)到復(fù)位向量[可選]引導(dǎo)程序從Startup()開始執(zhí)行執(zhí)行OAL中的Startup()KernelStart()[KernelInitialize()Forx86]Kernel調(diào)用OAL中的OEMInit()完成內(nèi)核初始化內(nèi)核加載Filesys.exeFileSys初始化注冊表內(nèi)核加載在HKEY_LOCAL_MACHINE\Init中列出的應(yīng)用程序驅(qū)動程序開發(fā)參見前面的課程.利用BSPWizard可以添加到BSP中舉例:

分析MotorolaDragonBallBSP我們已經(jīng)學(xué)習(xí)過什么?我們系統(tǒng)、完整地學(xué)習(xí)了WindowsCE開發(fā)流程.從設(shè)備制造商得到硬件和BSP需要設(shè)計硬件?設(shè)計實現(xiàn)你的硬件為硬件設(shè)計BSP需要定制平臺?從設(shè)備制造商處得到平臺和SDK定制你的WinCE平臺導(dǎo)出你的SDK編碼、測試發(fā)布產(chǎn)品綜述WindowsCE測試工具包(CETK)Tux“server”Kato日志引擎設(shè)備驅(qū)動加載以及TUX擴展(DDLX)常規(guī)TUX測試CETK結(jié)構(gòu)Microsoft提供了自動測試體系結(jié)構(gòu)Client/Server結(jié)構(gòu)支持遠端測試通過“Tux”加載自動測試實際的測試是以DLLs的形式通過TUX加載到系統(tǒng)中通用日志引擎“Kato”DLLexposesCandC++APIforloggingtotheserverCETKServer利用TUX啟動特定的測試保存日志以及產(chǎn)生報告運行于桌面系統(tǒng)以便進行遠程測試WindowsCE測試工具包(CETK)TUXServerTUX.EXE監(jiān)控TUX測試DLLs的程序?qū)嶋H的測試是以DLL的形式進行的通過TUX.EXE加載測試DLL由遠端用戶界面應(yīng)用程序發(fā)起運行桌面系統(tǒng)上的CETEST.EXE也可以在設(shè)備上獨立運行KATO日志引擎DLL:提供API,以便將測試結(jié)果保存成日志C++類庫C函數(shù)從TUX測試抽象出日志機制本地文件遠端連接設(shè)備驅(qū)動加載以及TUX擴展(DDLX)允許測試DLL加載到設(shè)備管理進程空間允許對APIs和功能的測試僅僅對設(shè)備管理模塊可用設(shè)備管理模塊直接向驅(qū)動提供APIs驅(qū)動可以直接為其他驅(qū)動提供服務(wù)常規(guī)的TUX測試TUXSKEL微軟提供的TUX測試構(gòu)架作為一個最初的“模板”用來創(chuàng)建常規(guī)TUX測試IDENewProjectWizard產(chǎn)生一個基于TUXSKEL結(jié)構(gòu)的常規(guī)TUX測試比手工復(fù)制和修改TUXSKEL要簡單WindowsCE系統(tǒng)架構(gòu)概述系統(tǒng)架構(gòu)NK.EXEFILESYS.EXEDEVICE.EXEGWES.EXESERVICES.EXEThreadMigrationWindowsCE系統(tǒng)架構(gòu)NK.EXENK.LIB+OAL.LIB=NK.EXE內(nèi)核是硬件體系結(jié)構(gòu)無關(guān)但是是處理器相關(guān)的OAL越小越好微軟提供了預(yù)先編譯的NK.LIB庫文件NK.lib的大多數(shù)代碼都是公開的通過高級代碼共享,可以得到更多代碼提供:內(nèi)存管理調(diào)度管理系統(tǒng)調(diào)用轉(zhuǎn)發(fā)實現(xiàn)了一些基本的Win32函數(shù)NK.EXEOALRAMROM/FLASHTimerINTCCPUProtectedServerLibraries(PSL)實現(xiàn)API的系統(tǒng)函數(shù)把操作系統(tǒng)的功能放在多個進程的機制PSLCallsrunthroughtheKernel(NK.EXE)不對最終用戶開放你不能創(chuàng)建一個PSLGWES.EXE圖形窗口事件系統(tǒng)(GWES)管理所有的圖形界面處理以及用戶輸入桌面的USER32+GDI32作為一個單獨的進程DEVICE.EXE設(shè)備管理器電池驅(qū)動已經(jīng)被從GWES中拿走了大多數(shù)功能都放在了devmgr.dll中。提供所有的與驅(qū)動相關(guān)的函數(shù)實現(xiàn)在啟動的時候通過注冊表加載驅(qū)動程序Services.EXE所有服務(wù)的宿主進程與Device.exe分開FTP,TELNET,HTTPD(Web),UPnP,SMB,其它…用戶可以添加服務(wù)提供命令行工具來啟動、關(guān)閉服務(wù)提供API管理服務(wù)文件系統(tǒng)所有與文件系統(tǒng)相關(guān)的函數(shù)都在FileSys.exe中實現(xiàn)單根“\”,沒有像“C:\”一樣的盤符有三個組件:對象存儲存儲管理器ROM文件系統(tǒng)文件系統(tǒng)概述目標存儲被FileSys.exe管理的一個堆包括:RegistryDatabaseRAM文件系統(tǒng)RAM文件系統(tǒng)通常位于根目錄Ex:“\myfile.txt”存在于RAM中ROM文件系統(tǒng)被映射成“\Windows”目錄“\Windows”目錄中所有的文件都是只讀的通常是nk.bin或nk.nb0中的文件存儲管理負責(zé):StoragedevicedriverPartitiondevicedriverFileSystemdevicedriverFileSystemfilter線程遷移CreateFile(…)概述進程線程虛擬內(nèi)存WindowsCE內(nèi)核特征多進程可以支持最多32個進程多線程支持256個線程優(yōu)先級Fibers只能被應(yīng)用程序手工調(diào)度的執(zhí)行單元同步對象CriticalSections,Mutexes,Semaphores,Events,MessageQueues內(nèi)存模型Virtualmemory,CodesectionsPaged,NobackingstoreforDatasections進程靜態(tài)上下文,線程的容器進程不被執(zhí)行,線程被執(zhí)行

系統(tǒng)中同時最多只能有32個進程:對大多數(shù)嵌入式系統(tǒng)來說都已經(jīng)足夠。推薦用多線程而不是多進程迎合一些體系結(jié)構(gòu)的支持WindowsCE使用與WindowsXP一樣的加載/卸載模型(與其它桌面Window一樣)支持命令行程序但是與桌面Win32API不一樣調(diào)用CreateProcess()啟動進程線程Win32的執(zhí)行的單元按照優(yōu)先級調(diào)度高優(yōu)先級的線程會搶占低優(yōu)先級的線程同樣的優(yōu)先級使用Round-Robin算法默認的時間片是100毫秒,OEM可以在OAL中重新設(shè)置線程調(diào)度線程A擁有最高的優(yōu)先級,他會一直執(zhí)行直到結(jié)束或阻塞線程B和C使用Round-Robin算法運行在round-robin每個線程都運行一個固定的時間,叫做時間片優(yōu)先級數(shù)字越小,優(yōu)先級越高線程優(yōu)先級分布圖(例)PriorityComponent0-19Open–RealTimeAboveDrivers20GraphicsVerticalRetrace99PowermanagementResumeThread100-108USBOHCIUHCI,Serial109-129IRSIR1,NDIS,Touch130KITL131VMini132CxPort145PS2Keyboard148IRComm150TAPI248PowerManagement249WaveDev,Mouse,PnP,Power250WaveAPI251Normal252-255Open-Applications優(yōu)先級反轉(zhuǎn)AvoidpriorityinversionbykeepingallthreadswaitingforsameresourceatthesamepriorityThread3HighPriorityMediumPriorityLowPriorityThread3ResourceOwner:Thread2Thread1Thread1Priority

InversionPreemptPreemptBlockedPriority

RestoredThread3Example:Thread1blockedwaitingforresourceownedbyThread3,causingPriorityInversionThread3BlockedThread1Thread2BlockedThreadAPI線程創(chuàng)建CreateThread–創(chuàng)建一個普通優(yōu)先級的線程線程優(yōu)先級GetThreadPriority–當前線程的優(yōu)先級SetThreadPriority–改變當前線程的優(yōu)先級(251)CeGetThreadPriority–得到實時線程的優(yōu)先級CeSetThreadPriority–改變實時線程的優(yōu)先級線程睡眠Sleep(0)–放棄剩余的時間片Sleep(n)–睡指定的毫秒Sleep(INFINITE)SleepTillTick–睡到下一個系統(tǒng)嘀嗒SuspendThread–增加休眠的引用計數(shù)ResumeThread–減少休眠的引用計數(shù)進程&線程WindowsCE進程不支持環(huán)境變量_wfopen(L“%WINDOWS%\\a.txt”,L“w”); //errorWindowsCE進程不支持當前目錄_wfopen(L“a.txt”,L“w”); //error,firstsearchrootdirectory,thensearch\Windowsdirectory.同步對象線程需要同步對象在某些時候進行同步操作。同步對象類型CriticalSectionMutexSemaphoreEvent也可以使用子增函數(shù)或者點對點消息隊列同步(CriticalSections)概覽允許多個線程共享訪問同一塊數(shù)據(jù)使用互斥訪問保護數(shù)據(jù)其他線程會block直到占有者放棄臨界區(qū)每個CS都是OS提供的一個數(shù)據(jù)結(jié)構(gòu),只能在同一個進程內(nèi)部使用,比MUTEX要高效。函數(shù)InitializeCriticalSection分配CRITICAL_SECTION結(jié)構(gòu)EnterCriticalSection調(diào)用著在占有CS的人調(diào)用LeaveCriticalSection之前會阻塞TryEnterCriticalSectionEnterCriticalSection的非阻塞版LeaveCriticalSection釋放CriticalSection的所有權(quán)DeleteCriticalSection釋放InitializeCriticalSection分配的資源同步對象(Mutexes)概覽同一時刻只有一個線程可以擁有mutex全局名稱的Mutex可以跨進程使用。在沒有線程擁有它時處于signal狀態(tài)被線程擁有的時候處于非signal狀態(tài)函數(shù)CreateMutex創(chuàng)建一個有名或無名的Mutex對象WaitForSingleObjectorWaitForMultipleObject調(diào)用著在占有Mutex的人釋放之前會阻塞ReleaseMutex釋放對Mutex對象的占有CloseHandle刪除Mutex對象同步對象(Semaphores)概覽限制占有共享資源的數(shù)量全局名稱的Semaphores可以跨進程使用。引用計數(shù)大于零時處于signal狀態(tài)引用計數(shù)小于等于0時處于非signal狀態(tài)函數(shù)CreateSemaphore創(chuàng)建一個有名或無名的Semaphore對象WaitForSingleObjectorWaitForMultipleObject調(diào)用者在計數(shù)是非0之前阻塞ReleaseSemaphore增加Semaphore的引用計數(shù)CloseHandle刪除Semaphore對象同步對象(Events)概覽全局名稱的Event可以跨進程使用。事件發(fā)生時處于Signal狀態(tài)時間未發(fā)生時處于非signal狀態(tài)函數(shù)CreateEvent–

創(chuàng)建一個有名或無名的事件對象SetEvent–

把事件對象設(shè)置為signal狀態(tài)ResetEvent–

把事件設(shè)置為非signal狀態(tài)PulseEvent–

把事件設(shè)置為signal狀態(tài),然后在釋放一定量的線程之后,轉(zhuǎn)回非signal狀態(tài)WaitForSingleObjectorWaitForMultipleObject–

調(diào)用者阻塞直到某一事件達到signal狀態(tài)CloseHandle–

銷毀事件對象同步(InterlockedFunctions)概覽對多個線程對同一個變量的共享訪問保護提供原子操作函數(shù)InterlockedIncrement–

對一個變量進行原子加1操作InterlockedDecrement-對一個變量進行原子減1操作InterlockedExchange–

對兩個變量進行交換值操作InterlockedTestExchange–

如果變量符合,則交換兩個變量的值InterlockedCompareExchange–

基于比較,交換兩個變量的值同步(PTP消息隊列)概述允許擁有多個用戶定義的消息隊列的使用者存在高優(yōu)先級和報警消息函數(shù)CreateMsgQueue–創(chuàng)建或打開一個消息隊列OpenMsgQueue–對一個現(xiàn)存的消息隊列打開一個句柄CloseMsgQueue–關(guān)閉一個打開的消息隊列ReadMsgQueue–從消息隊列中讀一個消息WriteMsgQueue–向消息隊列寫一條消息GetMsgQueueInfo–返回有關(guān)一個消息隊列的信息內(nèi)存管理*只在桌面Windows上存在PhysicalMemory*StorageDeviceVirtualMemoryLogicalMemory(Heap,stack)CRuntime(mallc,new…)Application內(nèi)存結(jié)構(gòu)物理內(nèi)存在內(nèi)部或外部總線上可訪問的實際的RAM/ROM虛擬內(nèi)存通過內(nèi)存管理單元MMU轉(zhuǎn)換過的虛擬地址允許代碼在需要的時候再換入虛擬內(nèi)存虛擬內(nèi)存管理WindowsCE為所有進程提供平板的4GB虛擬地址空間系統(tǒng)仍然對每個進程提供保護允許快速的進程間線程切換使用虛擬內(nèi)存申請大塊虛擬內(nèi)存WindowsCE把虛擬內(nèi)存分成64K的塊使用本地堆內(nèi)核為你的應(yīng)用程序保留的虛擬地址使用棧存放函數(shù)內(nèi)部使用的臨時數(shù)據(jù)的區(qū)域MemoryMapping(Shared)ReservedSlot32:Process32...Slot1:XIPDLLCodeSlot0:ActiveProcess2GB2GB32MB概述虛擬內(nèi)存模型靜態(tài)映射的虛擬內(nèi)存進程模型進程內(nèi)存進程模塊堆棧虛擬內(nèi)存模型虛擬內(nèi)存一個32-bit(4Gigabyte)平板式虛擬內(nèi)存地址空間提供了被保護物理內(nèi)存的有效使用虛擬地址內(nèi)存管理單元(MMU)“擁有”物理內(nèi)存MMU將虛擬地址轉(zhuǎn)換為物理地址一個有效的虛擬地址必須被映射到一個物理地址虛擬地址的靜態(tài)和動態(tài)映射物理地址在上電時,在MMU有效之前只被CPU使用虛擬內(nèi)存模式特權(quán)模式在內(nèi)核模式和用戶模式間的虛擬內(nèi)存split所有的進程共享同一個平板式虛擬內(nèi)存地址空間

通過MMU內(nèi)核模式管理用戶模式進程保護內(nèi)核空間只被特權(quán)訪問的內(nèi)核模式代碼使用(Kmode)大多數(shù)是靜態(tài)虛擬地址映射(不會有頁內(nèi)錯誤)用戶空間每32MB由64個slots組成大多數(shù)是動態(tài)虛擬地址映射虛擬內(nèi)存模式KernelSpaceUser

SpaceKernelAddresses:KPAGE,TrapArea,OthersSlot97:NK.EXEUnusedStaticallyMappedVirtualAddresses:Un-CachedStaticallyMappedVirtualAddresses:CachedSlot0–CurrentProcessSlot1–XIPDLLcodeSlots2-32-ProcessesSlots33-63ObjectStoreand

Memory-MappedFilesFFFFFFFFE0000000C4000000C2000000C0000000A0000000800000007FFFFFFF42000000040000000200000000000000Total4GBVirtual

Space2GB2GBKernelSpaceUserSpaceUnused靜態(tài)映射虛擬地址2GB

User512MB

Uncached512MB

Cached32MBFlashPhysicalMemoryVirtualMemory040000008200000080000000A0000000C00000000000000064MBRAM0000000064MBRAM32MBFlash64MBRAMFFFFFFFFAddress

Translation32MBFlashKernelSpaceUser

SpaceProcessModel虛擬地址Slots每個slot是32MB(225bytes)虛擬地址空間Slot空間被進程,DLLs,和虛擬分配共享在進程slot間快速進行上下文切換(交換頁表)當前線程執(zhí)行在slot0上管理粒度虛擬地址空間以64KB的粒度被分割物理地址以4KB的粒度被頁進行管理分配規(guī)則DLL分配從高地址開始向下增長進程分配從低地址開始向上增長Lesson:ProcessMemorySlot30Slot31Slot32...01FFFFFF000100000000000032MBProcessSpaceCurrentProcessXIPROMDLLsnk.exefilesys.exeshell.exedevice.exegwes.exeC4000000C2000000FreeVirtualSpaceSlot63...ResourceDLLsSlot2Slot3Slot4Slot5Slot1Slot00A0000003E0000003C000000400000004200000000000000040000000200000006000000080000000C000000...Slot97800000007E000000模塊模塊標準的Win32Portable可執(zhí)行文件格式標準的Win32工具(符號,數(shù)字信號,等等)動態(tài)連接庫(DLL)用于輸入和輸出進程的可裝載庫不同的實例數(shù)據(jù)執(zhí)行在同一物理拷貝上被當前進程激活/撤銷控制請求頁面調(diào)度將頁面從存儲器中提交/拷貝到RAM中用于執(zhí)行對于基于非壓縮ROM的模塊的在線執(zhí)行(XIP)解壓基于ROM模塊到RAM中系統(tǒng)API調(diào)用機制Coredll.dll定位每一個進程slot的頭地址從用戶模式的線程實現(xiàn)對系統(tǒng)API的調(diào)用直接實現(xiàn)一些系統(tǒng)API的調(diào)用引起一個例外(陷阱)轉(zhuǎn)遞到系統(tǒng)API的請求上內(nèi)核捕獲系統(tǒng)API請求的異常陷阱分配一個系統(tǒng)exe去執(zhí)行請求用戶模式的線程切換到系統(tǒng)exe進程空間用戶模式的線程繼承當前進程的訪問權(quán)限系統(tǒng)API調(diào)用機制UsermodethreadWin32APIThunksFunctionCallCoredll.dllApp.exeKernel

TrapWin32APIDispatchNk.exeJumpFunctionCodesystemEXEKernel

CallReturn

Call堆用法以字節(jié)為粒度來分配內(nèi)存獨立于處理器(隱藏了內(nèi)存分頁)自動的分配內(nèi)存和按要求提交頁不可變更(當整個堆被釋放時進行頁面回收)使用首次適應(yīng)算法(first-fitalgorithm)通過堆列表進行管理使用相同大小對象分配時效率最高局部堆在裝載處理時保留192KB虛擬內(nèi)存提交進程分配的物理頁面Private堆保留最初的固定和可擴展堆空間一系列多線程的互斥對象Shared堆對于當前進程可寫,對于其它進程只讀棧用法存儲在一個函數(shù)中使用的臨時數(shù)據(jù)存儲在執(zhí)行處理過程中的處理器寄存器的狀態(tài)為每一個線程創(chuàng)建時分配默認的棧按要求提交大小依賴于CPU默認的棧大小/STACK連接器切換決定默認線程的棧大小默認情況,一個進程的所有線程擁有相同的棧大小使用/GS連接器檢查??词欠裼芯彺嬉绯鯣etThreadCallStack–恢復(fù)一個線程調(diào)用棧WindowsCE簡介演示:

HelloWindowsCE!WinCE能做什么:手機WinCE能做什么:PDA便攜式多媒體設(shè)備WinCE能做什么:游戲機LinuxWindowsWinCE能作什么:汽車電子BMWCitro?nClarionCo.Ltd.DaimlerChryslerFiatSubaruHondaHyundaiMitsubishiToyota…WinCE能做什么:其它網(wǎng)關(guān)工業(yè)控制機頂盒醫(yī)療設(shè)備銀行ATM系統(tǒng)放映機和大屏幕顯示器VoIP設(shè)備…WindowsCE發(fā)展歷史1996年發(fā)布WindowsCE1.0WindowsCE.NET4.x被廣泛應(yīng)用最新版WindowsCE5.0WindowsCE特點與桌面版本比較:

硬件平臺桌面版WindowsOnlyruns

onx86architectureWindowsCEARM/XscaleMIPSPowerPCSHx86WindowsCE特性WindowsCE能運行在不同的硬件平臺之上:是如何實現(xiàn)的?NewPlatformWizard答案是BSP!BSP介紹BSP(BoardSupportPackage,板級支持包)是用來支持OEM適配層(OEMadaptationlayer,OAL)和軟件開發(fā)板(softwaredevelopmentboard,SDB)的設(shè)備驅(qū)動的這部分軟件。HardwareOperatingSystemBoardSupportPackage與桌面版本比較:

鏡像大小桌面WindowsWindows3.x:2-5MBWindows98:400MBWindowsXP:1.5GB越來越大…不能定制WindowsCE最小:200KB網(wǎng)絡(luò)部分大約800KBGWES,ShellandApps大約4MB

InternetExplorer大約3MBWindowsCE特性組件化200多個可選組件快速方便地針對特定應(yīng)用系統(tǒng)定制OS與桌面版比較:

實時性桌面Windows不具有實時性WindowsCE線程優(yōu)先級256級中斷嵌套每個線程都有獨立的時鐘嘀嗒處理優(yōu)先級反轉(zhuǎn)WindowsCE特性:WindowsCE支持實時性實時性對于時限要求嚴格的系統(tǒng)非常關(guān)鍵與桌面版比較:

電源管理桌面Windows電源管理實現(xiàn)差WindowsCE電池供電/AC供電各設(shè)備的電源使用狀況關(guān)閉不必要的設(shè)備WindowsCE特性:WindowsCE提供電源管理器,用來管理設(shè)備供電系統(tǒng),增加電能的使用效率WindowsCE能夠減少設(shè)備的能量損耗,在系統(tǒng)復(fù)位、開啟、休眠和掛起狀態(tài),維持和保護RAM上的文件系統(tǒng)與桌面版比較:

編程接口桌面WindowsASCII/UNICODE豐富的API強有力的硬件平臺WindowsCE只支持UNICODE部分Win32API,MFC等有限的硬件資源WindowsCE特性:WindowsCE只支持UNICODECHAR->TCHAR/WCHARstrlen->wcslen部分API功能受限運行WindowsCE的系統(tǒng)通常資源受限與桌面版比較:

微內(nèi)核桌面WindowsNT系列力求微內(nèi)核9xseries不是微內(nèi)核WindowsCE微內(nèi)核文件系統(tǒng)和設(shè)備驅(qū)動運行在用戶模式內(nèi)核負責(zé)傳遞消息WindowsCE特性:微內(nèi)核增強的可靠性增強的可擴展性與桌面版比較:

共享源代碼桌面Windows商業(yè)軟件,源代碼是微軟的一級機密WindowsCEWindowsCE公開了70%的源代碼用戶可以對它進行修改WindowsCE特性:源代碼共享用戶可以在“%_WINCEROOT%\private”文件夾中找到公開的源代碼與其它嵌入式OS比較:

多媒體支持其它嵌入式OS:對音視頻支持有限沒有商業(yè)的網(wǎng)站瀏覽器WindowsCE友好的用戶界面WindowsMediaPlayer9,支持mp3,wav,avi,wmv…InternetExplorer6&PocketIEWindowsCE特性:友好的用戶界面強大的多媒體支持與桌面版windows相兼容PocketWord,Excel,PowerPoint,adobereaderPocketMSNmessengerPocketIE,WindowsMediaPlayerSQLServerCEeditionACDSee…

…與其它的嵌入式OS比較:

編程接口OtherEOS:不同的編程接口常用的C/C++&j2meWindowsCEWin32APIMFC,ATL,STL…COM,ActiveX.NETCompactFrameworkJavaVMEVB,EVC…WindowsCE特性:對于Windows程序員來說容易上手支持多種編程語言與其它的嵌入式OS比較:

鏡像大小和實時性其它嵌入式OS:RTLinux,μC/OS-II支持硬實時Vxworks最小:8kμC/OS-II最小:2kWindowsCE非硬實時系統(tǒng)對于一些特殊的應(yīng)用鏡像可能過大WindowsCE優(yōu)點:豐富的可選組件和功能定制方便易使用與桌面版windows編程接口類似具有豐富的微軟及第三方應(yīng)用支持WindowsCE缺點:對于一些特殊的應(yīng)用,鏡像可能過大實時性?非免費:3$perruntimelicense995$forPlatformBuilder性能和安全性?作業(yè)用PlatformBuilder創(chuàng)建一個自己的WindowsCE平臺,并運行它。熟悉WindowsCEGUI,文件系統(tǒng),控制面板…用PlatformBuilder完成一個tic-tac-toe程序,在你自己的WindowsCE平臺上運行它。

操作系統(tǒng)開發(fā)介紹PlatformBuilder一個定制基于WindowsCE的平臺定制集成開發(fā)環(huán)境(IDE)提供所有與基于WindowsCE平臺設(shè)計、創(chuàng)建、編譯、測試和調(diào)試相關(guān)的開發(fā)工具該集成開發(fā)環(huán)境提供統(tǒng)一的與平臺和項目相關(guān)的工作空間

PB能做什么?(1)平臺向?qū)椭銊?chuàng)建一個新的平臺(platform)BSP向?qū)椭銊?chuàng)建新的板級支持包(BSP)目錄(Catalog)顯示用戶定制的平臺OS屬性列表依賴性自動監(jiān)測(Automateddependencychecking)可以確保與平臺相關(guān)的所有屬性都會被包含在OS鏡像中

導(dǎo)出向?qū)Э梢詫?dǎo)出目錄中的屬性給其它PB使用者

基本配置(Baseconfigurations)是創(chuàng)建用戶特定定制OS的起點PB能做什么?(2)WindowsCE測試套件(TestKit)提供了整套驅(qū)動測試工具

內(nèi)核調(diào)試器可以調(diào)試定制的OS鏡像,同時提供給用戶鏡像運行狀況的信息

應(yīng)用調(diào)試器可以調(diào)試在特定OS上運行的應(yīng)用程序

遠程工具可以調(diào)試基于WindowsCE的目標機上運行任務(wù),并獲取相關(guān)信息

模擬器通過模擬硬件可以加快和簡化開發(fā)過程,使用戶可以在宿主機上完成平臺和應(yīng)用程序的初步開發(fā)

SDK導(dǎo)出向?qū)Э梢詾橛脩魧?dǎo)出一個特定的軟件支持包(softwaredevelopmentkit—SDK).平臺向?qū)?PlatformWizard)平臺向?qū)椭阋徊讲降膭?chuàng)建一個基于WindowsCE的平臺使用平臺向?qū)У?步選擇一個安裝的BSP為你的設(shè)備選擇一個基本平臺配置

為你的設(shè)備選擇配置變量

為你的平臺選擇其它的屬性PlatformBuilder用戶界面TextEditorWorkspaceWindowSearchTextConnectivityDeviceNameOutputWindowsDebugtoolstatusindicatorsMultipleviewsoftheworkspaceBuildConfiguration目錄(Catalog)包含BSPs,驅(qū)動,OS內(nèi)核配置和平臺管理器等,在目錄中出現(xiàn)的所有項目包含了你所設(shè)計的CE平臺所使用到的屬性BSP:BoardSupportPackagesCoreOS:includesheadlessdevicesanddisplay-baseddevices:ApplicationsandServicesDevelopmentApplications-EndUserCommunicationServicesandNetworkingCoreOSServicesFileSystemsandDataStoreFontsInternationalInternetClientServicesMultimediaTechnologiesSecurityShellandUserInterfaceDeviceDriversPlatformManager目錄(Catalog)項屬性組(FeatureGroup)和屬性(Feature)屬性組定義了通用的屬性而沒有定義具體的實現(xiàn)。屬性組在你選擇一個實現(xiàn)的時候才被解析,這個實現(xiàn)決定了它的具體功能。一個屬性是OS組件的任何一個邏輯群Feature圖標圖標描述BSPCoreOSdesignCatalogitemgroup.RequiredCatalogitem.OptionalCatalogitem.Catalogitem,type,orimplementationexcludedfromthecurrentOSdesign.FolderCatalogitemthathasoneormorespecialnotifications.CatalogpropertiesforaspecificimplementationofaCatalogitem.Implementation

Feature圖標(2)圖標描述User-specifiedCatalogitem.Catalogitem(optional).Catalogitemthatcanbebuiltbutisexcludedfromtherun-timeimage.Catalogitemexcludedfromthebuildandtherun-timeimage.Sourcecodefile.Feature選項顯示備選feature信息.Feature依賴關(guān)系顯示備選feature的依賴關(guān)系挑戰(zhàn)了解盡可能多的features挑戰(zhàn)豐富的經(jīng)驗和知識沒有這些不能設(shè)計合理的平臺WindowsCE上可以使用簡體中文?WindowsCE支不支持VBScript?關(guān)于屬性的功能可參照:有關(guān)WindowsCE.NET->CatalogFeaturesPlatformSetting使你可以瀏覽和修改關(guān)于整個平臺的每個屬性的選項菜單:Platform->Settings…BuildOptions(1)EnableCETargetControlSupport選擇該選項可以在啟動時使能目標控制功能(targetcontrolsupport).選擇這一項同時也打開了內(nèi)核無關(guān)傳輸層(KernelIndependentTransportLayer—KITL).EnableEbootSpaceinMemory

選擇該選項可以在Config.bib文件中預(yù)留內(nèi)存空間,允許在啟動過程中操作系統(tǒng)可以讀取bootloader存儲的數(shù)據(jù).EnableEventTrackingduringBoot選擇該選項可以開啟事件跟蹤子系統(tǒng)(event-trackingsubsystem).EnableFullKernelMode

選擇該選項可使線程運行在內(nèi)核模式,選擇該模式會使系統(tǒng)較脆弱,但是性能會有所提高.EnableImageforFlash選擇該選項可以使編譯好的鏡像下載后被燒寫的到Flash中BuildOptions(2)EnableKernelDebugger

允許調(diào)試器建立宿主機和目標機間的鏈接和傳送調(diào)試信息EnableKITL

要建立宿主機和目標機間的通訊就必須選擇該選項,取消該項也會同時取消被選定的“EnableCETargetControlSupport”選項EnableProfiling選擇該選項可以將WindowsCE的有關(guān)內(nèi)核的信息以日志的形式裝入平臺鏡像中EnableShipBuild這是一個有條件編譯的標志,設(shè)置它表示OS會提供詳細的調(diào)試信息來幫助調(diào)試.FlushEventstoReleaseDirectory選擇該選項將事件放入release目錄,同時開啟事件跟蹤平臺配置文件PlatformBuilder使用兩類配置文件:

原碼配置文件Build工具使用原碼配置文件去build模塊、屬性,同時為你的OS鏡像build原碼

鏡像配置文件MakeBinaryImage工具調(diào)用相應(yīng)的工具,這些工具使用鏡像配置文件來產(chǎn)生OS鏡像原碼配置文件文件類型描述DirsFile描述包含源代碼的子目錄SourcesFile包含要編譯的代碼及宏MakefileFileMakefile鏡像配置文件參數(shù)視圖配置文件:.BIB文件表明應(yīng)該被包含在鏡像中的模塊和組件包含4個部分的文本文件:文件部分:為靜態(tài)數(shù)據(jù)文件預(yù)留的內(nèi)存模塊部分:指定被裝載到內(nèi)存中的目標模塊;Name Path MemoryTypeTahoma.ttf $(_FLATRELEASEDIR)\Tahoma.ttfNK SHUTaskman.exe $(_FLATRELEASEDIR)\Taskman.exeNK

配置文件:.BIB文件內(nèi)存部分

定義平臺的內(nèi)存信息劃分物理內(nèi)存的數(shù)據(jù)存儲和程序存儲部分配置部分不是必須的用來設(shè)置屬性等Name Startaddress Size(bytes) Type

NK 8C800000 00800000 RAMIMAGE

RAM 8C050000 007AFFFF RAM配置文件:.REG文件定義默認的注冊設(shè)置COMMON.REG,IE.REG,WCEAPPS.REG,WCESHELL.REG:為WindowsCE模塊定義注冊設(shè)置PLATFORM.REG:與平臺相關(guān)的注冊設(shè)置,如驅(qū)動入口等PROJECT.REG:定義與你的工程相關(guān)的注冊設(shè)置[HKEY_LOCAL_MACHINE\init]“Launch10”=“shell.exe”“Launch20”=“device.exe”配置文件:.DAT文件定義鏡像的文件夾結(jié)構(gòu)COMMON.DAT,IE.DAT,WCEAPPS.DAT,WCESHELL.DATPLATFORM.DATPROJECT.DAT例子:Root:-Directory(“ProgramFiles”)Directory(“\ProgramFiles”):-Directory(“MyProjects”)Root:-Directory(“MyDocuments”)Directory(“\MyDocuments”):-File(“MyFile.doc”,“\Windows\Myfile.doc”)配置文件:.DB文件定義默認的鏡像數(shù)據(jù)庫COMMON.DB,WCEAPPS.DB,WCESHELL.DB這些.DB文件是與Common,Wceapps,andWceshell模塊相關(guān)的數(shù)據(jù)庫PLATFORM.DB該文件包含特定平臺的默認數(shù)據(jù)庫

PROJECT.DB該文件特定工程的默認數(shù)據(jù)庫產(chǎn)生鏡像整合release文件夾中的文件來生成WindowsCE鏡像過程整合配置文件:

所有的.bib文件到CE.BIB

所有的.reg文件到REGINIT.INI

所有的.dat文件到INITOBJ.DAT

所有的.db文件到INITDB.INI壓縮reginit.ini到二進制注冊文件(DEFAULT.FDF)由于語言的適配,替換.exeand.dll中的資源forlanguageadaptation生成WindowsCE鏡像(NK.BIN)

Build的幾個階段Sysgen階段FeatureBuild階段ReleaseCopy階段MakeImage階段當你在IDE的Biuld菜單下選擇

BuildPlatform

命令時,系統(tǒng)創(chuàng)建平臺依次經(jīng)歷了以下4個過程:Sysgen階段任務(wù)鏈接相應(yīng)的靜態(tài)庫到模塊MakeSDK過濾系統(tǒng)頭文件,產(chǎn)生只包含為聲明被平臺導(dǎo)出的函數(shù)的頭文件.為系統(tǒng)模塊產(chǎn)生輸入庫構(gòu)建板級支持包(BSP)SystemGenerationCompleteheaderandsourcecodefilesCompletesystemlibrariesModuledefinitions(.def)Cesysgen.batSystem-specificheaderfilesLinkedlibrariesSpecific.deffilesSYSGEN.BATFeatureBuild階段任務(wù)所有的用戶屬性,包括PB工程文件(.pbp),dirs文件,源文件,makefiles(.mak)被編譯和創(chuàng)建ReleaseCopy階段任務(wù)拷貝所有用戶生成OS鏡像所需的文件到release目錄下,在Sysgen階段生成的模塊和文件首先被拷貝,接著是FeatureBuild階段生成的模塊和文件.MakeImage階段任務(wù)Rrelease目錄中的文件被整合的二進制鏡像文件Nk.bin中.這一階段對應(yīng)Build菜單下的

MakeImage

命令

Build過程COMMONDATASYNCDCOMDIRECTXIERDPSCRIPTSERVERSWCEAPPSFEWCESHELLFE…..\cesysgen\ddk..\cesysgen\oak..\cesysgen\sdk\target,\filesStep1.SystemGenerationStep2.BuildStep3.BuildingtheReleaseDirectoryStep4.MakinganImageNK.BIN..\platform\..\target,\files%_FLATRELEASEDIR%Build結(jié)果nk.bin:WindowsCE二進制鏡像數(shù)據(jù)格式運行時必須首先裝載到內(nèi)存中.由數(shù)據(jù)段和代碼段組成nk.nb0:二進制數(shù)據(jù)文件格式能夠被轉(zhuǎn)載到Flash中可以以XIP模式運行XIP介紹ExecuteInPlace的簡稱程序的執(zhí)行可以直接在ROM中,而不是必須得先裝載到RAM中

被NORflash類型的閃存支持如何解決Build中的錯誤查看Output

窗口NoenoughharddiskspaceCompile&linkerror檢查WINCE420根目錄下的Build.log&Build.err

文件詳細的輸出信息Windows編程經(jīng)驗和知識是你解決問題的關(guān)鍵解釋BuildErrorsSysgen階段的錯誤Causedbymissingfiles,missingconfigurationoftheoperatingsystemfeatures,andapplicationsbuiltduringtheSysgenphaseModulebuild階段的錯誤CompilationerrorsorunresolvedlinkerrorsBuildingthereleasedirectory階段的錯誤FilecopyerrorsMakinganimage階段的錯誤Romimage.exefailedinCE.BIBRomimage.exefailedinreginit.iniWarning:Imageexceeds作業(yè)閱讀在線文檔“CEPCHow-toTopics”和“Tutorial:UsingPlatformBuilderwithaCEPC”,x86硬件平臺上下載、運行自己的一個WindowsCE提示:制作wince的啟動盤和配置IP地址用cepcBSP創(chuàng)建你的WinCE用你的啟動盤啟動系統(tǒng)通過TCP/IP鏈接、下載目錄介紹PlatformBuilder用戶界面UI目錄(Catalog)and特性(Feature)配置平臺平臺創(chuàng)建流程Build系統(tǒng)定制目錄Catalog應(yīng)用程序開發(fā)回顧Getplatform&SDKfromOEMsCoding&TestingReleasetoManufactureExportyourSDK平臺創(chuàng)建流程得到特定軟件開發(fā)板(specifiedSoftwareDevelopmentBoard—SDB)的BSP用PlatformBuilder定制平臺通過SDB下載、調(diào)試和運行平臺為你的平臺構(gòu)建發(fā)布版系統(tǒng)第一步:獲得BSPMicrosoftCEPC第三方OEMsMotorolaDragonballAdvantech7230…生成自己的BSP后面討論…從哪獲得BSP?安裝和使用BSP如果BSP是以MSI文件提供,象其它的軟件那樣安裝它如果BSP是以源文件的形式提供,在PB中添加相應(yīng)的.CEC文件注意:你必須首先在PB中安裝了相應(yīng)CPU的支持演示:

安裝和使用MotorolaDragonBallMXLBSP第二步:定制平臺在Microsoft提供的模板中選擇一個,在它的基礎(chǔ)上進行修改從頭定制HLBaseandIABaseHL意思headless,表示該OS沒有圖形用戶界面GUI如果選擇IABase,OS包含GUI第三步:通過SDB下載、調(diào)試和運行平臺獲得EbootorSboot配置網(wǎng)絡(luò)配置串行調(diào)試接口(可選)配置PlatformBuilder鏈接下載OS鏡像到板子常規(guī)步驟:獲得EbootorSbootBootloader通常做為BSP的一部分由OEMs提供.bootloader的目的是裝載OS鏡像到內(nèi)存中,然后跳到OS啟動程序Eboot:EthernetBootloaderSboot:SerialBootloader通常在release版中被除去各種BootloaderFlashintoflashRomUsebootfloppydiskUseCFcard…唯一的目的:下載OS鏡像為串口配置網(wǎng)絡(luò)只插串口鏈接線缺點:太慢為以太網(wǎng)配置網(wǎng)絡(luò)用Hub為以太網(wǎng)配置網(wǎng)絡(luò)使用獨立的網(wǎng)絡(luò)鏈接配置串行調(diào)試接口插RS232串口適配器到ADS板和你主機上默認的COM口.選擇StartMenu→Programs→Accessories→Hyperterminal→Hyperterminal去激活一個Hyperterm窗口超級終端配置PB鏈接從Target->ConfigureRemoteConnection配置PB鏈接Eboot會向LAN發(fā)送廣播包,PB接收和顯示設(shè)備ID下載OS鏡像到板子在PB中點擊Target→Download/Initialize.在設(shè)備的屏幕上你會看到我們到哪了?Gethardware&BSPfromOEMsNeedplatformcustomization?Getplatform&SDKfromOEMsCustomizeyourWinCEplatformExportyourSDKCoding&TestingReleasetoManufacture目錄介紹PlatformBuilder用戶界面UI目錄(Catalog)and特性(Feature)配置平臺平臺創(chuàng)建流程Build系統(tǒng)定制目錄CatalogPB目錄結(jié)構(gòu)DirectoryDescriptionOthersRun-timefiles,binaryfilesforbuildingOSimagefiles,registryfiles,andbatchfilesthatareusedtoaddfilestoanOSimage.PlatformBSPandDevice-specificfilesanddirectories.PrivateSourcecodefortheWindowsCEOS.PublicDirectoriesfortheWindowsCEOSconfigurations.SDKToolsandlibrariesintheWindowsCESDKthatsupportPlatformBuilder.環(huán)境變量%_WINCEROOT%-WindowsCE安裝的根目錄通常為C:\WINCE500%_PUBLICROOT%-%_WINCEROOT%\PUBLIC%_PLATROOT%-%_WINCEROOT%\Platform其它在build窗口的命令提示符中使用‘set’可以查看當前的環(huán)境變量Platform目錄包含與特定硬件平臺相關(guān)的BSP文件定位在以下目錄%_WINCEROOT%\Platform包含以下子目錄每一個目錄用于描述某一特定WindowsCE平臺的應(yīng)用每一目錄包含一個dirs文件和至少

一個特定BSP的批處理文件將你與該特定硬件平臺相關(guān)的文件放入對應(yīng)目錄Public目錄包含與平臺無關(guān)的組件和配置設(shè)置定位在以下目錄%_WINCEROOT%\Public包含以下子目錄:模塊、組件子目錄Common,Wceshellfe,Wceappsfe,IE,Servers相關(guān)配置子目錄-CEBASESDK目錄定位在以下目錄%_WINCEROOT%\SDK包含支持PlatformBuilder的工具ProcessorcompilersDevelopmenttoolsMiscellaneousutilitiesOthers目錄定位在以下目錄%_WINCEROOT%\OTHERS包括以下子目錄:ATL:包含調(diào)試用的ATL頭文件,庫和原碼等DOTNET:包含.NET可用的各處理器的二進制文件和portable.NETCompactFramework文件MFC:包含調(diào)試用的MFC頭文件,庫和原碼等

SAMPLES:包含MFC和ATL應(yīng)用例程WCETK:包含WindowsCETestKit(CETK)相關(guān)二進制文件Private目錄定位在以下目錄%_WINCEROOT%\PRIVATE在安裝的時候必須檢查選項,與SharedSourceLicense項保持一致你可以裝載你的產(chǎn)品的最新版私人代碼Premium(“Almosteverything”)Source都是可用的包括的:KernelGWEScomponentsFilesyscomponents回顧Build的4個步驟2134

SYSGEN根據(jù)OS設(shè)計配置過濾模塊和組件Build使用DIRS,SOURCES和OS設(shè)計工作空間為BSP和應(yīng)用build原碼BUILDREL拷貝文件到release目錄下MakeImage用release目錄里的文件身成OS實時鏡像1234BuildSystem概述IDE作為客戶端,通過命令行創(chuàng)建buildsystem.命令行工具使用環(huán)境變量確認Build設(shè)置,并調(diào)用編譯器和連接器命令行工具存放在:%_PUBLICROOT%\COMMON\OAK\MISC環(huán)境變量重要目錄%_WINCEROOT%%_PublicRoot%可選的OS屬性SYSGEN_AYGSHELLSYSGEN_BATTERYSYSGEN_STANDARDSHELLPlatform->SettingoptionsIMGAUTOFLUSHWINCESHIPIMGRAM64原碼結(jié)構(gòu)DIRSSOURCESMakeFilemakefile.defDIRS文件DIRS類似工作空間“Workspace”中包含的工程“projects”列表文本文件列出了包含其它DIRSorSOURCES文件的目錄列表BUILD.EXE通過讀DIRS文件確定build的內(nèi)容例如:DIRS=\ Eboot\ DriversSOURCESSOURCES工程的源文件列表TARGETNAME輸出目標名(非擴展)TARGETTYPEPROGRAM–(.EXE)ApplicationDYNLINK–(.DLL)DynamicLinkLibraryLIBRARY–(.LIB)Staticlibrary文件結(jié)構(gòu)文本文件被包含在makefile.def,提供給目標機關(guān)于build的相關(guān)信息MAKEFILE.INCSOURCESMAKEFILE.DEFLocalprojectfolder%_MAKEENVROOT%有用的命令行工具Wince.batBlddemo.batCebuild.batBuild.exeSysgen.batBuildrel.batMakeimg.exeWince.bat通過3個輸入?yún)?shù)為宿主機準備開發(fā)環(huán)境

%_TGTCPU%%_TGTPROJ%%_TGTPLAT%例:wincex86MYPROJCEPCBldDemo.bat用來build和生成OS鏡像.它調(diào)用3個工具:Cebuild.bat:Build平臺的模塊、屬性和原碼Buildrel.bat:為平臺拷貝文件到release目錄下,它是生成二進制鏡像的工具Makeimg.exe:產(chǎn)生OS鏡像Build.exe用來構(gòu)建、創(chuàng)建各種項目DIRS文件定義目錄結(jié)構(gòu)自動監(jiān)測源文件和頭文件的依賴關(guān)系WindowsCEBuild過程的核心調(diào)用NMAKE.EXE做真正的buildDIRS和SOURCES決定build的內(nèi)容如何通過設(shè)置命令行來Build環(huán)境設(shè)置環(huán)境變量BuildOS鏡像示例set_WINCEROOT=E:\WINCE420set_PROJECTROOT=E:\GOOD\WINCE420\Emulatorset_FLATRELEASEDIR=E:\GOOD\RelDir\EMULATOR_X86Releaseset_PROJPUBLICROOT=E:\GOOD\WINCE420\publiccd%_WINCEROOT%\public\common\oak\misccallwince.batX86GOODEMULATORsetSYSGEN_CURSOR=1setSYSGEN_CONNMC=1setSYSGEN_MENU_OVERLAP=1setSYSGEN_MSIM=1blddemo–q目錄介紹PlatformBuilder用戶界面UI目錄(Catalog)and特性(Feature)配置平臺平臺創(chuàng)建流程Build系統(tǒng)定制目錄CatalogWindowsCE目錄CE目錄項的數(shù)據(jù)庫每項都是你所選的實時鏡像中模塊的組件或子模塊在樹型Catalogview中顯示目錄項列表允許使用拖拉和刪除的方式選擇目錄中的項用于定制可通過用戶或第三方擴展目錄通過導(dǎo)入CEC文件向目錄中添加項目CEC文件CECInfo塊包含CEC文件的普通信息ComponentType塊Top-level結(jié)構(gòu)描述.例,‘AudioDriver’可能就是一個ComponentType(類似面向?qū)ο缶幊讨械囊粋€類)Implementation塊描述ComponentType的具體實現(xiàn)(類似面向?qū)ο缶幊讨械哪繕藢嶓w)BuildMethod塊描述項目定位的原碼位置CEC編輯器介紹CEC編輯器它是Tools菜單下的一個工具項,通過它你可以生成、編輯.cec文件。定制CEC文件步驟:生成目錄屬性文件添加一個執(zhí)行(Implementation)添加一個Build方法(Method)添加一個二進制信息(BIB

Info

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論