MTK开发基础bryantwu2010/08/16OutlineMTK之前世今生NucleusOS简介手机OS初始化开发环境配置HelloWorld示例MTK开发进阶MTK高级特性MTK之前世今生MediaTek,联发科技“目前已是全球消費性IC晶片組的領導廠商。產品佈局包含全系列光儲存晶片組、高階數位消費晶片組、無線通訊晶片組、數位電視晶片組及WiMax晶片組等”手机、DVD、蓝光、数字电视、GPS、WiMax、蓝牙大陆布局深圳:手机、数字电视、光存储技术支持中心北京:手机软件研发(CMCC定制,智能手机)合肥:GIS系统上海:高清认证实验室、手机技术支持办事处MTK之前世今生Softwareplatformvendors(Symbian,Stinger,Linux,PalmOS…)Base-bandchipvendors(TI,Infineon,Philips,Conexant,Motorola,ADI,Intel…)RFchipsetvendors(Skywork,ADI…)FlashdevicevendorsPowerManagementICApplicationframeworkvendors(S60,eSIM,Pixo…)Protocolvendors(Optimay,Condat…)OtherS/Wbuildingblockvendors(forWAP,MMS,J2ME…)MTK之前世今生Networking(GSM/GPRS)ProtocolStackLayer1DeviceDriverMobileInternetProtocolsUDP/TCP/IPSIPRTP/RTCP/RTSPStorageManagementDRMMediaLibraryFileSystemExternalMemorySlotDeviceManagementMultimediaEngineVideoManagerAudio/melodyDataConnectivityOBEXSyncMLBluetoothIrDAWLANApplicationLayerMMSEMS/SMSBrowserGamingEmailJ2MELocation/LBSPhotoEditorStreamingAudioPlayerPCsync.toolMultimediaPlayerIM/IMPSPTT/PoCSVGVoiceRecognitionBluetoothApp.CamcorderWAP3DEngineAcousticSolutionSoundEffectTVtunerOthersFMRadioVideoTelephonyBluetoothIrDASD/MMCUSBAudioIn/OutAudioCodecSynthe-sizerRFModuleBasebandChipsetBluetoothheadsetAccessoriesUSBdatacableLCDDisplayLCDDisplayMediaICCameraTouchPanelMTK提供什么?硬件套片:基带芯片(CPU),射频芯片,电源管理芯片部分外围芯片(其他事业部提供):蓝牙、触摸屏控制芯片、GPS硬件参考设计(原理图)软件包含手机基本应用、多媒体功能集成必需的第三方软件(浏览器、JVM、输入法等)硬件服务关键器件验证(存储器件,Camera)实验室(射频、天线、Camera调试)入网认证、运营商认证软件服务BUG解决(原始版本以及客户开发过程中产生)其他软、硬件技术培训软、硬件新功能技术评估生产线技术支持现有产品6205年04超低低端中端高端62176219050607086226/27622862296230622562356238SmartphoneTD-WCDMA62236223P2K~3K1K~2K400~1K40052MHz30万MP352MHz130万MP3/MPEG4/3gpGPRS104MHz200万MP3/MPEG4/3gpAAC/AAC+/StreamingEDGE208MHz200万MP3/MPEG4/3gpH.264/StreamingGPS/TVEDGE52MHz30万MP3/AAC/AAC+Streaming52MHz10万MP3第三方软件公司如何与之合作必备软件输入法,Browser,JVM,VR运营商规范DM,手机动画,二维码,PIM,DRM部分客户需要替代合作名单中的软件(如中文之星输入法)合作名单中没有的类型(如OCR扫描软件)其他SP公司自行开发并推广的软件(如音乐在线播放客户端)NucleusOS简介NucleusOS是美国源代码操作系统商ATI公司推出的新一代嵌入式操作系统,属于抢先式实时多任务操作系统内核,95%的代码使用ANSIC编写,便于移植,在RISC上只占40K,以其优异的性能及源代码开放特性在各个领域获得了广泛的应用。MTK操作系统是基于NucleusOS一个实时RTOS。NecleusOS提供嵌入式操作系统的核心,提供内存管理、进程调度、线程管理、定时器机制、中断处理、、信号、MailBox、MMI初始化等核心机制。手机OS初始化流程(1)BootLoader启动过程:(Bootarm.s)a)初始化中断向量表,注册中断处理函数。b)设置C语言的堆栈,设置ro,rw,zi。c)拷贝flash的数据段到内部ram或外部ram。d)最后跳转到Nucleus系统初始化__main处(其源代码不可见)。手机OS初始化流程(2)NucleusOS初始化过程:(Application_Initialize函数)a)系统和操作系统相关的初始化部分(systemIntialization())。b)外围接口驱动初始化部分。c)协议任务和MMI任务初始化。d)设置看门狗。手机OS初始化流程(3)MMI任务的初始化a)设定UI的定时器。b)设定UI接口函数和相关的UI参数。手机OS初始化流程(4)OS调度(MMITask--mmitask.c)a)MMI资源安装。b)MMI各个应用程序初始化(包括设定各个应用的消息处理函数)。c)进入MMI开机动画程序,等待SIM卡验证成功,同时协议栈任务将检查SIM设定。d)最后进入待机接口函数EntryIdleScreen()等待用户和协议栈消息。开发环境配置开发工具:VC6.0(VS2003)编译工具:ADS1.2(842以上,低于此版本需要打补丁)ActivePerl5.6.1SDK:MTK开发工程目标设备:由于驱动等原因,编译好的Bin文件只能放在MTK工程对应的手机上。刷机工具:FlashTool调试工具:Catcher开发环境配置MTK工程命名方式以6225_06B版本为例:6225标示其采用的基带芯片型号,06标示为2006年的版本,B标示2006年的第二个版本。各个版本之间有细微的差别。开发环境配置MTK工程目录结构|-build-|------编译的结果||-log------编译生成的log||-make------makefile||-plutommi-||-Customer------资源目录|-mmi------人机界面|-mtkapp------应用代码开发环境配置编译模拟器与真机a)首先进到make文件夹找到系统工程makefile文件,假设为OPPO35_08B_09037_HW11_GPRS.mak。b)编译模拟器命令为makecustom=OPP035_08B_0937_HW11GPRSnewmodis。c)编译器真机命令分为:1)编译全部makecustom=OPP035_08B_0937_HW11GPRSnew。2)remake模块makecustom=OPP035_08B_0937_HW11GPRSremake[模块名]。3)update模块makecustom=OPP035_08B_0937_HW11GPRSupdate[模块名]。4)clean模块makecustom=OPP035_08B_0937_HW11GPRSclean[模块名]。开发环境配置MTKModis模拟器HelloWorld示例MTK平台UI是以窗口为单位进行组织,系统窗口堆栈负责窗口的出栈和压栈。因为系统窗口堆栈的行为我们无法控制,故应用整体作为系统的一个窗口,UI绘制由应用自行控制。应用的逻辑由消息事件和时钟事件驱动。HelloWorld示例voidExitHello(void){GoBackHistory();}voidEntryHello(void){//将界面压入栈顶EntryNewScreen(HELLORES_BASE,NULL,EntryHello,NULL);entry_full_screen();//注册按键事件ClearAllKeyHandler();SetKeyHandler(ExitHello,KEY_ENTER,KEY_EVENT_DOWN);DrawHello();}HelloWorld示例voidDrawHello(void){GDI_HANDLEhandle;charszText[]={'h',0,'e',0,'l',0,'l',0,'o',0,0,0};gdi_layer_get_base_handle(&handle);//获得GDI句柄gdi_layer_push_and_set_active(handle);//设置句柄有效gdi_layer_lock_frame_buffer();//独占LCDgdi_layer_push_clip();//当前剪切域压栈gdi_layer_set_clip(0,0,176,204);//设置当前剪切域gdi_draw_solid_rect(0,0,176,204,gdi_act_color_from_rgb(255,255,255,255));pixtel_UI_set_text_color(pixtel_UI_color(0,0,0));pixtel_UI_move_text_cursor(10,100);pixtel_UI_print_text((unsignedshort*)szText);gdi_layer_pop_clip();//回复之前的剪切域gdi_layer_unlock_frame_buffer();//解锁LCDgdi_layer_pop_and_restore_active();//回复之前的句柄gdi_layer_blt(handle,0,0,0,0,0,176,204);//update到LCD}HelloWorld示例MTK开发进阶MTK的Timer(定时器)a)NonAlignTimer(exactlytimer)。b)AlignTimer(allowtodelaytimer)。c)GPIOTimer(硬件层的Timer)。d)Timer是一次性的。e)代码示例:staticvoidTimer_Notify(void){//……StartTimer(pTimer-timerHandle,UNITE_TIME,Timer_Notify);}StartTimer(pTimer-timerHandle,UNITE_TIME,Timer_Notify);MTK开发进阶消息机制a)采用SetProtocolEventHandler注册消息处理函数。b)ClearProtocolEventHandler清除消息处理函数。d)早期版本只能够一对一处理,09A以上支持一对多。c)消息支持进程间通信,采取共享内存方式实现。MTK开发进阶消息机制代码示例://注册消息处理函数voidGetCellIDStartReq(U32mod_id,PU8info_req){SetProtocolEventHandler(parsing_cellId_data,MSG_ID_MMI_EM_STATUS_IND);get_cellid_send_start_req();}//发消息请求cellidvoidge