MTK MMI啟動(dòng)過(guò)程分析_第1頁(yè)
MTK MMI啟動(dòng)過(guò)程分析_第2頁(yè)
MTK MMI啟動(dòng)過(guò)程分析_第3頁(yè)
MTK MMI啟動(dòng)過(guò)程分析_第4頁(yè)
MTK MMI啟動(dòng)過(guò)程分析_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

MTKMMI啟動(dòng)過(guò)程分析分類:MTK學(xué)習(xí)資料2012-04-0814:5236人閱讀評(píng)論(0)\o"收藏"收藏\o"舉報(bào)"舉報(bào)在取得MTK的06B版本代碼后,開(kāi)始進(jìn)行了艱苦的代碼分析工作,我的工作是把一個(gè)手機(jī)的MTK的代碼移植到另外一個(gè)手機(jī)上,在改了custom部分代碼后,系統(tǒng)雖然可以正常啟動(dòng),但LCD是白屏,沒(méi)有任何界面顯示。由于沒(méi)有仿真器可以使用,只能通過(guò)閱讀代碼和調(diào)試進(jìn)行,尤其是和硬件有關(guān)的信息也需要更多功夫去理解。略去硬件平臺(tái)的定制代碼,因?yàn)槟鞘莄ustom里所定義的一些驅(qū)動(dòng)初始化的工作,最復(fù)雜的部分還是在plutommi這個(gè)代碼目錄里。MMI啟動(dòng)過(guò)程:系統(tǒng)在TaskInit.c里創(chuàng)建了MMI的主要任務(wù)表:constosl_task_create_infotask_create_tbl[TOTAL_TASKS]={{"DUM1TASK","DUM1Q",127,128,0,Dummy_task},{"DUM2TASK","DUM2Q",127,128,MAX_PRT_NODES,Dummy_task},{"MMITASK","MMIQ",127,4096,MAX_PRT_NODES,MMI_task},{"DUM3TASK","DUM3Q",127,128,0,Dummy_task},};接著發(fā)生了如下的函數(shù)調(diào)用過(guò)程:1.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->MMI_task,整個(gè)界面是由一個(gè)任務(wù)函數(shù)啟動(dòng),MMI_Task函數(shù)不斷介紹ps層的消息,在收到MSG_ID_MMI_EQ_POWER_ON_IND消息后,如果是鍵盤開(kāi)機(jī)會(huì)調(diào)用mmi_bootup_entry_disk_check(),這個(gè)調(diào)用最終會(huì)做一系列的程序初始化工作。。2.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_entry_disk_check,在系統(tǒng)上電后執(zhí)行這個(gè)函數(shù)。3.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_frm_power_on_init_procedure4.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->InitializeAll,嘿嘿,又繞回來(lái)到這個(gè)模塊來(lái)了。這個(gè)函數(shù)實(shí)現(xiàn)了很多平臺(tái)初始化的工作,我加了函數(shù)讓系統(tǒng)直接進(jìn)入工程模式(可能有其它更好的辦法。)接著是應(yīng)用程序初始化:在BootupApp過(guò)程里,首先是做disk的檢查,然后接著開(kāi)始檢查飛行模式,緊接著是啟動(dòng)動(dòng)畫(huà)顯示,接著發(fā)生如下過(guò)程(可以在BootupApp.c從上看到下):1.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_entry_nand_check_query()2.plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->PowerOnBatteryIndicationComplete()3.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_exit_nand_check_query()4.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_entry_security_check()5.plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->PowerOnBatteryIndicationCompletePhase2()6.SimDetectionmodule:plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->EntryScrEnterPhoneLock(),phonelock屏幕入口plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->SimPasswdReqResponse(void*inMsg),密碼請(qǐng)求響應(yīng)被調(diào)用plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->mmi_ready_to_idle_screen_ind_hdlr(void*msg),即將進(jìn)入idlescreen時(shí)調(diào)用處理。plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->mmi_bootup_entry_security_check(),啟動(dòng)時(shí)的安全檢查。7.plutommi\mmi\IdleScreen\IdleScreenSrc\MiscFunctions.c->goto_opening_screen()8.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->InitAllApplications()以下開(kāi)機(jī)過(guò)程都是在simulator上跑時(shí)得出的結(jié)論第一步:?jiǎn)?dòng)simulator的時(shí)候,直接進(jìn)入:MMI_task()1.iacMemInit();2.進(jìn)入一個(gè)while(1)循環(huán)。以后的過(guò)程都是通過(guò)消息機(jī)制,即:一直在這個(gè)循環(huán)中讀取消息,然后做相應(yīng)的處理。第一次進(jìn)入while(1)之后,OslReceiveMsgExtQ(qid,&Message)就讀取到一個(gè)消息:PRT_MMI_TIMER_IND。然后就一直在這個(gè)循環(huán)中讀消息。第二步:PowerOn讀取到消息:MMI_EQ_POWER_ON_INDcaseMMI_EQ_POWER_ON_IND:gdi_init();switch(p->poweron_mode)//判斷poweron的模式{casePOWER_ON_KEYPAD://用戶按下開(kāi)機(jī)鍵OslMemoryStart(TRUE);g_charbat_context.PowerOnCharger=0;//不是因?yàn)槌潆姸_(kāi)機(jī)的InitializeAll();//初始化,重點(diǎn)學(xué)習(xí)OslDumpDataInFile();//這個(gè)函數(shù)不能進(jìn)入,直接跳過(guò)InitNvramData();//加載保存在NVRAM中的設(shè)置的參數(shù)mmi_pwron_entry_animation_screen();//開(kāi)機(jī)動(dòng)畫(huà)break;casecasePOWER_ON_PRECHARGE:casePOWER_ON_CHARGER_IN:g_pwr_context.PowerOnMode=p->poweron_mode;InitializeChargingScr();break;casePOWER_ON_ALARM://定時(shí)開(kāi)機(jī)AlmInitRTCPwron();break;casePOWER_ON_EXCEPTION://ForabnormalresetwheninvalidSIMOslMemoryStart(TRUE);SetAbnormalReset();InitializeAll();OslDumpDataInFile();ClearInputEventHandler(MMI_DEVICE_ALL);ClearKeyHandler(KEY_END,KEY_LONG_PRESS);InitNvramData();AlmReInitialize();InitAllApplications();mmi_pwron_exception_check_display();break;}執(zhí)行過(guò)開(kāi)機(jī)之后,就不會(huì)進(jìn)入這里了。第三步、在模擬器上隨便按鍵,就進(jìn)入defalt這里:default:ProtocolEventHandler((U16)Message.oslMsgId,(void*)Message.oslDataPtr,(int)Message.oslSrcId,(void*)Message.oslPeerBuffPtr);break;以上是總體的開(kāi)機(jī)過(guò)程。下面學(xué)習(xí)藍(lán)色部分具體內(nèi)容:InitializeAll(){InitUnicodeSupport();//設(shè)置使用的編碼函數(shù)gdi_init();//圖形庫(kù)初始mdi_audio_init();//音頻初始化jdi_audio_init();InitProtocolEvents();//初始化協(xié)議事件(函數(shù)是空的)InitFramework();//初始化事件的處理函數(shù),以及histroy等。{InitEvents();//InitializeeventhandlersInitProcessKeyEvent();//InitializekeyprocessInitHistory();//Initializehistory}InitHardwareEvents();//設(shè)置一些硬件事件的protocolhandler。InitTime();InitMMI_App();setup_UI_wrappers();//初始化圖形界面相關(guān)的參數(shù)PopulateResData();//裝載資源包括:menu,string,image{增加applicationsADD_APPLICATION(APP_MAINMNNU,APP_IDLEAPP,APP_BOOTUP,APP_SIMTOOLKIT,APP_GLOBALDEFS,APP_CHARGER,APP_UIFRAMEWORK,APP_HONEBOOK,APP_SHORTCUTS,APP_SERVICES,APP_ORGANIZER,APP_MESSAGES,APP_CHAT,APP_SETTINGS,APP_CALLMANAGEMENT,APP_DEMOAPP,APP_CLLHISTORY,APP_CALLSETUP,APP_PROFILES,APP_NEWORKSETUP,APP_DATAACCOUNT,APP_PHONESETUP,APP_TODOLIST,APP_INPUTMETHOD。。。。。。);裝載每一個(gè)application的資源(MUNE,IMAGE,STRING)(1)PopulateNFBProgressImg();//0—9及其他的image(2)PopulateGlobalData();裝載全局資源:主要就是加載字串ADD_APPLICATION_STRING2和加載圖像ADD_APPLICATION_IMAGE2。注意:有很多image的圖像是空的,即在顯示時(shí),即使設(shè)置了顯示的imageID,但還是沒(méi)有圖片。只有STRING。(3)PopulateMainMenuRes();在代碼中有3個(gè)此函數(shù),利用宏的控制以達(dá)到不同的應(yīng)用。GW606進(jìn)入的是中間的這個(gè)函數(shù),即:宏__MMI_BI_DEGREE_MAIN_MENU_STYLE__關(guān)閉,宏__MMI_VERSION_2__打開(kāi)。加載左軟件開(kāi)始進(jìn)入的九宮圖MENU。ADD_APPLICATION_MENUITEM((IDLE_SCREEN_MENU_ID,0,9,MAIN_MENU_PHONEBOOK_MENUID,MAIN_MENU_MESSAGES_MENUID,MAIN_MENU_CALL_HISTORY,MAIN_MENU_SETTINGS_MENUID,MAIN_MENU_MULTIMEDIA_MENUID,MAIN_MENU_FILE_MNGR_MENUID,MAIN_MENU_PROFILES_MENUID,MAIN_MENU_EXTRA_MENUID,MAIN_MENU_SERVICES_MENUID,0,INSERTABLE,MATRIX_MENUMAIN_MENU_MENU_TEXT,MAIN_MENU_PHONEBOOK_ICON));裝載電話簿的MENU(SIM卡有效)ADD_APPLICATION_MENUITEM((MAIN_MENU_PHONEBOOK_MENUID。。。裝載電話簿的MENU(SIM卡無(wú)效)ADD_APPLICATION_MENUITEM((MAIN_MENU_PHONEBOOK_NO_SIM_MENUID。。。裝載通話記錄的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_CALL_HISTORY。。。裝載功能設(shè)置的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_SETTINGS_MENUID。。。裝載沒(méi)有SIM卡時(shí),電話設(shè)置的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_SETTINGS_NO_SIM_MENUID,MENU_SIM_OPTION_ID,。。。裝載多媒體娛樂(lè)的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_MULTIMEDIA_MENUID裝載文件管理的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_FILE_MNGR_MENUID。。。裝載網(wǎng)絡(luò)服務(wù)的MENUADD_APPLICATION_MENUITEM2((MAIN_MENU_SERVICES_MENUID。。。裝載工具箱的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_EXTRA_MENUID。。。到這里,就裝載了九宮圖的MENU,以及其其大部分MENU的childMENU。紅色的兩個(gè):MAIN_MENU_MESSAGES_MENUID(信息)MAIN_MENU_PROFILES_MENUID(情景模式)沒(méi)有裝載其childMENU。加載以上MENU中需要使用的STRING和IMAGE。(4)PopulateIdleMenuRes();加載IDLEapplication使用的資源{PopulateStatusIconResources();加載IDLE界面的imagePopulateCommonCategoryResources();PopulateThemeResources();}(5)PopulatePbResData();Populatephonebookresourcedata加載【電話簿】中的每個(gè)EMNU的childmenu,stirng,image。(6)PopulateMainDemoRes();PopulatingMainDemoResources(7)populateSettingMenu();PopulatingSettingResources加載【功能設(shè)置】中的每個(gè)childmenu的各種資源。包括:話機(jī)設(shè)置,通話設(shè)置,網(wǎng)絡(luò)設(shè)置,GPRS連接設(shè)置,安全設(shè)置,恢復(fù)出廠值,音效,藍(lán)牙。{加載[話機(jī)設(shè)置]的childmenu,string和image,以及下一層…的childmenu,stirng,image。ADD_APPLICATION_MENUITEM((MENU9102_INITIAL_SETUP。。。PopulateNetworkSetupResData();//加載【網(wǎng)絡(luò)設(shè)置】資源populateManageCalls();//加載【通話設(shè)置】資源PopulatePhoneSetupResData();//剛進(jìn)入populateSettingMenu()的時(shí)候,加載了【話機(jī)設(shè)置】中一部分的資源。更多的資源是在這個(gè)函數(shù)中加載的。populateSecuritySetup();//加載【安全設(shè)置】資源PopulateLanguageStrings();#ifdef__MMI_SOUND_EFFECT__PopulateSoundEffectResData();#endif#ifdef__FLIGHT_MODE_SUPPORT__PopulateFlightModeResData();PopulateConnectSetting();#endif}(8)populateFunAndGamesMenu();PopulatingFun&GamesResources(9)PopulateSimDetectionMenuRes();PopulatingSIMDetectResources(10)PopulateChgrPwrOnScrRes();PopulatingChargerPowerOn(11)PopulateCommonScreensResData();PopulatingCommonScreen(12)PopulateEMSObjectResources();PopulatingEMSobjectResources(13)PopulateCmResData();PopulatingCMResources加載通話過(guò)程中使用的各種資源首先加載來(lái)電時(shí),各種狀態(tài)下的資源:MENU,STIRNG,IMAGE然后調(diào)用PopulateCmOutResData();加載呼出電話時(shí)各種資源(14)PopulateQuickAccessData();PopulatingQuickAccessResources(15)PopulateInputMethodRes();PopulatingInputMethodResources(16)PopulateprofileMenu();PopulatingProfilesResources。。。。。。}//加載資源結(jié)束PopulateResGetBaseIDTable();PowerAndEndKeyHandler();//setspowerkey&endkeyhandlers//開(kāi)始初始化InitCallManagement();//InitializetheCallManagementApplicationCallmanahementneedstobeinitializedherebecauseofSOScallsconcept{InitIncomingCall();初始來(lái)電時(shí)protocolevent以及各MENU的響應(yīng)函數(shù)InitOutGoingCall();初始呼出時(shí)protocolevent以及個(gè)MENU的響應(yīng)函數(shù)memset(cm_p,0,sizeof(cm_context_struct));主要的全局變量ResetGlobalValues();初始化全局變量}initialize_UI_demo();InitNetWorkBootUpEventsCallBack();initializesallnetworkrelatedprotocolhandlersInitProfileApp();InitSimDetection();InitService();InitCPHS();InitHWBacklightTest();InitCallLogs();ATHandlerInit();。。。。。。很多根據(jù)宏來(lái)控制的初始化函數(shù)}AllowstheapplicationstoreadtheirNVRAMdatavoidInitNvramData(void){InitDownloadNVRAM();PmgInitExtMelodyStruct();;PhnsetReadWallpaper();//讀取墻紙信息,并設(shè)置為當(dāng)前墻紙PhnsetReadGPIOSetting();//PhnsetReadPwrOnOffDisp();PhnsetInitSetTimeNDateNvram();PhnsetReadNvramScrSvrSettings();InitNvramCallerId();//從NVRAM中讀取callerID,并發(fā)送到L4層。LoadIPNumbers();//讀取IP號(hào)碼的設(shè)置以及號(hào)碼LoadBlackListNum();//讀取黑名單的設(shè)置以及號(hào)碼initnvramprofapp();//InitializeNVRAMforProfileInitSettingNVRAM();//InitialiseSettingsReadValueCityNVRAM();InitAlarmFrameWork();SetModeSpeechVolume();InitServiceWapSetup();InitDataAccountNVRAM();wap_bookmark_nvram_init();}開(kāi)始SHOW開(kāi)機(jī)動(dòng)畫(huà)voidmmi_pwron_entry_animation_screen(void){(1)判斷在SHOW開(kāi)機(jī)動(dòng)畫(huà)時(shí)是否已經(jīng)被中斷,如果是,則進(jìn)入:PowerOnBatteryIndicationComplete(),然后直接返回。(2)獲取要SHOW的動(dòng)畫(huà)資源,類型(3)下面開(kāi)始SHOW畫(huà)面if(res_type==FMGR_GROUP_IMAGE)SHOW的是圖片{ShowCategory166Screen(disp_id,大屏幕filename_ptr,mmi_pwron_show_image_callback);ShowCategory310Screen()orShowCategory313Screen()小屏幕playRequestedTone(POWER_ON_TONE);播放開(kāi)機(jī)聲音}elseif(res_type==FMGR_GROUP_VIDEO)SHOW的是動(dòng)畫(huà){//entryvideoplayscreenShowCategory224Screen(mmi_pwron_play_video_callback);}elseif(res_type==FMGR_GROUP_SWFLASH)//不知道這是什么{ShowCategory229Screen(mmi_pwron_

溫馨提示

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

評(píng)論

0/150

提交評(píng)論