版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物可吸收支架臨床應(yīng)用進(jìn)展
- XX單位2025年冬季安全生產(chǎn)隱患排查整治工作情況報(bào)告
- 生物制品長(zhǎng)期穩(wěn)定性試驗(yàn)方案制定規(guī)范
- 生物制劑臨床試驗(yàn)中期療效預(yù)測(cè)模型構(gòu)建
- 深度解析(2026)《GBT 20501.3-2017公共信息導(dǎo)向系統(tǒng) 導(dǎo)向要素的設(shè)計(jì)原則與要求 第3部分:平面示意圖》
- 物聯(lián)網(wǎng)技術(shù)人才招聘面試題集與解析
- 生活質(zhì)量改善為目標(biāo)的兒童癥狀控制方案設(shè)計(jì)
- 金融科技合規(guī)官面試題及反洗錢(qián)措施含答案
- 游戲行業(yè)運(yùn)營(yíng)策劃經(jīng)理面試題及答案
- 面試題解析渤海銀行政助理崗位
- 胎膜早破的診斷與處理指南
- 被壓迫者的教育學(xué)
- 2025年科研倫理與學(xué)術(shù)規(guī)范期末考試試題及參考答案
- 2025年國(guó)家開(kāi)放電大行管本科《公共政策概論》期末考試試題及答案
- 四川省教育考試院2025年公開(kāi)招聘編外聘用人員筆試考試參考試題及答案解析
- 超市商品陳列學(xué)習(xí)培訓(xùn)
- 2025年中級(jí)煤礦綜采安裝拆除作業(yè)人員《理論知識(shí)》考試真題(含解析)
- 2025年電機(jī)與拖動(dòng)基礎(chǔ)期末考試題庫(kù)及答案
- 防噴演練及硫化氫防護(hù)流程
- 隧道通風(fēng)機(jī)操作規(guī)程及維護(hù)指南
- 全國(guó)大學(xué)生職業(yè)規(guī)劃大賽《城市軌道交通運(yùn)營(yíng)管理》專(zhuān)業(yè)生涯發(fā)展展示【高職(專(zhuān)科)】
評(píng)論
0/150
提交評(píng)論