版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MTKMMI启动过程分析分类:MTK学习资料2012-04-0814:5236人阅读评论(0)\o"收藏"收藏\o"举报"举报在取得MTK的06B版本代码后,开始进行了艰苦的代码分析工作,我的工作是把一个手机的MTK的代码移植到另外一个手机上,在改了custom部分代码后,系统虽然可以正常启动,但LCD是白屏,没有任何界面显示。由于没有仿真器可以使用,只能通过阅读代码和调试进行,尤其是和硬件有关的信息也需要更多功夫去理解。略去硬件平台的定制代码,因为那是custom里所定义的一些驱动初始化的工作,最复杂的部分还是在plutommi这个代码目录里。MMI启动过程:系统在TaskInit.c里创建了MMI的主要任务表: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},};接着发生了如下的函数调用过程:1.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->MMI_task,整个界面是由一个任务函数启动,MMI_Task函数不断介绍ps层的消息,在收到MSG_ID_MMI_EQ_POWER_ON_IND消息后,如果是键盘开机会调用mmi_bootup_entry_disk_check(),这个调用最终会做一系列的程序初始化工作。。2.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_bootup_entry_disk_check,在系统上电后执行这个函数。3.plutommi\mmi\MiscFramework\MiscFrameworkSrc\BootupApp.c->mmi_frm_power_on_init_procedure4.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->InitializeAll,嘿嘿,又绕回来到这个模块来了。这个函数实现了很多平台初始化的工作,我加了函数让系统直接进入工程模式(可能有其它更好的办法。)接着是应用程序初始化:在BootupApp过程里,首先是做disk的检查,然后接着开始检查飞行模式,紧接着是启动动画显示,接着发生如下过程(可以在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),密码请求响应被调用plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->mmi_ready_to_idle_screen_ind_hdlr(void*msg),即将进入idlescreen时调用处理。plutommi\mmi\MiscFramework\MiscFrameworkSrc\SimDetection.c->mmi_bootup_entry_security_check(),启动时的安全检查。7.plutommi\mmi\IdleScreen\IdleScreenSrc\MiscFunctions.c->goto_opening_screen()8.plutommi\mmi\Framework\Tasks\TasksSrc\MMITask.c->InitAllApplications()以下开机过程都是在simulator上跑时得出的结论第一步:启动simulator的时候,直接进入:MMI_task()1.iacMemInit();2.进入一个while(1)循环。以后的过程都是通过消息机制,即:一直在这个循环中读取消息,然后做相应的处理。第一次进入while(1)之后,OslReceiveMsgExtQ(qid,&Message)就读取到一个消息:PRT_MMI_TIMER_IND。然后就一直在这个循环中读消息。第二步:PowerOn读取到消息:MMI_EQ_POWER_ON_INDcaseMMI_EQ_POWER_ON_IND:gdi_init();switch(p->poweron_mode)//判断poweron的模式{casePOWER_ON_KEYPAD://用户按下开机键OslMemoryStart(TRUE);g_charbat_context.PowerOnCharger=0;//不是因为充电而开机的InitializeAll();//初始化,重点学习OslDumpDataInFile();//这个函数不能进入,直接跳过InitNvramData();//加载保存在NVRAM中的设置的参数mmi_pwron_entry_animation_screen();//开机动画break;casecasePOWER_ON_PRECHARGE:casePOWER_ON_CHARGER_IN:g_pwr_context.PowerOnMode=p->poweron_mode;InitializeChargingScr();break;casePOWER_ON_ALARM://定时开机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;}执行过开机之后,就不会进入这里了。第三步、在模拟器上随便按键,就进入defalt这里:default:ProtocolEventHandler((U16)Message.oslMsgId,(void*)Message.oslDataPtr,(int)Message.oslSrcId,(void*)Message.oslPeerBuffPtr);break;以上是总体的开机过程。下面学习蓝色部分具体内容:InitializeAll(){InitUnicodeSupport();//设置使用的编码函数gdi_init();//图形库初始mdi_audio_init();//音频初始化jdi_audio_init();InitProtocolEvents();//初始化协议事件(函数是空的)InitFramework();//初始化事件的处理函数,以及histroy等。{InitEvents();//InitializeeventhandlersInitProcessKeyEvent();//InitializekeyprocessInitHistory();//Initializehistory}InitHardwareEvents();//设置一些硬件事件的protocolhandler。InitTime();InitMMI_App();setup_UI_wrappers();//初始化图形界面相关的参数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。。。。。。);装载每一个application的资源(MUNE,IMAGE,STRING)(1)PopulateNFBProgressImg();//0—9及其他的image(2)PopulateGlobalData();装载全局资源:主要就是加载字串ADD_APPLICATION_STRING2和加载图像ADD_APPLICATION_IMAGE2。注意:有很多image的图像是空的,即在显示时,即使设置了显示的imageID,但还是没有图片。只有STRING。(3)PopulateMainMenuRes();在代码中有3个此函数,利用宏的控制以达到不同的应用。GW606进入的是中间的这个函数,即:宏__MMI_BI_DEGREE_MAIN_MENU_STYLE__关闭,宏__MMI_VERSION_2__打开。加载左软件开始进入的九宫图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卡无效)ADD_APPLICATION_MENUITEM((MAIN_MENU_PHONEBOOK_NO_SIM_MENUID。。。装载通话记录的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_CALL_HISTORY。。。装载功能设置的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_SETTINGS_MENUID。。。装载没有SIM卡时,电话设置的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_SETTINGS_NO_SIM_MENUID,MENU_SIM_OPTION_ID,。。。装载多媒体娱乐的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_MULTIMEDIA_MENUID装载文件管理的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_FILE_MNGR_MENUID。。。装载网络服务的MENUADD_APPLICATION_MENUITEM2((MAIN_MENU_SERVICES_MENUID。。。装载工具箱的MENUADD_APPLICATION_MENUITEM((MAIN_MENU_EXTRA_MENUID。。。到这里,就装载了九宫图的MENU,以及其其大部分MENU的childMENU。红色的两个:MAIN_MENU_MESSAGES_MENUID(信息)MAIN_MENU_PROFILES_MENUID(情景模式)没有装载其childMENU。加载以上MENU中需要使用的STRING和IMAGE。(4)PopulateIdleMenuRes();加载IDLEapplication使用的资源{PopulateStatusIconResources();加载IDLE界面的imagePopulateCommonCategoryResources();PopulateThemeResources();}(5)PopulatePbResData();Populatephonebookresourcedata加载【电话簿】中的每个EMNU的childmenu,stirng,image。(6)PopulateMainDemoRes();PopulatingMainDemoResources(7)populateSettingMenu();PopulatingSettingResources加载【功能设置】中的每个childmenu的各种资源。包括:话机设置,通话设置,网络设置,GPRS连接设置,安全设置,恢复出厂值,音效,蓝牙。{加载[话机设置]的childmenu,string和image,以及下一层…的childmenu,stirng,image。ADD_APPLICATION_MENUITEM((MENU9102_INITIAL_SETUP。。。PopulateNetworkSetupResData();//加载【网络设置】资源populateManageCalls();//加载【通话设置】资源PopulatePhoneSetupResData();//刚进入populateSettingMenu()的时候,加载了【话机设置】中一部分的资源。更多的资源是在这个函数中加载的。populateSecuritySetup();//加载【安全设置】资源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加载通话过程中使用的各种资源首先加载来电时,各种状态下的资源:MENU,STIRNG,IMAGE然后调用PopulateCmOutResData();加载呼出电话时各种资源(14)PopulateQuickAccessData();PopulatingQuickAccessResources(15)PopulateInputMethodRes();PopulatingInputMethodResources(16)PopulateprofileMenu();PopulatingProfilesResources。。。。。。}//加载资源结束PopulateResGetBaseIDTable();PowerAndEndKeyHandler();//setspowerkey&endkeyhandlers//开始初始化InitCallManagement();//InitializetheCallManagementApplicationCallmanahementneedstobeinitializedherebecauseofSOScallsconcept{InitIncomingCall();初始来电时protocolevent以及各MENU的响应函数InitOutGoingCall();初始呼出时protocolevent以及个MENU的响应函数memset(cm_p,0,sizeof(cm_context_struct));主要的全局变量ResetGlobalValues();初始化全局变量}initialize_UI_demo();InitNetWorkBootUpEventsCallBack();initializesallnetworkrelatedprotocolhandlersInitProfileApp();InitSimDetection();InitService();InitCPHS();InitHWBacklightTest();InitCallLogs();ATHandlerInit();。。。。。。很多根据宏来控制的初始化函数}AllowstheapplicationstoreadtheirNVRAMdatavoidInitNvramData(void){InitDownloadNVRAM();PmgInitExtMelodyStruct();;PhnsetReadWallpaper();//读取墙纸信息,并设置为当前墙纸PhnsetReadGPIOSetting();//PhnsetReadPwrOnOffDisp();PhnsetInitSetTimeNDateNvram();PhnsetReadNvramScrSvrSettings();InitNvramCallerId();//从NVRAM中读取callerID,并发送到L4层。LoadIPNumbers();//读取IP号码的设置以及号码LoadBlackListNum();//读取黑名单的设置以及号码initnvramprofapp();//InitializeNVRAMforProfileInitSettingNVRAM();//InitialiseSettingsReadValueCityNVRAM();InitAlarmFrameWork();SetModeSpeechVolume();InitServiceWapSetup();InitDataAccountNVRAM();wap_bookmark_nvram_init();}开始SHOW开机动画voidmmi_pwron_entry_animation_screen(void){(1)判断在SHOW开机动画时是否已经被中断,如果是,则进入:PowerOnBatteryIndicationComplete(),然后直接返回。(2)获取要SHOW的动画资源,类型(3)下面开始SHOW画面if(res_type==FMGR_GROUP_IMAGE)SHOW的是图片{ShowCategory166Screen(disp_id,大屏幕filename_ptr,mmi_pwron_show_image_callback);ShowCategory310Screen()orShowCategory313Screen()小屏幕playRequestedTone(POWER_ON_TONE);播放开机声音}elseif(res_type==FMGR_GROUP_VIDEO)SHOW的是动画{//entryvideoplayscreenShowCategory224Screen(mmi_pwron_play_video_callback);}elseif(res_type==FMGR_GROUP_SWFLASH)//不知道这是什么{ShowCategory229Screen(mmi_pwron_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年性骨质疏松症病因介绍
- 《豆粕跨期套利》课件
- 【大学课件】职业生涯规划的步骤与方法
- 《客户关系管理实务》电子教案 14 建立客户资料库
- 智能制造生产线技术及应用 教案 8-1 生产线信息化管理
- 二零二四年度设备购销合同with技术支持与售后服务条款3篇
- 热衰竭病因介绍
- 《光与影的游戏》课件
- 《纪元商业模式》课件
- (麦当劳餐饮运营管理资料)更新商业-麦当劳神秘顾客调查总结
- 中华人民共和国文物保护法
- 2024《整治形式主义为基层减负若干规定》全文课件
- 医院感染预防与控制标准规范知识考试题库500题(含答案)
- 中国法律史-第三次平时作业-国开-参考资料
- 中国民族音乐作品鉴赏智慧树知到期末考试答案2024年
- 2024年全国高考物理电学实验真题(附答案)
- 贵州省黔东南州2023-2024学年九年级上学期期末道德与法治试题
- 国家公祭日主题班会
- 简易精神状态检查量表(MMSE)
- 丽声北极星自然拼读绘本第三级 A Box for Me 课件
- 布病防治工作总结工作 布病总结报告(5篇)
评论
0/150
提交评论