Qualcomm手机开机全过程大揭密
- 格式:doc
- 大小:148.00 KB
- 文档页数:8
手机开机流程1、手机加电给手机加上电池或直流稳压电源供电,电源治理芯片〔PMU〕得到电池电压后,其内部的32KHz时钟晶体模块开始工作,输出外部RTC的工作电压,为此实时时钟晶体起振2、手机复位按下开机键,PMU检测到后,输出复位信号RSTON给手机CPU,CPU 便开始启动系统自检程序,进行自检3、工作电压输出手机完成自检后,CPU通过IIC总线操纵PMU输出手机各电路的工作电压,如VDD1、VDD2、VDD3、A VDD等4、13M晶体工作CPU得到工作时钟和工作电压后,便输出REF_ON信号,操纵13M电路的工作,使其产生13MHz时钟,一路给CPU提供工作主时钟,另一路给射频主芯片提供基准频率源5、调用开机程序CPU自检完成,并得到工作电压和主时钟后,便通过IIC总线校准PMU 输出的各路工作电压,校准完成后便输出片选信号和地址信号给FLASH,调用开机程序,实现开机6、建立通信连接手机开机后,CPU从FLASH中调用射频参数,通过广播操纵信道〔BCCH〕接收小区信号强度,假如手机内有SIM卡或UIM卡,手机便将卡中的相关信息发射给临近的基站,并接收来自基站的信息,从而与对应的网络实现连接,即通常所说的搜网7、待机搜网完成后,手机便处于等待状态,期间手机还会通过慢速辅助操纵信道〔SACCH〕周期性地与基站交换一些信息,如信号强度、频率同步、接收质量和接收电平等手机开机到接入网的过程详解一、手机的入网过程手机开机后依照设定,以手动或自动方式选择网络。
手机查找选定网络中的合适小区,并调谐到该小区的操纵频点。
假如需要,手机还将进行位置更新〔LOCA TION UPDATING〕或国际移动用户识别码〔IMSI〕附着〔A TTACH〕。
选择小区后,手机通过测量如发觉更好的小区,那么进行小区重选。
当手机从网络覆盖的盲区回到覆盖区,手机将重新选网。
1.网络选择手机按照以下优先规那么选择网络:a.归属网(HPLMN)b.SIM卡中设定的网络优先顺序c.信号强度大于-85dBm的网络按随机顺序d.其它网络按信号强度的强弱顺序假如登记成功,手机显示该网络,否那么,手机显示NO SERVICE或进入受限服务状态。
第一步:启动simulator的时候,直接进入:MMI_task( )1. iacMemInit();2.进入一个while(1)循环。
以后的过程都是通过消息机制,即:一直在这个循环中读取消息,然后做相应的处理。
第一次进入while(1)之后,OslReceiveMsgExtQ(qid, &Message)就读取到一个消息:PRT_MMI_TIMER_IND。
然后就一直在这个循环中读消息。
第二步:Power On读取到消息:MMI_EQ_POWER_ON_INDcase MMI_EQ_POWER_ON_IND:gdi_init();switch (p->poweron_mode) //判断power on的模式{case POWER_ON_KEYPAD: //用户按下开机键OslMemoryStart(TRUE);g_charbat_context.PowerOnCharger = 0; //不是因为充电而开机的InitializeAll(); //初始化,重点学习OslDumpDataInFile();//这个函数不能进入,直接跳过InitNvramData(); //加载保存在NVRAM中的设置的参数mmi_pwron_entry_animation_screen(); //开机动画break;case case POWER_ON_PRECHARGE:case POWER_ON_CHARGER_IN:g_pwr_context.PowerOnMode = p->poweron_mode;InitializeChargingScr();break;case POWER_ON_ALARM: //定时开机AlmInitRTCPwron();break;case POWER_ON_EXCEPTION: //For abnormal reset when invalid SIMOslMemoryStart(TRUE);SetAbnormalReset();InitializeAll();OslDumpDataInFile();ClearInputEventHandler(MMI_DEVICE_ALL);ClearKeyHandler(KEY_END, KEY_LONG_PRESS);InitNvramData();AlmReInitialize();InitAllApplications();mmi_pwron_exception_check_display();break;}执行过开机之后,就不会进入这里了。
手机开机的工作原理
手机的开机工作原理是指当用户按下手机的电源键后,手机内部的硬件系统开始进行一系列的启动操作,从而使手机正常运行起来。
首先,当用户按下电源键时,手机内部的电源管理芯片会接收到电源的供电信号。
电源管理芯片会负责将电源信号进行适配和转换,将电源信号提供给手机的主控芯片。
接下来,主控芯片会接收到电源信号,并开始进行初始化操作。
主控芯片是手机的核心部件,它负责控制和管理整个手机的运行。
主控芯片会对各个硬件模块进行初始化配置,包括内存、存储器、显示屏等。
此外,主控芯片还会加载操作系统的启动程序。
一旦操作系统的启动程序被加载,它会开始执行一系列的启动流程。
首先,操作系统会对硬件进行检测和初始化,确保各个硬件模块正常工作。
然后,操作系统会加载相关的驱动程序和系统服务,为手机提供各种功能和服务。
同时,操作系统会启动用户界面,显示在手机的屏幕上。
用户可以通过触摸屏幕或按键来操作手机。
此时,手机已经完成开机过程,用户可以开始使用手机进行各种操作。
总的来说,手机的开机工作原理涉及到电源管理芯片、主控芯片、操作系统和相关硬件的协同工作。
通过一系列的启动操作和初始化配置,手机能够正常运行并提供各种功能和服务。
请先读我!0黑莓Q10——开机篇1. 如何开机按照图示,用手指向下推开后盖(注意:不要暴力掰开后盖,可能令后盖折断)。
Q10使用Micro-SIM卡(就是iPhone 4/4s用的卡),按电池仓图示插入SIM卡,插入存储卡,放入电池,盖上后盖。
(注意:切忌使用SIM卡还原卡套,会弄断SIM卡针脚。
)Q10须按上方电源键才能开机,LED闪一次红色后开机启动。
如不能开机,请先接好充电器充电,使之达到开机所需电量。
2.功能按键分布3.激活向导Q10首次开机需激活后方可使用。
按照以下步骤进行设置后进入系统界面4. 主屏幕的基本操作:5. 基本操作:Q10没有传统黑莓手机的方向导航键和返回按键,所有操作依靠手势完成。
1.手指在屏幕上下左右滑动,可以翻页,滚动屏幕或在切换不同面板。
用2个手指向上或向下滑动可直接到达页面顶部或底部。
2.从屏幕下方向上滑动,可最小化程序,并在同时运行的程序间切换,按应用程序视图右下角的x可关闭程序。
3.从屏幕上方向下滑动,可打开程序或系统的菜单选项。
4.2个手指分开滑动是放大,并拢滑动是缩小。
5.按住程序图标直到变成跳动状态,再将图标移动到想放置的位置1 2 345*TIPS:Q10在屏幕休眠状态下,手指从屏幕下方滑动到屏幕上方,即可点亮屏幕;在待机画面下,手指从左下角向上滑动即可重新进入系统。
6.打字提示:Q10的输入方式与传统黑莓手机类似。
1.输入数字及符号需按住ALT键;2.输入键盘上没有的符号需按SYM键;3.输入大写需按CAP键,按住CAP锁定在大写状态;4.按住ALT键,再按回车键在不同输入法间切换,;7.物理按键操作:黑莓Q10的电源键在手机顶部,装有电池的黑莓Q10在关机状态下直接按下电源键即可开机。
在开机状态下按住电源键不放,会弹出关机提示,3秒倒计时后就关机,如果重启可点击右下角的“重新启动”按钮。
长按【播放/暂停】键打开【语音控制】;同时按下【音量+】和【音量-】,给手机屏幕截图。
Qualcomm手机开机全过程Tags: Android, Nand Flash, Nor Flash, QUALCOMM, 高通手机由Fgamers发表于2011 年 03 月 30 日 19 次阅读评论(0)一.开机的简要流程分析Qualcomm的平台软件支持两种启动方式:一种是Nor Flash启动方式,另外一种就是Nand Flash启动方式。
Nor Flash启动方式就相当于硬件直接找到一个入口点开始执行代码,相比较而言会比较简单,且 Amoi 没有采用此种方式,所以本文对于这种方式不做详细分析。
另外一种就是Nand Flash启动方式,这种方式和 PC 的启动方式比较相像,也是 Amoi 采用的 Boot 方式,下面将详细分析在此方式下面的开机过程。
按下开机键之后,将产生一个时钟中断,从而通知 AMSS 主芯片的 Boot Load 硬件去将放置于Nand Flash上面的第一个 Block ( 8K )里面的Boot 代码 Copy 到内核内存( RAM ,这个内存应该是 CPU 自带的内存,同后面提到的 SDRAM 有一定区别,可以把它当作 CPU 的 Cache )的0xFFFF0000 地址,并开始执行 Boot 代码。
Boot 的主要任务是完成整个系统的硬件初始化工作(类似于 PC 上面的 BIOS 所完成的硬件自检工作,至于 Boot 的详细工作机制,后文会有详细描述)。
Boot 所完成的工作里面,最重要的一件事就是会将整个手机软件代码( AMSS 软件包)拷贝到 SDRAM 中,并最后将控制权交给 AMSS 软件。
说白了,就是 Boot 执行完成之后,代码的执行点将由 Boot 跳转到 AMSS 软件的的入口点函数 main(). (此函数在 mobile.c 里实现)。
代码运行到了 Main() 之后,在这个函数里面将完成操作系统( rex )的初始化工作,其实现方法是调用 rex_init() 。
【MTK芯片】手机开机的工作条件手机要正常连续开机,需具备以下三个条件:一是电源IC工作正常;二是逻辑电路工作正常;三是软件运行正常。
1、电源IC工作正常(1)电源IC供电正常。
电源IC要正常工作,需有工作电压,即电池电压或外接电源电压;(2)有开机触发信号。
开机触发信号既有高电平,也有低电平,不管哪种触发方式,开机触发信号差不多上送到电源IC上,在按下开机键时,开机触发信号就有了电平的变化(从高电平变为低电平或从低电平变为高电平)。
(3)电源IC正常。
电源IC内一样集成有多组受控或非受控稳压电路,当有开机触发信号时,电源IC的稳压输出端应有电压输出。
(4)有开机坚持信号。
开机坚持信号来自CPU,电源IC只有得到开机坚持信号后才能输出连续的电压,否则,手机将不能连续开机。
2、逻辑电路工作正常(1)有正常的工作电源。
按下开机键后,电源IC输出稳固的供电电压为逻辑电路供电,包括CPU、FLASH和CSP。
(2)有正常的系统时钟。
时钟信号是CPU按节拍处理数据的基础,手机中时钟电路有两种:一种是时钟VCO模块,内含振荡电路的元件及晶体。
当电源正常接通后,可自行振荡,形成13MHZ信号输出;另一种是由中频集成电路与晶体组成,中频IC得到电源后内部振荡电路供晶体起振,由中频模块放大输出。
13MHZ时钟一样通过电容、电阻或放大电路供给CPU,另外也供给射频锁相环电路作为差不多时钟信号。
(3)有正常的复位信号。
CPU刚供上电源时,其内部各寄存器处于随机状态,不能正常运行程序,因此,CPU必须有复位信号进行复位。
手机中的CPU的复位端一样是低电平复位,即在一定时钟周期后使CPU内部各种寄存器清零,而后此处电压再升为高电平,从而使CPU从头开始运行程序。
(4)逻辑电路本身正常。
逻辑电路要紧包括CPU、FLASH、CSP。
当CPU具备电源、时钟和复位三个条件后,通过片选信号与FLASH联系,通过数据总线与地址总线相互传送数据。
android手机启动过程与刷机简单分析这几天看了一些嵌入式linux系统和智能手机android系统的资料,琢磨了一下安卓手机的启动过程,虽然每种手机的CPU、主板和存储器有差别,但大致过程相似。
分享一下:手机按下电源开关键后:1、主板上电,CPU芯片加载自身片上的一小段引导代码bootloader(代码的作用:告诉CPU到哪里去寻找系统启动程序,比如到NAND flash接口去读用户程序);2、CPU按扇区方式将NAND FLASH第一个block内的SPL(Second Program Loader二次引导程序即fastboot)加载到RAM,读取分区表,加载基本设备驱动,读取boot分区的linux内核系统;由于SPL对usb设备的支持,所以我们在手机开机时通过按开机键+音量键(不同手机可能按键组合不同),可以进入fastboot工程模式,在这种模式下能通过电脑、USB线对手机进行底层操作。
3、由linux内核加载sysytem分区内的安卓系统程序;第一段引导代码bootloader很小,cpu出厂前已经固化在芯片上了,也叫onchip引导代码,不可人工改写。
二次引导程序SPL是利用JTAG仿真器固化在Nand flash的最前端或后端,我们刷机时能进入fastboot工程模式就是它的功劳。
手机厂商对这段引导程序一般都会加锁,防止用户修改,如果这段代码被破坏,手机就成砖了,只能靠专用设备烧录或返厂维修。
只要手机能进fastboot工程模式,刷recovery、root和刷Rom都是以后的事情了,基本上不会破坏以上两段引导程序。
只要固化的引导程序完好,即使刷机时手机不能进入系统,只要能显示第一屏,一般来说都有挽救的希望,不要变砖。
刷recovery就是在recovery分区安装类似于电脑上ghost一键恢复的程序。
刷Rom包就更简单了,跟电脑装系统一样,就是将安卓系统文件覆盖进手机的system分区。
Qualcomm手机开机全过程大揭密摘要:本文试图通过代码来深入剖析Qualcomm手机开机的整个过程,即从按下开机键一直到出现待机界面,Qualcomm的手机软件在整个流程中究竟完成了哪些工作。
本文的主要目标是理清手机的初始化流程,并为今后Amoi定做初始化工作提供一个参考。
关键字:开机、Rex、TMC、ui_task、CoreApp一、开机的简要流程分析Qualcomm的平台软件支持两种启动方式:一种是Nor Flash启动方式,另外一种就是Nand Flash启动方式。
Nor Flash启动方式就相当于硬件直接找到一个入口点开始执行代码,相比较而言会比较简单,且Amoi没有采用此种方式,所以本文对于这种方式不做详细分析。
另外一种就是Nand Flash启动方式,这种方式和PC的启动方式比较相像,也是Amoi采用的Boot方式,下面将详细分析在此方式下面的开机过程。
按下开机键之后,将产生一个时钟中断,从而通知AMSS主芯片的Boot Load 硬件去将放置于Nand Flash上面的第一个Block(8K)里面的Boot代码Copy 到内核内存(RAM,这个内存应该是CPU自带的内存,同后面提到的SDRAM有一定区别,可以把它当作CPU的Cache)的0xFFFF0000地址,并开始执行Boot 代码。
Boot的主要任务是完成整个系统的硬件初始化工作(类似于PC上面的BIOS所完成的硬件自检工作,至于Boot的详细工作机制,后文会有详细描述)。
Boot所完成的工作里面,最重要的一件事就是会将整个手机软件代码(AMSS软件包)拷贝到SDRAM中,并最后将控制权交给AMSS软件。
说白了,就是Boot 执行完成之后,代码的执行点将由Boot跳转到AMSS软件的的入口点函数main().(此函数在mobile.c里实现)。
代码运行到了Main()之后,在这个函数里面将完成操作系统(rex)的初始化工作,其实现方法是调用rex_init()。
⾼通芯⽚启动流程对于嵌⼊式⼯程师了解芯⽚启动过程是⼗分有必要的,在分析、调试各种问题的时候都有可能涉及到这⽅⾯的知识。
同时这部分知识也是⽐较复杂的,因为其中涉及到芯⽚内部架构,启动各个阶段软件代码执⾏顺序,启动模式等等。
下⾯以⽐较常⽤的Qualcomm MSM8953芯⽚的启动过程为例,进⾏宏观分析(⼤部分翻译了⾼通的⼿册^-^),下⼀篇⽂章进⾏代码分析。
之前负责过⼀段时间的OTA升级,对于启动流程还是⽐较了解的。
试着擦除过⾼通芯⽚⾥的个别镜像⽐如sbl1,recovery,modem,boot等,设备会进⼊不同的状态⽐如9008,和9006这个也属于经验吧,尤其是⼯⼚退回来的设备中进各种特异状态的设备还是⽐较多的。
但如果要定位是哪个模块出问题了,还是⽐较⿇烦使⽤qctm,或者看kerenl打印的⽇志来进⾏分析。
⼀层⼀层的找构建分析环境处理器核⼼可以看到MSM8953中的处理器有5个,分别为:1, APPS Cortex A53 core,运⾏android2, RPM(Resource Power Manager) CortexM3 core,主要⽤于低功耗应⽤3, Modem(MSS_QDSP6) ⾼通⾃有指令集处理器,处理3G、4G通信协议等4, Pronto(WCNSS) 处理wifi相关代码5, LPASS ⾳频相关对映下⾯芯⽚硬件结构图中各个处理器的框图来看就很清晰了。
启动相关image介绍1,PBL(Primary Boot Loader) 位于rom中,是芯⽚上电后执⾏的真正第⼀⾏代码,在正常启动流程中会加载SBL1。
如果启动异常会虚拟出9008端⼝⽤于紧急下载(短接板⼦上的force_boot_from_usb引脚(MSM8953 为gpio37)到1.8v可以强制进⼊紧急下载模式)。
2,SBL1(Second BootLoader stage 1) 位于eMMC中,由PBL加载,初始化buses、DDR、clocks等,会虚拟出9006端⼝,⽤于不能开机时dump ram3,QSEE/TrustZone 安全相关,如fuse4,DEVCFG OEM配置信息(如OEMLock)6, Debug Policy 调试相关7, APPSBL 即为BootLoader,⽬前使⽤LK(littlekernel)8,HLOS(High LevelOperating System) 即为Linux/Android9,Modem PBL 即为Modem处理器的PBL10,MBA(Modem BootAuthenticator) Modem处理器启动鉴权启动流程1,系统上电,使MSM8953从上电复位开始运⾏。
摘要:本文试图通过代码来深入剖析Qualcomm手机开机的整个过程,即从按下开机键一直到出现待机界面,Qualcomm的手机软件在整个流程中究竟完成了哪些工作。
本文的主要目标是理清手机的初始化流程,并为今后Amoi定做初始化工作提供一个参考。
关键字:开机、Rex、TMC、ui_task、CoreApp一、开机的简要流程分析Qualcomm的平台软件支持两种启动方式:一种是Nor Flash启动方式,另外一种就是Nand Flash启动方式。
Nor Flash启动方式就相当于硬件直接找到一个入口点开始执行代码,相比较而言会比较简单,且Amoi没有采用此种方式,所以本文对于这种方式不做详细分析。
另外一种就是Nand Flash启动方式,这种方式和PC的启动方式比较相像,也是Amoi采用的Boot方式,下面将详细分析在此方式下面的开机过程。
按下开机键之后,将产生一个时钟中断,从而通知AMSS主芯片的Boot Load硬件去将放置于Nand Flash 上面的第一个Block(8K)里面的Boot代码Copy到内核内存(RAM,这个内存应该是CPU自带的内存,同后面提到的SDRAM有一定区别,可以把它当作CPU的Cache)的0xFFFF0000地址,并开始执行Boot 代码。
Boot的主要任务是完成整个系统的硬件初始化工作(类似于PC上面的BIOS所完成的硬件自检工作,至于Boot的详细工作机制,后文会有详细描述)。
Boot所完成的工作里面,最重要的一件事就是会将整个手机软件代码(AMSS软件包)拷贝到SDRAM中,并最后将控制权交给AMSS软件。
说白了,就是Boot 执行完成之后,代码的执行点将由Boot跳转到AMSS软件的的入口点函数main().(此函数在mobile.c里实现)。
代码运行到了Main()之后,在这个函数里面将完成操作系统(rex)的初始化工作,其实现方法是调用rex_init()。
Rex_init()完成的工作很简单:1.完成操作系统必要的一些数据结构(timer链表、任务链表等))的初始化之外;2.接下来,它创建了三个任务,分别是:rex_idle_task、rex_dpc_task和tmc_task。
Idle任务没什么好解释的,目前这个任务为空,什么也没做,dpc_task目前不知道是做什么的,暂时可以不用管。
前面的这两个任务都属于操作系统层面的,由操作系统来维护,和手机软件关系不大。
哪一个和手机软件关系大呢?答案是:tmc_task。
大家可以把这个当作操作系统的入口(主)任务,也可以把它当作整个手机软件的入口任务。
即AMSS软件里的所有其它任务的创建和维护就是由这个tmc_task来完成的。
到此为止,整个AMSS软件还并没有跑起来,只是跑到了tmc_task里面了。
在tmc_task里面,会调用tmc_init()来完成整个AMSS软件包的初始化工作,其中最重要的一项工作就是调用tmc_define_tasks()将AMSS软件包所有需要的任务都创建起来了。
比如说slee_task、dog_task、cm_task、wms_task、ui_task 等。
这些任务,一般不需要直接和AL层软件打交道,但请大家记住,手机上所有功能的实现最根本点就是由这些服务组件(Service Task)来完成的。
将来大家跟踪一个具体的功能模块时,比如说通话模块,如果需要,可以再去深入研究它的具体实现。
好了,到现在为止,所有的AMSS核心软件就全部跑起来了(手机的功能模块,在软件方面就体现为OS层面的一个任务)。
但现在大家还根本看不到Brew和AEE的影子。
呵呵,各位不要急。
到了这个层面之后,我想稍微多说几句。
最早的Qualcomm平台,比如说5xxx系列,是根本没有Brew的,那个时候的AL(Application Layer)层软件开发,是直接调用底层Service task所提供的API来完成相应的工作的。
从这种角度来看的话,显然那时的开发是比较郁闷和难度较高的。
不过,到了65xx之后,Qualcomm平台引入了Brew,手机开发商就没必要去从这么底层(Service API)的层面进行手机开发了,他们完全可以基于Brew来实现一台手机的所有功能(Qualcomm给我们的参考代码,就是全Brew平台的)。
Brew的运行环境AEE是如何跑起来的呢?关键在于ui_task(),由于ui_task和我们手机开发的关系非常密切,其地位也相当重要,所以,后文我将单独对它进行一个深入的研究与分析。
到目前为止,大家只需要知道ui_task将AEE加载起来了,并且,它起到了一个中间层的作用,即所有AMSS底层服务组件的消息,都将经由ui_task而转到AEE,并最终转到具体的App(Applet)的执行代码里面(HandleEvent())。
注意:1.上述的开机过程,在每一次按开机键都需要走一遍,即关机之后,整个系统的所有功能都将消失,而不像有些手机,看起来是关了机,但实际上底层还是有一些软件模块在跑。
为什么可以肯定地说上述开机过程每次都必须走一遍,原因很简单,因为我们的平台软件是基于Nand Flash启动的,所有的代码都需要Copy到SDRAM才能运行,而关机断电之后,SDRAM里的东东会全部丢失,所以,毫无疑问,上述的过程必须每次开机都执行;2.关机的过程相对比较简单,系统检测到关机中断之后,将调用tmc_powerdown_handler()来完成关机动作,它将把所有AMSS的任务都Stop掉,并最后调用rex_exit()退出Rex,从而完成整个关机动作。
3.显然,关机动作前,如果有必要,每一个任务必须将它希望保存的信息保存到Flash上面,以便下次开机时可以得到这些信息;开机流程简图/p-3853281.html[attach]1237[/attach]说明:1.Tmc是操作系统层面和AMSS软件关系最密切的一个任务,不过需要OEM商在此处修改的地方应该不多;2.ui_task是在操作系统层面,OEM商需要重点研究清楚的一个任务,它是连接底层Task和上层AL的一个中间层,有可能需要加入OEM商的操作流程;3.CoreApp是在Brew层面的一个AL层的入口Applet,它其着管理整个上层AL层软件的作用,根据产品需求,这个App需要定做;4.AEE是整个上层App的运行环境,目前Qualcomm没有公开它的源码,但它的运行机制,Amoi需要好好研究清楚,我将在另外一篇《Qualcomm平台AEE运行机制深入分析与研究》中探讨它的运行机理和调度机制,大家有兴趣可以参考此文;二、Boot代码深入分析Boot代码大部分是用汇编语言写的,也有小部分,可能需要由OEM商修改,所以用C语言来写。
另外,Boot代码属于Driver范围,所以大家可以在drivers/boot目录里面找到相应的代码。
Boot的代码组织得非常模块化,整个boot的入口点是在Boot_function_table.s里面,这个汇编代码里面实际上是将Boot 需要完成的任务封装成了不同的函数,由不同的函数来完成相应的工作,接下来,我将深入分析这些函数所完成的工作,如下所述。
a)mmu_enable_instruction_cache;这个只有在Nand启动模式时才需要,打开ARM的指令Cache.b)boot_hw_ctrl_init此函数主要是完成两条总线(EBI1、EBI2)控制器的初始化,这个函数执行完了之后,系统就可以知道两条总线上连接了哪些设备,同时也可以找得到这些设备,不过,至于单个设备自身的初始化,则不在这里。
[注]这个函数很重要,OEM商如果需要加新的设备到系统中(挂在两条总线上),则需要定做此模块,目前阶段主要是内存。
另外,如前文所述,这个函数是由C语言来写的,主要目的就是为了方便OEM商定做。
内存设备的修改,可以在这个模块里找到相应的数据结构,相对还是比较简单的。
c)boot_hw_tlmm_init1.晶振时钟的初始化;2.中断表的初始化;3.GPIO的初始化;4.Msm本身的驱动,除了EBI2;d)boot_rom_test这个函数非常简单,只是做一个很简单的Rom检查.(比对两个标志位来检查,并没有一块一块地去检查)。
e)boot_ram_testRam自检,具体算法其实也很简单,就是读、写内存以判断是否成功。
f)boot_ram_init1.拷贝手机代码从Nand Flash到SDRAM。
a.Image__BB_RAM__Base:Core Code;b.Image__APP_RAM__Base:App Code;[注]上述动作是分块进行的,原因是因为Qualcomm支持分块Boot Load.2.将Image__ZI_REGION__ZI区域初始化为0;3.初始化OEM要求的动态Heap;4.至于代码段里的数据初始化,直接在Image里就完成了(编译器完成);g)boot_stack_initializeARM栈初始化,主要是为分块代码加载而预留的.h)boot_cache_mmu_initARM Mmu初始化注意:到此为止,整个Boot的工作就告完结了,那么,它又是如何跳到AMSS的main入口点呢?原因很简单,ARM编译器在链接的时候会自动做出一个__rt_entry(),由此函数来完成ARM库函数的初始化,并最后将代码执行点跳转到main()。
而__rt_entry()会在boot_reset_handler.s里调用,具体细节,大家可以不用太过关心,只需要明白,Boot跑完之后,手机软件就跑到了main里就Ok了。
三.Ui_task的深入分析从大的方向来讲,ui_task只完成两件事,一件是必要的初始化工作(这个也是我们所关心的,即ui_task 到底完成了哪些工作);另外一件事就是各种信号量的事件处理,这也是我们比较关心的,即ui_task到底将哪些事件转发给了上层App。
搞清楚了上述两点,我们也就能大致把ui_task的承上启下的工作机理研究清楚。
1.ui_Init;初始化过程中,ui_task主要完成了如下几件事。
a)创建一个用于Kick Watchdog的定时器,这样WatchDog能够及时得到Kick,假如今后发现手机在ui_task里面自动重启,很有可能就是这个定时器的Timeout设置得过短而造成的;b)注册通话相关的回调,主要是和紧急呼叫相关;c)电话本初始化,之所以要进行这个工作,主要是加快开机之后AL层软件操作电话本的速度,但这样将有可能导致开机速度过慢,如果开机速度过慢,可以考虑进入待机界面之后,在后台开一个task去完成这项工作;d)初始化Sound设备;e)向底层服务任务wms_task注册wms回调,这个回调是在IWms组件里实现的。