Wince下定制開機自啟動程序_第1頁
Wince下定制開機自啟動程序_第2頁
Wince下定制開機自啟動程序_第3頁
Wince下定制開機自啟動程序_第4頁
Wince下定制開機自啟動程序_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

在.bib文件中通過XXX.exe$(_FLATRELEASEDIR)\XXX.exeNKS將應(yīng)用程序打包進(jìn)系統(tǒng)然后再添加注冊表[HKEY_LOCAL_MACHINE\Init]"Launch80"="XXX.exe""Depend80"=hex:14,00,1e,00重新生成個系統(tǒng)更新系統(tǒng)部分依賴于explorer.exe”那你就把Launch50"\NandFlash\YSComment.exe",變成Launch51"\NandFlash\YSComment.exe",然后把其他的Launch50之前的全部改到后面這樣運行YSComment.exe就在explorer.exe后面添加這行試試:Launch51"\NandFlash\YSComment.exe",開機就啟動應(yīng)用程序要在PlatformBuilder定制系統(tǒng)的時候設(shè)定,在project.bib最下面添加XXX.exe$(_FLATRELEASEDIR)\XXX.exeNKH;XXX.lnk$(_FLATRELEASEDIR)\XXX.lnkNKH在project.dat中添加Directory("\Windows\Startup"):-File("XXX.exe”,"\Windows\XXX.exe")Directory("\Windows\Startup"):-File("XXX.lnk”,"\Windows\XXX.lnk")XXX是你的應(yīng)用程序名,同時要把你的應(yīng)用程序拷貝到你的bsp下面的files下面,比如C:\WINCE500\PLATFORM\NAZBSP\FILESWince下定制開機自啟動程序Wince下定制開機自啟動程序上網(wǎng)查了一下,發(fā)現(xiàn)相關(guān)的貼子還真是不少.最近因公司的項目需要,我做了個簡單的程序則試該功能.用網(wǎng)上的很多方法發(fā)現(xiàn)是行不通的,估計最初應(yīng)該是可以用的,然后大家都是互相轉(zhuǎn)載,轉(zhuǎn)來轉(zhuǎn)去有些東西漏了或轉(zhuǎn)錯了,因為很少有人真正去測試過,看到就直接轉(zhuǎn).我在這里根據(jù)自己的實際測試,整理出整個過程,并對一些步驟的原理做了解釋假設(shè)應(yīng)用程序為:方法一:主要思想:將應(yīng)用程序及其快捷方式也添加到映像里,再將快捷方式添加到Startup目錄下,這樣當(dāng)系統(tǒng)運行后應(yīng)用程序就能自動運行。這種方法不能覆蓋wince的桌面,只是開機的時候加載一個應(yīng)用程序啟動.步驟:1先保證原工程文件是可以編譯成功的。并且內(nèi)核映像是可以運行的.2創(chuàng)建快捷方式文件,文件內(nèi)容如下:10#”\Windows\”(注意引號一定要)其中草藥10表示#后所有字符的個數(shù),包括引號,要根據(jù)自己的應(yīng)用程序的名字修改.(試過這個數(shù)字即使不是#后的字符的個數(shù)也可以正常啟動,這個我就搞不懂了)把該文件和復(fù)制到xxx_Relase所在的目錄(所在目錄).3在pb中修改文件,在FILESSection添加(FILES區(qū)哉可以包含不是就地執(zhí)行的可執(zhí)行文件):$(_FLATRELEASEDIR)\NKH$(_FLATRELEASEDIR)\NKH(注:$(—FLATRELEASEDIR)表示xxx_Relase文件夾;NK后面的H表明加入到中的文件為隱藏屬性)4把快捷方式添加到StartUp目錄下,具體為:修改工程的文件,添加如下內(nèi)容:Directory("\Windows\Startup"):-File("","\Windows\")由于winceROM映像默認(rèn)將所有文件放到windows目錄下,某些文件在系統(tǒng)引導(dǎo)時必須被移動到特定的位置,.dat文件可以實現(xiàn)移動的功能.比如上面就是把位于windows下的移動到windows\startup下面.Startup目錄決定了程序可以自啟動.5進(jìn)入buildos菜單,選擇buildandsysgen(cleanbeforebuiding要打勾),編譯完成,會有錯誤提示你未在你的磁盤上找到(因為我們在編譯的時候選擇了cleanbeforebuilding,原來放在xxx_Relase目錄下的文件都被clean了).這時把和文件重新拷貝到xxx_Relase文件夾下,然后MakeImage一下.這樣就把應(yīng)用程序?qū)戇M(jìn)了內(nèi)核(會在windows目錄下).把生成的或燒寫到flash里,這樣就可以看到你的應(yīng)用程序自啟動了.到這里可能有人會問,既然和編譯的時候會被clean掉,第二步不就可以不用先復(fù)制,而到第五步時再復(fù)制過來?這個問題我也想過,但實際測試發(fā)現(xiàn)這樣的話并沒有把和兩個文件寫進(jìn)內(nèi)核(系統(tǒng)啟動后,windows下找不到).Bib文件和dat文件都是在makeimage階段在用到的,沒理由會出現(xiàn)這個問題.這個問題一直想不通,希望高手解答.方法二:將應(yīng)用程序添加到映像里,然后用你的應(yīng)用程序直接替換Wince的桌面程序,這種方法其實就是自己的應(yīng)用程序做為wince的shell步驟:首先執(zhí)行方法一的1~3步把應(yīng)用程序燒進(jìn)內(nèi)核.進(jìn)入buildos菜單,選擇buildandsysgen(cleanbeforebuiding要打勾,這里不打勾有時會出現(xiàn)編譯的內(nèi)核不能運行),編譯完成,會有錯誤提示你未在你的磁盤上找到(因為我們在編譯的時候選擇了cleanbeforebuilding,原來放在xxx_Relase目錄下的文件都被clean了).這時把和文件重新拷貝到xxx_Relase文件夾下,然后修改(若在pb里找不到,可以到xxx_Relase文件夾下找):[HKEY_LOCAL_MACHINE\init]"Launch50"="""Depend50"=hex:14,00,1e,00把這個改成你的應(yīng)用程序(比如:)。當(dāng)wince系統(tǒng)啟動時,它會順序執(zhí)行l(wèi)aunchxx,xx是一個十進(jìn)制數(shù),dependxx指出在當(dāng)前應(yīng)用程序運行之前l(fā)aunch20(十六進(jìn)制是14),lanuch30(十六進(jìn)制是1e)必須先運行.打開可以看到.Lanuch20對應(yīng)的是,launch30對應(yīng)的是.我們自己的shell應(yīng)該在這兩個進(jìn)程加載完成之后才能正常運行.另外,wince幫助文檔里有一段話:ThisfunctionmustbecalledbyallapplicationsthatthekernelstartsatstartupthroughtheHKEY_LOCAL_MACHINE\Initregistrykey.看來我們的源程序里應(yīng)該加上signalStarted函數(shù)了.對于mfc的程序我們可以在initinstance的return以前.加上這行代碼SignalStarted(_wtol(GetCommandLine()));其實如果一個應(yīng)用程序要從init里加載,那么肯定有一個unicode字符串作為命令行參數(shù),這個參數(shù)被轉(zhuǎn)化為整型后傳給signalStarted函數(shù).通過這種方式通知操作系統(tǒng)它本身運行完畢.建議任何通過init啟動的應(yīng)用程序都應(yīng)該加上signalStarted函數(shù).MakeImage一下,把生成的燒寫到flash里,這樣就可以看到你的應(yīng)用程序自啟動了.而且wince的桌面程序都不會啟動了,你的程序就是wince的shell,但有個問題,就是當(dāng)你把應(yīng)用程序關(guān)閉的時候由于原wince桌面程序的丟失而會使機器死機。方法三:主要思想:將應(yīng)用程序添加到映像里,然后修改注冊表,讓應(yīng)用程序自啟動。這回不替換wince的桌面程序,而是讓wince像加載桌面一樣加載你的應(yīng)用程序,效果跟方法一是一樣的。跟方法二是一樣的,稍有不同:在文件中[HKEY_LOCAL_MACHINE\init]之下添加如下語句:Launch80"="""Depend80"=hex:1E,00跟方法2的區(qū)別是沒有換掉.當(dāng)然,前面三個方法的前提肯定是你的這個程序,在當(dāng)前的PB工程編譯的內(nèi)核里有可以正常運行的.這一句看起來是廢話,其實很重要.我這在調(diào)試的時候,一度程序不能啟動,我一直認(rèn)為是注冊表或bib文件出錯了,調(diào)了很久都不行.最后才發(fā)現(xiàn),我這個應(yīng)用程序是在之前的SDK下編譯的,在當(dāng)前的系統(tǒng)一根本不能運行.于是我又在可用的系統(tǒng)下重新編譯了一個新的SDK,問題解決.2、新建一個快捷方式新建一個文本文檔,內(nèi)容為:42#/Windows/ShellExe.exe/NandFlash/MyApp.exe,保存后,更改文件名為Autorun.lnk。其中/NandFlash/MyApp.exe應(yīng)用程序的絕對路徑。3、將快捷方式Autorun.lnk添加到自啟動目錄在AT91SAM9263EK_ARMV4I_Release下的project.dat里加入如下內(nèi)容:Directory("/Windows/啟動"):-File("Autorun.lnk","/Windows/Autorun.lnk")4、選擇MakeRun-timeImage生成映像XIP.nb0,然后將前兩步得到的ShellExe.exe和Autorun.lnk拷貝到UC:/WINCE600/OSDESIGNS/sam9263/sam9263/RelDir/AT91SAM9263EK_ARMV4I_Release目錄下。5、將MyApp.exe和Autorun.lnk添加到NK里,方法是在ce..bib文件的Files模塊下加入如下內(nèi)容:ShellExe.exeC:/WINCE600/OSDESIGNS/sam9263/sam9263/RelDir/AT91SAM9263EK_ARMV4I_Release/ShellExe.exeNKSAutorun.lnkC:/WINCE600/OSDESIGNS/sam9263/sam9263/RelDir/AT91SAM9263EK_ARMV4I_Release/Autorun.lnkNKS注意:ShellExe.exe的屬性S表示系統(tǒng)文件。6、生成XIPKERNEL.nb0文件修改ce.bib文件,在MEMORY處,把RAM的配置改成RAM8039e00003862000RAM。在vs2005下執(zhí)行“生成”--》“OpenReleaseDirectoryinBuildWindow”,在命令提示符下執(zhí)行romimagece.bib,可生成XIPKERNEL.bin0在提示符下執(zhí)行viewbin-rXIPKERNEL.bin,可顯示該XIPKERNEL.bin文件的起始位置和長度。在提示符下執(zhí)行cvrtbin-a0x起始位置-l0x長度-w32-rXIPKERNEL.BIN,此步驟執(zhí)行后生成XIPKERNEL.nb0。燒寫xip.nb0和xipkernel.nb0到板子,然后把應(yīng)用程序放到NandFlash目錄下,改名為MyApp.exe,然后重啟就可看到應(yīng)用程序自動運行了。WinCE應(yīng)用程序開機自啟動方法2010-12-0720:11近日在開發(fā)過程中遇到WinCE應(yīng)用程序開機自動運行的問題,在網(wǎng)上找了找,發(fā)現(xiàn)大概有以下三種方法TAG:開機自啟動WindowsCE近日在開發(fā)過程中遇到WinCE應(yīng)用程序開機自動運行的問題,在網(wǎng)上找了找,發(fā)現(xiàn)大概有以下三種方法:1、將應(yīng)用程序和應(yīng)用程序快捷方式添加到映像里,再將快捷方式添加到Startup目錄下,這樣當(dāng)系統(tǒng)運行后應(yīng)用程序就能自動運行;2、直接替換Wince的SHELL,即修改注冊表:[HKEY_LOCAL_MACHINE\init]"Launch50"="explorer.exe”"Depend50"=hex:14,00,1e,00把這個explorer.exe改成你的應(yīng)用程序(比如:MyApp.exe);3、把應(yīng)用程序加入到映像,修改注冊表:[HKEY_LOCAL_MACHINE\init]"Launch80"="MyApp.exe""Depend80"=hex:1E,00可以設(shè)置啟動順序和依賴程序;以上方法都可行,但是都存在一個問題,就是應(yīng)用程序是集成到NK里面的,也就是說每次升級應(yīng)用程序都要重新編譯下載內(nèi)核,很麻煩,尤其在程序調(diào)試階段,大家都希望把應(yīng)用程序放在SD卡上,這樣更新起來比較容易;據(jù)說通過第三種方法可以實現(xiàn),即修改”Launch80”=”MyApp.exe”為”Launch80”=”\STDCard\MyApp.exe”(STDCard為SD卡目錄),但是我試了一下沒有成功,因為Launch80運行時SD卡的文件驅(qū)動還沒有加載,找不到MyApp.exe文件。同樣,采用快捷方式加載SD卡里的應(yīng)用程序也不可行。所以我采用了另一種方法,自己編了一個小程序,比如叫ShellExe.exe,將此程序加入到映像里,通過StartUp快捷方式調(diào)用ShellExe,ShellExe再去調(diào)用SD卡里的應(yīng)用程序,具體實現(xiàn)步驟如下:1、在eVC下編譯如下代碼:intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){WIN32_FIND_DATAfd;HANDLEhd=INVALID_HANDLE_VALUE;intiCount=20;while(iCount--){hd=::FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HANDLE_VALUE!=hd)break;}if(0==iCount)return0;FindClose(hd);SHELLEXECUTEINFOShExeInfo={0};ShExeInfo.cbSize=sizeof(SHELLEXECUTEINFO);ShExeInfo.fMask=SEE_MASK_NOCLOSEPROCESS;ShExeInfo.hwnd=NULL;ShExeInfo.lpVerb=NULL;ShExeInfo.lpFile=lpCmdLine;ShExeInfo.lpParameters=L"”;ShExeInfo.lpDirectory=NULL;ShExeInfo.nShow=SW_SHOW;ShExeInfo.hInstApp=NULL;ShellExecuteEx(&ShExeInfo);return0;}生成ShellExe.exe的可執(zhí)行文件,此段代碼主要功能是查找指定的應(yīng)用程序,然后執(zhí)行;下面這段代碼可以保證在SD卡文件系統(tǒng)正確加載后才去執(zhí)行應(yīng)用程序;while(iCount--){hd=::FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HAND

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論