91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

電子發(fā)燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>Platform Builder實(shí)踐要點(diǎn)分析

Platform Builder實(shí)踐要點(diǎn)分析

2017-11-07 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

增加對大容量物理內(nèi)存的支持和永久存儲注冊表是在定制內(nèi)核工作中常遇到的問題。本篇文章將對這兩個方面闡述相關(guān)的知識并指導(dǎo)讀者如何在PB中實(shí)現(xiàn)。
  對大容量物理內(nèi)存的支持
  在PC上增加物理內(nèi)存是很方便的,插上內(nèi)存條后只要自檢程序識別,那么桌面操作系統(tǒng)就能夠支持。而在基于CE的產(chǎn)品上就沒那么簡單了。如果物理內(nèi)存大于64MB,就要在定制內(nèi)核時做一些工作。
  一旦內(nèi)存管理單元(MMU)開始工作,CPU就不再直接訪問物理內(nèi)存了,對于運(yùn)行在x86和ARM系列CPU上的CE內(nèi)核來說,必須先確立物理內(nèi)存地址同虛擬內(nèi)存地址的映射關(guān)系。這種關(guān)系實(shí)際是在一個名為OEMAddressTable的表中定義的。這個表在前面的文章中已經(jīng)提到過。CE提供了兩種虛擬地址映射方法,分別為靜態(tài)映射和動態(tài)映射,這個表屬于靜態(tài)映射方法。靜態(tài)映射的虛擬地址空間只能由內(nèi)核訪問,而動態(tài)映射的地址空間可以由用戶模式的應(yīng)用程序訪問。OEMAddressTable在文件%_WINCEROOT%PublicCommonOakCspi486OalOEMInit.asm中。在這個文件的最后有一段代碼:
  ; RAM 0x80000000 -》 0x00000000, size 64M
  dd 80000000h, 0, 04000000h
  dd 0, 0, 0
  這段代碼表示將虛擬地址80000000映射到物理地址0,大小為64MB。將04000000h改成實(shí)際的物理內(nèi)存大小,然后保存。接著單擊PB菜單“Build”-“Open Build Release Directory”,在命令行中先用cd命令進(jìn)入上述目錄,如:
  cd %_WINCEROOT%PublicCommonOakCspi486Oal
  然后鍵入下列命令:
  build -c
  sysgen i486oal
  build命令根據(jù)配置文件內(nèi)容編譯整個目錄,sysgen批處理將build 編譯的文件i486oal.lib文件復(fù)制到CE的安裝目錄和內(nèi)核工程目錄下。我安裝的BSP是基于x86的,所以相應(yīng)目錄為%_WINCEROOT%PUBLICCOMMONOAKLIBX86RETAIL和%_PROJECTROOT%cesysgenoaklibx86 etail兩個目錄。上一步做完之后,接著開始修改config.bib文件。在以前的文章中講過在config.bib文件中定義內(nèi)存區(qū)域。在config.bib中預(yù)設(shè)的配置沒有超過64MB的,所以要自己手工添加。可根據(jù)原有的IMGRAM64配置更改,原有的IMGRAM64如下:
  ; 64 MB of RAM (note: AUTOSIZE will adjust boundary)
  IF IMGRAM64
  NK 80220000 009E0000 RAMIMAGE
  RAM 80C00000 03000000 RAM
  UMABUF 83C00000 00400000 RESERVED
  ENDIF
  假如要支持128MB,更改如下:
  IF IMGRAM16 !
  IF IMGRAM32 !
  IF IMGRAM64 !
  NK 80220000 009E0000 RAMIMAGE
  RAM 80C00000 07000000 RAM
  UMABUF 87C00000 00400000 RESERVED
  ENDIF
  ENDIF
  ENDIF
  在這里沒有更改NK的大小,只是修改了RAM的大小。
  在config.bib定義之后,還可以在OAL層通過變量或者函數(shù)更改物理內(nèi)存的大小,適合設(shè)備可能出現(xiàn)增加或減小內(nèi)存的情況。CE的幫助文檔介紹了幾種方法,這里只提一下CreateStaticMapping函數(shù)。CreateStaticMapping函數(shù)作為config.bib文件的補(bǔ)充,適合在用戶模式的應(yīng)用程序或驅(qū)動程序中調(diào)用,調(diào)用這個函數(shù)能夠?qū)⒅付ㄊ椎刂返奈锢韮?nèi)存塊映射到虛擬地址空間,函數(shù)返回虛擬地址。虛擬地址范圍在C400 0000 到 E000 0000之間,這是內(nèi)核的地址空間,只能由內(nèi)核訪問。相比較VirtualCopy函數(shù)用于動態(tài)地將指定首地址的物理內(nèi)存塊映射到虛擬地址空間,這個虛擬地址空間一般為用戶進(jìn)程的地址空間,因?yàn)閂irtualCopy函數(shù)被設(shè)計(jì)專用于驅(qū)動程序調(diào)用,它常被用于將一個物理內(nèi)存塊映射到不同的虛擬地址空間。
  實(shí)現(xiàn)永久保存注冊表數(shù)據(jù)
  關(guān)于注冊表在前面的文章中已經(jīng)介紹過了,這里只講述如何實(shí)現(xiàn)永久保存注冊表數(shù)據(jù)。
  注冊表類型分為基于對象存儲的注冊表和基于HIVE的注冊表,在定制內(nèi)核的時候只能選擇其中一種。從理論上講這兩種注冊表都能夠?qū)崿F(xiàn)永久保存注冊表數(shù)據(jù),但是采用不同的類型會影響CE的啟動順序和啟動速度,還會影響內(nèi)存的使用量。我還是趨向于采用基于HIVE的注冊表來實(shí)現(xiàn)永久保存注冊表數(shù)據(jù),這也是一個發(fā)展趨勢。在講解之前先簡單描述如果CE采用基于HIVE的注冊表,那么在啟動時如何加載已經(jīng)保存的注冊表數(shù)據(jù):
  1、nk.exe執(zhí)行,啟動filesys.exe。
  2、filesys.exe加載引導(dǎo)HIVE,此時引導(dǎo)HIVE位于nk.bin解壓之后的文件中。
  3、filesys.exe啟動device.exe,之后處于等待狀態(tài),等待device.exe將包含系統(tǒng)HIVE的文件系統(tǒng)和存儲設(shè)備的驅(qū)動程序加載完畢。而這個文件系統(tǒng)和存儲設(shè)備的驅(qū)動程序存在于引導(dǎo)HIVE中。
  4、device.exe加載上述所說的文件系統(tǒng)驅(qū)動程序和存儲設(shè)備驅(qū)動程序,使之開始工作。之后device.exe處于等待狀態(tài)。
  5、filesys.exe被喚醒,加載并且安裝系統(tǒng)HIVE。之后filesys.exe處于等待狀態(tài)。
  6、nk.exe按照系統(tǒng)HIVE的信息開始執(zhí)行初始化工作。其中包括加載驅(qū)動程序和啟動一些應(yīng)用程序。其中加載驅(qū)動程序一般由device.exe執(zhí)行,而啟動應(yīng)用程序由filesys.exe執(zhí)行。這時device.exe和filesys.exe已經(jīng)被喚醒。
  因?yàn)橐龑?dǎo)HIVE和系統(tǒng)HIVE肯定有重復(fù)的地方,所以可能出現(xiàn)重復(fù)加載了驅(qū)動程序或者重復(fù)啟動了應(yīng)用程序。為此,CE允許在描述驅(qū)動程序的注冊表信息中加入防止重復(fù)的標(biāo)志,而應(yīng)用程序可以采用事件對象來防止重復(fù)啟動,如device.exe。
  下面講述如何設(shè)置基于HIVE的注冊表(假如保存系統(tǒng)HIVE的是FAT文件系統(tǒng)):
  1、在PB中加入“Hive-based Registry”,如果是Geode平臺,再加入BSP_ENABLE_FSREGHIVE環(huán)境變量。
  2、打開platform.reg,找到如下信息:
  ; HIVE BOOT SECTION
  [HKEY_LOCAL_MACHINEinitBootVars]
  “SYSTEMHIVE”=“Documents and Settingssystem.hv”
  “PROFILEDIR”=“Documents and Settings”
  “Start DevMgr”=dword:0
  IF BSP_ENABLE_FSREGHIVE
  “Start DevMgr”=dword:1
  ENDIF
  ; END HIVE BOOT SECTION
  “SYSTEMHIVE”的值為系統(tǒng)HIVE文件的路徑?!癝tart DevMgr”是一個布爾值,指示是否開始就執(zhí)行設(shè)備管理器device.exe,按照CE幫助文檔的說法,只有想把系統(tǒng)HIVE存儲在對象存儲中才在此設(shè)置為0,所以一般都要設(shè)置為1。
  3、如果是多用戶,可以在上述的注冊表位置下輸入“DefaultUser”=“《username》”,指定默認(rèn)的用戶名。如果是單用戶系統(tǒng),可以不設(shè)置。
  4、保證將包含系統(tǒng)HIVE的文件系統(tǒng)驅(qū)動程序的注冊表信息和存儲設(shè)備的驅(qū)動程序的注冊表信息被包含在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之間,在這兩個語句之間的注冊表數(shù)據(jù)全部屬于引導(dǎo)HIVE。假如我們將系統(tǒng)HIVE文件system.hv存放在硬盤上,并采用FAT文件系統(tǒng)。那么就要將[HKEY_LOCAL_MACHINESystemStorageManagerFATFS]和[HKEY_LOCAL_MACHINESystemStorageManagerProfilesHDProfile]移動到“; HIVE BOOT SECTION”下。
  5、在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之間的所有驅(qū)動程序的注冊表信息中都加入下列一個標(biāo)志:
  “Flags”=dword:1000
  這個標(biāo)志是一個位掩碼,它可以和其它已經(jīng)存在的“Flags”或運(yùn)算。值1000表示此驅(qū)動程序只加載一次,這樣device.exe就不會把當(dāng)前驅(qū)動程序加載兩次了。
  6、在包含系統(tǒng)HIVE的存儲設(shè)備的驅(qū)動程序的注冊表信息中,加入如下標(biāo)志(假設(shè)是硬盤):
 ?。跦KEY_LOCAL_MACHINESystemStorageManagerProfilesHDProfile]
  “MountFlags”=dword:2
  這個標(biāo)志表示這個存儲設(shè)備包含系統(tǒng)HIVE文件。
  按照如上所述設(shè)置后的內(nèi)核就能實(shí)現(xiàn)永久存儲注冊表數(shù)據(jù)了。對于保存注冊表數(shù)據(jù)的執(zhí)行動作在此必須闡述清楚:
  正常情況下,CE能夠保證重要的注冊表數(shù)據(jù)能夠從內(nèi)存刷到(Flush)永久存儲器上。但是這并不能完全保證所有數(shù)據(jù)都能完整地保存而不丟失,所以要保證萬無一失,應(yīng)該主動地調(diào)用RegFlushKey函數(shù)強(qiáng)制將內(nèi)存中的數(shù)據(jù)刷到永久存儲器上。這個函數(shù)的參數(shù)只有一個,就是注冊表分支。CE還增加一個注冊表項(xiàng)(如下所示),它的作用是每當(dāng)函數(shù)RegCloseKey被調(diào)用時都自動調(diào)用RegFlushKey函數(shù)。
 ?。跦KEY_LOCAL_MACHINEinitBootVars]
  “RegistryFlags”=dword:1
  如果CE在啟動過程中發(fā)現(xiàn)系統(tǒng)HIVE出現(xiàn)錯誤,它會自動刪除文件并創(chuàng)建一個默認(rèn)的系統(tǒng)HIVE文件,如果出現(xiàn)下面的注冊表項(xiàng),說明發(fā)生了這種事情。
 ?。跦KEY_LOCAL_MACHINE]
  “RegPersisted”=dword:1
?
platform Builder MMU
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1冷柜-電氣控制系統(tǒng)講解
  2. 13.68 MB  |  4次下載  |  10 積分
  3. 2安川A1000變頻器中文版說明書
  4. 20.16 MB  |  3次下載  |  3 積分
  5. 3直流電路的組成和基本定律
  6. 1.67 MB   |  2次下載  |  免費(fèi)
  7. 4丹佛斯2800系列變頻器說明書
  8. 8.00 MB  |  1次下載  |  5 積分
  9. 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊
  10. 0.74 MB   |  1次下載  |  免費(fèi)
  11. 6ES7243E+ES8311音頻錄制與播放電路資料
  12. 0.06 MB   |  1次下載  |  5 積分
  13. 7SDM02 激光測距模塊產(chǎn)品手冊
  14. 0.43 MB   |  1次下載  |  免費(fèi)
  15. 8SDFM 激光測距模塊模組手冊
  16. 0.54 MB   |  1次下載  |  免費(fèi)

本月

  1. 1CH341編程器軟件NeoProgrammer_2.2.0.10
  2. 20.47 MB   |  170次下載  |  1 積分
  3. 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
  4. 3.11 MB  |  43次下載  |  免費(fèi)
  5. 3RV1126B系列開發(fā)板產(chǎn)品資料
  6. 4.19 MB  |  18次下載  |  免費(fèi)
  7. 4CH341編程軟件下載
  8. 2.50 MB   |  16次下載  |  5 積分
  9. 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
  10. 3.05 MB  |  12次下載  |  免費(fèi)
  11. 6【開源】60余套STM32單片機(jī)、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項(xiàng)目案例及入門學(xué)習(xí)資源包
  12. 10.55 MB  |  8次下載  |  免費(fèi)
  13. 7冷柜-電氣控制系統(tǒng)講解
  14. 13.68 MB  |  4次下載  |  10 積分
  15. 8特斯拉MODEL S車載充電機(jī)主電路回路原理圖
  16. 0.81 MB   |  4次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233094次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191448次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183356次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81604次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73824次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分