WinCE驅(qū)動開發(fā)問題精華集錦-1
摘自:
http://hi.baidu.com/mcu%5Fspaces/blog/item/12662a088108f9d563d9867b.html近日越來越發(fā)現(xiàn)知識的匱乏,所以需要好好努力才可以.
加油,加油!
精華集錦1__內(nèi)容如下
1、在應(yīng)用程序中,如何向修改本機的ip 地址等網(wǎng)絡(luò)參數(shù),并使之立即生效? 網(wǎng)絡(luò)設(shè)置保存在注冊表中,位置[HKEY_LOCAL_MACHINE\Comm\網(wǎng)卡名稱\Parms\TcpIp],例如常見的CS8900網(wǎng)卡設(shè)置:
[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms\TcpIp]
"EnableDHCP"=dword:0
"DefaultGateway"="192.168.0.1"
"DNS"="111.111.111.111"
"UseZeroBroadcast"=dword:0
"IpAddress"="192.168.0.2"
"Subnetmask"="255.255.255.0"
設(shè)置之后要生效有兩種辦法:一種熱啟動,調(diào)用KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL),熱啟動時間很短暫;另外一種調(diào)用DevieceIoControl API,傳遞IOCTL=IOCTL_NDIS_REBIND_ADAPTER。
2、如何向控制面板中那樣,修改系統(tǒng)聲音的音量
調(diào)用API waveOutSetVolume(HWAVEOUT, dwVolume ),一般參數(shù)1為0。在[HKEY_CURRENT_USER\ControlPanel\Volume]下是系統(tǒng)聲音的注冊表設(shè)置。
3、在應(yīng)用程序中如何實現(xiàn)jpg、gif圖片的顯示 有幾種辦法:
1)、在MSDN中搜索標(biāo)題為“Windows CE .NET Technical Frequently Asked Questions”的文檔,其中有一個問題“How can I display JPEG, GIF, and other graphics files?”,下面就是答案。
2)、如果安裝了Windows CE 5.0,一個例子源碼位于WINCE500\PUBLIC\GDIEX\SDK\SAMPLES\SIMPLE。
3)、用IWebBrowser組件實現(xiàn)。
4、 在應(yīng)用程序中如何實現(xiàn)系統(tǒng)待機
void GwesPowerOffSystem(void);
5、 在WINCE中如何得到網(wǎng)卡MAC地址 事實證明,獲得物理網(wǎng)卡的MAC地址并沒有被統(tǒng)一成一個API或者IOCTL,如果網(wǎng)卡驅(qū)動程序沒有提供接口的話只能直接訪問寄存器獲得。讀者可以參考目錄WINCE500\PUBLIC\COMMON\OAK\DRIVERS\NETCARD里的一些驅(qū)動源碼。
6、Windows XP Embedded 和Windows CE有何區(qū)別
簡單地說Windows XP Embedded采用Windows XP內(nèi)核,只能運行在x86處理器上,優(yōu)點是能夠運行PC上現(xiàn)有的應(yīng)用軟件,缺點是授權(quán)費太高,標(biāo)價¥900元;Windows CE采用Windows CE內(nèi)核,能夠運行在多種處理器上,如x86、ARM、SHX、MIPS等,優(yōu)點是授權(quán)費低,最低Core版標(biāo)價¥30元。缺點是需要單獨開發(fā)應(yīng)用軟件、定制內(nèi)核,甚至開發(fā)BSP、Driver。
7、 wince下只是把調(diào)制解調(diào)器的驅(qū)動掛接在了com1,如何將器驅(qū)動掛接在com2上? 1)、在HLM\drivers\buildin\com2\unimodem下復(fù)制和com1一樣的數(shù)據(jù)
2)、在HLM\ExtModems\HayesCompat下改寫Port為COM2:,再改寫FriendlyName為"Hayes Compatible 在 COM2:"。
8、如何定制自己的外殼 1)、先開發(fā)一個外殼軟件,假設(shè)名稱為MyShell.exe
2)、刪除注冊表[HKEY_LOCAL_MACHINE\init]下如下一行:
"Launch50"="explorer.exe"
3)、在注冊表[HKEY_LOCAL_MACHINE\init]下添加如下一行:
"Launch50"="MyShell.exe"
上述的“LaunchXX”中的XX為序列數(shù),內(nèi)核依據(jù)這個序列數(shù)按由小到大的順序來分別執(zhí)行所有子鍵列出的應(yīng)用程序,具體數(shù)值應(yīng)該為多少請參考幫助文檔的說明。
如果原來的內(nèi)核中添加了標(biāo)準(zhǔn)外殼(standard shell)組件,或者添加了其它組件而這些組件需要依賴標(biāo)準(zhǔn)外殼,那么在PB中是無法刪除標(biāo)準(zhǔn)外殼組件的,解決辦法一是保留explorer.exe在內(nèi)核中,二是刪除依賴標(biāo)準(zhǔn)外殼的組件。
9、我原來的工程是x86版本的,編譯選項只有x86,我如何能夠編譯ARM版本的 兩種辦法:
1)、用EVC新建一個工程的時候,建議復(fù)選“CPUs”列表,這樣發(fā)生了這種事情也能夠輕易通過選擇“WCE Configuration”工具欄中的CPU列表來編譯不同CPU版本的軟件
2)、如果打開工程后CPU列表中只有x86,而此時已經(jīng)安裝了ARM版本的SDK,那么單擊EVC菜單“build”-“configurations”,然后單擊“add”按鈕來添加CPU。
10、通常情況下WINCE采用串口1作為調(diào)試時輸出信息用途,要正式出產(chǎn)品前如何去掉串口1的調(diào)試功能,正常情況下串口1只有在編譯debug版本的內(nèi)核時才在BootLoader中初始化串口1用于輸出信息,而編譯release版本會跳過此代碼。而有些BSP設(shè)計成沒有宏定義,也就是說無論什么版本都會在BootLoader中初始化串口1,這樣造成WINCE啟動后串口1無法被應(yīng)用程序使用。對于這種情況只能在BootLoader源碼中刪除初始化代碼,如OEMInitDebugSerial。
11、基于wince的應(yīng)用程序能建成console project么? 不能
12、ARM系統(tǒng)外擴一片512K RAM,驅(qū)動程序經(jīng)過映射可以使用這一段RAM。1、應(yīng)用系統(tǒng)如何使用這一段RAM?要加一層驅(qū)動嗎?2、如果要將這一段RAM當(dāng)作RAM盤存儲系統(tǒng),該如何作呢?應(yīng)該要加文件系統(tǒng)吧,如何加呢? 解答這個問題前,先要說一下WINCE的地址映射機制。對于包含MMU(存儲器管理單元)的處理器來說,如ARM和x86,WINCE要求OEM在定制內(nèi)核的時候填寫一個虛擬地址與物理地址映射關(guān)系的表,稱為OEMAddressTable,在這個表中定義了所有物理設(shè)備的起始物理地址,對應(yīng)的起始虛擬地址,地址空間大小,RAM就包括在其中(如果是x86平臺還要求RAM起始虛擬地址從0x80000000開始)。如果有多片RAM,應(yīng)該在OEMAddressTable中將它們定義在一起,使之地址連續(xù)。對于非OEM的開發(fā)者來說,他們拿到的是定制好的內(nèi)核,不能做任何修改,如果在產(chǎn)品中外擴一片RAM,只能通過API函數(shù)通知操作系統(tǒng)增加一條虛擬地址與物理地址映射關(guān)系表項。相關(guān)API函數(shù)有兩個,分別是CreateStaticMapping和VirtualCopy。它們的相同之處是都用于建立物理地址和虛擬地址的映射關(guān)系。它們的不同之處是CreateStaticMapping映射的虛擬地址范圍在0xC400 0000 到 0xE000 0000之間,這個范圍只能由內(nèi)核訪問,一般用于ISR訪問,因為ISR只能訪問靜態(tài)映射的虛擬地址空間,不能用VirtualCopy。VirtualCopy通常和VirtualAlloc配合使用,映射的虛擬地址空間在0x8000 0000以下,一般用于驅(qū)動程序和應(yīng)用程序訪問。
1)、應(yīng)用程序要訪問這片RAM,和驅(qū)動程序訪問方法一樣,調(diào)用VirtualAlloc和VirtualCopy。
2)、可以做一個流驅(qū)動程序?qū)iT用于讀寫這片RAM,這樣所有應(yīng)用程序就可以通過調(diào)用流驅(qū)動接口函數(shù)來訪問,非要加文件系統(tǒng)也是可行的,通過修改注冊表就可以做到,但是麻煩一些。
13、我怎么能在PB左邊的定制平臺加進我的驅(qū)動呢? 兩種辦法:
1)、在platform.bib或者project.bib的MODULES部分添加一條語句,例如:
MyDriver.dll C:\Driver\MyDriver.dll NK SH
這樣編譯內(nèi)核的時候就會把你的驅(qū)動DLL文件添加到內(nèi)核中,如果有注冊表需要設(shè)置,在platform.reg或者project.reg中添加注冊表內(nèi)容。
2)、通過制作.cec文件來添加驅(qū)動,制作.cec文件的優(yōu)點是只需制作一次,以后就可以通過將.cec文件導(dǎo)入到PB的Catalog中,象PB自帶的feature一樣通過菜單“Add to OS Design”添加到左邊的內(nèi)核工程中。
14、 WINCE有沒有相對路徑概念?如果沒有如何得到當(dāng)前模塊的路徑?
1) 、WINCE沒有相對路徑概念,只有絕對路徑,所以凡是涉及到路徑均為絕對路徑。
2)、調(diào)用API GetModuleFileName,傳遞一個模塊的實例句柄就能夠得到模塊的絕對路徑。
15、 怎樣讓 POCKET WORD打開*.dat格式(里面都是數(shù)據(jù))的文件? 兩種辦法:
1)、調(diào)用API ShellExecuteEx,在結(jié)構(gòu)體SHELLEXECUTEINFO中添加.dat文件的路徑。
2)、調(diào)用API CreateProcess,在第二個參數(shù)中設(shè)置.dat文件的路徑。
16、 x86 Rom Boot Loader真的可以實現(xiàn)嗎?它確實能代替BIOS啟動計算機? Rom Boot 被設(shè)計存放在Flash/EEPROM中,也就是原來BIOS的位置,這樣當(dāng)上電后CPU到固定地址執(zhí)行代碼,也就是執(zhí)行了Rom Boot的代碼,它對整個硬件系統(tǒng)進行初始化和檢測,并且支持通過網(wǎng)卡從遠程機器上下載nk.bin或者從本地IDE/ATA 硬盤的活動分區(qū)中尋找nk.bin文件加載。Rom Boot的優(yōu)點就是引導(dǎo)并且加載速度快,而且它自身完成了所有的操作,這樣就不用BIOS、MSDOS,更不用Loadcepc了。
17、 對于x86 Rom Boot Loader,如何Build得到Romboot.rom? 1)、在PB中打開一個內(nèi)核工程(x86的)
2)、單擊PB菜單“Build”-“Open Build Release Directory”
30 、用cd命令進入 %_WINCEROOT%\Platform\Geode\Romboot 4、build
18、如何設(shè)置、更改顯示分辨率
能否設(shè)置、更改顯示分辨率由顯示驅(qū)動程序決定,而沒有統(tǒng)一的標(biāo)準(zhǔn)。例如CEPC,在啟動的時候可以通過設(shè)置loadcepc.exe的參數(shù) /L來決定WINCE啟動后的顯示分辨率,這是由于顯示驅(qū)動“VGA Linear Framebuffer”支持,而Geode可以通過在定制內(nèi)核時修改注冊表項來決定WINCE啟動后的顯示分辨率。
19、 幾個硬件使用同一個IRQ,那么發(fā)生中斷的時候系統(tǒng)怎么判斷到底是哪一個硬件發(fā)生的中斷呢?ISR里面又應(yīng)該怎么控制呢? Windows CE支持多個設(shè)備中斷共享一個IRQ,當(dāng)一個共享IRQ發(fā)生時,CE內(nèi)核的異常處理程序檢測設(shè)備特定的寄存器,因為大多數(shù)設(shè)備都有一個單獨的寄存器用于表示設(shè)備的活動狀態(tài),所以通過遍歷共享這個IRQ的所有設(shè)備的寄存器就可以判斷哪個設(shè)備發(fā)生中斷。nk.exe加載一個giisr.dll,這個.dll是微軟提供的,它其實是第一個可安裝ISR。默認(rèn)CE內(nèi)核就是調(diào)用這個dll來檢測寄存器狀態(tài)的,當(dāng)然OEM可以編寫自己的.dll。
CE內(nèi)部有一個ISR鏈,也就是可安裝ISR。因為CE允許OEM添加自己的ISR處理程序,所以ISR被設(shè)計成一個鏈表。排在前面的ISR比后面的ISR優(yōu)先處理中斷,如果當(dāng)前ISR能夠處理當(dāng)前中斷,那就返回中斷ID由IST處理或者返回SYSINTR_NOP,如果當(dāng)前ISR不能夠處理當(dāng)前中斷,那就返回SYSINTR_CHAIN讓下一個ISR處理。
20、請問在wince中如何在內(nèi)核中增加一個與\windows同級的目錄? 在platform.dat或者project.dat中添加語句。例如要創(chuàng)建根目錄下子目錄Program Files,語句如下:
root:-Directory("Program Files")
posted on 2009-07-16 15:34
Sandy 閱讀(533)
評論(0) 編輯 收藏 引用 所屬分類:
Windows Mobile