一 底层部分
1 首先硬件上电给基带芯片供电,在经过一定时序条件后,给基带芯片复位信号,开始了ARM核的启动过程。谈到启动,我们必须熟悉Scatter file。Scatter file定义了Load Region和Excecute Region,我们要关心系统运行时代码、数据的地址分布。
2 Bootarm.s是一个重要的文件,与启动过程息息相关,其中的INT_Initialize函数是ARM启动开始执行的代码。
3 BSP所作的工作如下。
(1)配置PLL,配置基带芯片的EMI参数,以让系统能够以最大的速度读取外部存储设备数据,让CPU以最大速度运行,从而缩短启动过程。
(2)做好runtime代码及数据的准备,确保Excecute Region的代码及数据到位。
(3)配置好ARM 7种异常模式的堆栈,进入RTOS Nucleus操作系统的初始化。
(4)Nucleus留给客户的初始化函数Application_Initialize,做平台该做的初始化工作,比如外部控制器的初始化等。
二 软件部分
(1)函数MMI_task主要完成的是不停地读取protocoltask中的消息,然后根据消息和参数进行相应的处理函数。
(2)在函数MMI_task里读取了消息后,系统会根据消息决定相应的处理方式。
(3)如果系统收到消息MSG_ID_MMI_EQ_POWER_ON_IND,系统根据当前系统的状态来决定启动的方式,比如通过按键启动、充电器启动等。
(3)如果系统收到消息MSG_ID_MMI_EQ_POWER_ON_IND,系统根据当前系统的状态来决定启动的方式,比如通过按键启动、充电器启动等。
(4)正常启动(用户按键盘启动)中首先调用了函数InitializeALL,它是系统启动的初始化函数。
(5)接着调用函数InitNvramData,让一些需要读NVRAM的模块读出NVRAM中的数据,以此来初始化这些需要用到NVRAM中的数据来初始化的模块。
(6)初始化后就为进入主屏幕而作相关的准备。播放开机动画及声音,点亮显示屏,并且设置一个开机动画播放完毕后需要调用的函数。
(7)最后进入EntryIdleScreen函数,该函数就是程序的初始界面,同时在里面把左软键设置为进入主菜单,左软键设为进入电话本。
至此,一个启动过程就结束了,以后的事情都交给注册好的事件响应函数和菜单响应函数去做。