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

文檔簡(jiǎn)介

MTKMMI啟動(dòng)過(guò)程分析

分類(lèi):MTK學(xué)習(xí)資料2012-04-0814:5236人閱讀評(píng)論(0)收藏舉報(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)的信息也需要

更多功夫去現(xiàn)解。略去硬件平臺(tái)的定制代碼,因?yàn)槟鞘莄ustom里所定義的一些驅(qū)動(dòng)初始化

的工作,最復(fù)雜的部分還是在plutommi這個(gè)代碼目錄里。

MMI啟動(dòng)過(guò)程:

系統(tǒng)在Tasklnit.c里創(chuàng)建了MMI的主要任務(wù)表:

constosl_task_create_infotask_create_tbl[TOTAL_TASKS]={{"DUM1TASK';"DUM1

Q",127,128,0,Dummyjask},{"DUM2TASK","DUM2Q",127,128,MAX_PRT_NODES,

Dummytask},{"MMITASK","MMIQ",127,4096,MAX_PRT_NODES,MMIJask},

{"DUM3TASK","DUM3Q",127,128,0,DummyJask},};

接著發(fā)生了如下的函數(shù)調(diào)用過(guò)程:

1.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->MMItask,整個(gè)界面是由一個(gè)

任務(wù)函數(shù)啟動(dòng),MMI_Task函數(shù)不斷介紹ps層的消息,在收到

MSG_ID_MMI_EQ_POWER_ON_IND消息后,如果是鍵盤(pán)開(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_procedure

4.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->lni:ializeAII,笑叫又繞回來(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\MiscFrame^ork\MiscFrameworkSrc\Bootup^pp.c->mmi_bootup_entry_n

and_check_query()

2.

plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->PowerOnBatterylndi

cationComplete()

3.

plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_exit_nan

d_check_query()

4.

plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_entry_se

curity_check()

5.

plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->PowerOnBatterylndi

cationCompletePhase2()

6.SimDetectionmodule:

plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->EntryScrEnterPhone

Lock(),phonelock屏幕入口

plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->SimPasswdReqRes

ponse(void*inMsg),密碼請(qǐng)求響應(yīng)被調(diào)用

plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->mmi_ready_toidle

screenJnd_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\ldleScreen\ldleScreenSrc\MiscFunctions.c->goto_opening_screen()

8.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->lnitAIIApplications()

以下開(kāi)機(jī)過(guò)程都是在simulator上跑時(shí)得出的結(jié)論

第一步:?jiǎn)?dòng)simulator的時(shí)侯,直接進(jìn)入:MMI_task()

1.iacMemlnit();

2.進(jìn)入一個(gè)while(l)循環(huán)。以后的過(guò)程都是通過(guò)消息機(jī)制,即:一直在這個(gè)循環(huán)中讀取消息,

然后做相應(yīng)的處理。

第一次進(jìn)入while⑴之后,OslReceiveMsgExtQ(qid,&Messaqe)就讀取到一個(gè)消息:

PRT_MMI_TIMER_IND0然后就一直在這個(gè)循環(huán)中讀消息。

第二步:PowerOn

讀取到消息:MMI_EQ_POWER_ON_IND

caseMMI_EQ_POWER_ON_IND:

gdi_init();

switch(p->poweron_mode)〃判斷poweron的模式

|

casePOWERON_KEYPAD:〃用戶(hù)按下開(kāi)機(jī)鍵

OslMemoryStart(TRUE);

g_charbat_context.PowerOnCharger=0;〃不是因?yàn)槌潆姸_(kāi)機(jī)的

lnitializcAII();〃初始化,重點(diǎn)學(xué)習(xí)

OslDumpDatalnFile();〃這個(gè)函數(shù)不能進(jìn)入,直接跳過(guò)

lnitNvramData();〃加載保存在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;

lnitializeChargingScr();

break;

casePOWER_ON_ALARM:,7定時(shí)開(kāi)機(jī)

AlmlnitRTCPwron();

break;

casePOWER_ON_EXCEPTON://ForabnormalresetwheninvalidSIM

OslMemoryStart(TRUE);

SetAbnormalReset();

lnitializeAII();

OslDumpDatalnFile();

ClearlnputEventHandler(MMIDEVICEALL);

ClearKeyHandler(KEY_END,KEY_LONG_PRESS);

lnitNvramData();

AlmRelnitializeO;

InitAIIApplicationsO;

mmi_pwron_exception_check_display();

break;

)

執(zhí)行過(guò)開(kāi)機(jī)之后,就不會(huì)進(jìn)入這里了。

第三步、在模擬器上隨便按鍵,就進(jìn)入defalt這里:

default:

ProtocolEventHandler(

(U16)Message.osIMsgld,

(void*)Message.oslDataPtr,

(int)Message.oslSrcld,

(void*)Message.oslPeerBuffPtr);

break;

以上是總體的開(kāi)機(jī)過(guò)程。下面學(xué)習(xí)藍(lán)色部分具體內(nèi)容:

InitializeAII()

(

InitUnicodeSupport。;〃設(shè)置.便用的編碼函數(shù)

gdi_init();〃圖形庫(kù)初始

mdi_audio_init();〃音頻初始化

jdi_audio_init();

lnitProtocolEvents();〃初始化協(xié)議事件(函數(shù)是空的)

lnitFramework();〃初始化事件的處理函數(shù),以及histroy等。

(

lnitEvents();//Initializeeventhandlers

InitProcessKeyEventO;//Initializekeyprocess

InitHistoryO;//Initializehistory

)

InitHardwareEvents。;〃設(shè)置一些硬件事件的protocolhandler<

lnitTime();

InitMMLApp();

setup_UI_wrappers();〃初始化圖形界面相關(guān)的參數(shù)

PopulateResData();〃裝載資源包括:menu,string,image

增力口applications

ADD_APPLICATION(APP_MAINMNNU,APP_IDLEAPP,APP_BOOTUP,

APP_SIMTOOLKIT,APP_GLOBALDEFS,APP_CHARGER,APP_UIFRAMEWORK,

APP.HONEBOOK,APP_SH3RTCUTS,APP_SERVICES,APPJDRGANIZER,

APPMESSAGES,APPCHAT,APP_SETTINGS,APP_CALLMANAGEMENT,

APP_DEMOAPP,APP_CLLHISTORY,APP_CALLSETUP,ADP_PROFILES,

APP_NEWORKSETUP,APP_DATAACCOUNT,APP_PHON三SETUP,APP_TODOLIST,

APPJNPUTMETHODo?!?;

裝載每一個(gè)application的資源(MUNE,IMAGE,STRING)

(1)PopulateNFBProgresslmg();//0—9及其他的image

(2)PopulateGlobalData();

裝載全局資源:主要就是加載字串ADD_APPLICATION_STRING2和加載圖像

ADD_APPLICATION_IMAGE2o注意:有很多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_^W,宏

_仙^113/£區(qū)$10^4_2_打開(kāi)。

加載左軟件開(kāi)始進(jìn)入的九宮圖MENUoADD_APPLICATION_MENUITEM((

IDLE_SCREEN_MENU_IDQ,9,

MAINMENUPHONEBOOKMENUID,

MAINMENUMESSAGESMENUID,

MAINMENUCALL^HISTORY,

MAINMENU_SETTINGS_MENUID,

MAIN_MENU_MULTIMEDIA_MENUID,

MAIN_MENU_FILE_MNGR_MENUID,

MAIN_MENU_PROFILES_MENUID,

MAIN_MENU_EXTRA_MENUID,

MAIN_MENU_SERVICES_MENUID,

OJNSERTABLE,

MATRIXMENU

MAIN_MENU_MENU_TEXT,

MAINMENUPHONEBOOKJCON));

裝載電話(huà)簿的MENU(SIMk有效)

ADD_APPLICATION_MENUTEM((

MAIN_MENU_PHONEBOOK_MENUID.。。

裝載電話(huà)簿的MENU(SIM卡無(wú)效)

ADD_APPLICATION_MENUTEM((

MAIN_MENU_PHONEBOOK_NO_SIM_MENUIDo.

裝載通話(huà)記錄的MENU

ADD_APPLICATION_MENUTEM((

MAIN_MENU_CALL_HISTORYo。。

裝戰(zhàn)功能設(shè)置的MENU

ADD_APPLICATION_MENUTEM((

MAINMENUSETTINGSMENUIDo。。

裝載沒(méi)有SIM卡時(shí),電話(huà)設(shè)置的MENU

ADD_APPLICATION_MENUTEM((

MAIN_MENU_SETTINGS_NO_SIM_MENUID,

MENU_SIM_OPTION_ID,

ooo

裝載多媒體娛樂(lè)的MENU

ADDAPPLICATIONMENUTEM((

MAIN_MENU_MULTIMEDIA_MENUID

裝載文件管理的MENU

ADDAPPLICATIONMENUTEM((

MAIN_MENU_FILE_MNGR_MENUID.。0

裝載網(wǎng)絡(luò)服務(wù)的MENU

ADD_APPLICATION_MENUTEM2((

MAIN_MENU_SERVICES_MENUIDo0°

裝載工具箱的MENU

ADDAPPLICATIONMENUTEM((

MAINMENUEXTRAMENUIDo。。

到這里,就裝載了九宮圖的MENU,以及其其大部分MENU的childMENU。紅色的兩個(gè):

MAIN_MENU_MESSAGES_MENUID(信息)

MAIN一MENU.PROFILES_MENUID(情景模式)

沒(méi)有裝載其childMENUo

加載以上MENU中需要使用的STRING和IMAGE。

(4)PopulateldleMenuRes();加載IDLEapplication使用的資源

(

PopulateStatuslconResources();加載IDLE界而的image

PopulateCommonCategoryResources();

PopulateThemeResources();

)

(5)PopulatePbResData();Populatephonebookresourcedata

加載【電話(huà)簿】中的每個(gè)EMNU的childmenu,stimg,image。

(6)PopulateMainDemoRes();PopulatingMainDemoResources

(7)populateSettingMenu();PopulatingSettingResources

加載【功能設(shè)置】中的每個(gè)childmenu的各種資源。包括:話(huà)機(jī)設(shè)置,通話(huà)設(shè)置,網(wǎng)絡(luò)設(shè)

置,GPRS連接設(shè)置,安全設(shè)置,恢復(fù)出廠值,音效,藍(lán)牙。

(

加銀[話(huà)機(jī)設(shè)置]的childmenu.string111image.以及下一層...的childmenu,stirng,image,

ADD_APPLICATION_MENUTEM((

MENU9102INITIALSETUP。。

PopulateNetworkSetupResData。;//力II載【網(wǎng)絡(luò)設(shè)置】資源

populateManageCalls。;〃加我【通話(huà)設(shè)置】資源

PopulatePhoneSetupResData();//WOJSApopulateSettingMenu()的時(shí)候,力口我了【話(huà)

機(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

加載通話(huà)過(guò)程中使用的各種資源

首先加載來(lái)電時(shí),各種狀態(tài)下的資源:MENU,STIRNG,IMAGE

然后調(diào)用PopulateCmOutResData();加我呼出電話(huà)時(shí)各種資源

(14)PopulateQuickAccessDa:a();PopulatingQuickAccessResources

(15)PopulatelnputMethodRes();PopulatingInputMethodResources

(16)PopulateprofileMenu();PopulatingProfilesResources

0ooooo

}〃加載資源結(jié)束

PopulateResGetBaselDTable();

PowerAndEndKeyHandler();//setspowerkey&endkeyhandlers

〃開(kāi)始初始化

lnitCallManagement();//InitializetheCallManagementApplication

CallmanahementneedstobeinitializedherebecauseofSOScallsconcept

{

lnitlncomingCall();初始來(lái)電時(shí)protocolevent以及各MENU的響應(yīng)函數(shù)

lnitOutGoingCall();初始呼出時(shí)protocolevent以及個(gè)MENU的響應(yīng)函數(shù)

memset(cm_p,0,sizeof(cm_context_struct));主要的全局變量

ResetGlobalValues();初始化全局變量

)

initialize_UI_demo();

InitNetWorkBootUpEventsCallBackO;

initializesallnetworkrelatedprotocolhandlers

InitProfileAppO;

InitSimDetectionO;

lnitService();

InitCPHSQ;

InitHWBacklightTestO;

lnitCallLogs();

ATHandlerlnit();

ooo0?o很多根據(jù)宏來(lái)控制的初始化函數(shù)

)

AllowstheapplicationstoreadtheirNVRAMdata

voidInitNvramData(void)

{

lnitDownloadNVRAM();

PmqlnitExtMelodyStruct0;;

PhnsetReadWallpaper。;〃讀取墻紙信息,并設(shè)置為當(dāng)前墻紙

PhnsetReadGPIOSetting();//

PhnsetReadPwrOnOffDisp();

PhnsetlnitSetTimeNDateNvram();

PhnsetReadNvramScrSvrSettingsO;

InitNvramCallerldO;〃從NVRAM中讀取callerID,并發(fā)送到L4層。

LoadlPNumbers();〃讀取IP號(hào)碼的設(shè)置以及號(hào)碼

LoadBlackListNum();〃讀取黑名單的設(shè)置以及號(hào)碼

initnvramprofapp();//InitializeNVRAMforProfile

InitSettingNVRAMQ;//InitialiseSettings

ReadValueCityNVRAM();

InitAlarmFrameWorkO;

SetModeSpeechVolume();

InitServiceWapSetupO;

lnitDataAccountNVRAM();

wap_bookmark_nvram_init();

)

開(kāi)始SHOW開(kāi)機(jī)動(dòng)畫(huà)

voidmmi_pwron_entry_animation_screen(void)

{

⑴判斷在SHOW開(kāi)機(jī)動(dòng)畫(huà)時(shí)是否已經(jīng)被中斷,如果是,則進(jìn)入:

PowerOnBatterylndicationComplete(),然后直接返回。

(2)獲取要SHOW的動(dòng)畫(huà)資源,類(lèi)型

⑶下面開(kāi)始SHOW畫(huà)面

if(res_type==FMGR_GROUP_IMAGE)SHOW的是圖片

(

ShowCategoryl66Screen(disp_id,大屏幕

filename_ptr,

mmi_pwronshowimagecallback);

ShowCategory31OScreen()orShowCategory313Screen()小屏幕

playRequestedTone(POWER_ON_TONE);播放開(kāi)機(jī)聲音

)

elseif(resjype==FMGRGROUPVIDEO)SHOW的是動(dòng)畫(huà)

(

//entryvideoplayscreen

ShowCategory224Screen(mmi_pwron_play_video_callback):

)

elseif(resjype==FMGR_GROUP_SWFLASH)〃不知道這是什么

(

ShowCategory229Scree

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論