当前位置:文档之家› Qualcomm手机——开机过程【大揭密】(中文版)

Qualcomm手机——开机过程【大揭密】(中文版)

Qualcomm手机——开机过程【大揭密】(中文版)
Qualcomm手机——开机过程【大揭密】(中文版)

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()。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上面,以便下次开机时可以得到这些信息;

开机流程简图

说明:

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_init

1.晶振时钟的初始化;

2.中断表的初始化;

3.GPIO的初始化;

4.Msm本身的驱动,除了EBI2;

d)boot_rom_test

这个函数非常简单,只是做一个很简单的Rom检查.(比对两个标志位来检查,并没有一块一块地去检查)。

e)boot_ram_test

Ram自检,具体算法其实也很简单,就是读、写内存以判断是否成功。

f)boot_ram_init

1.拷贝手机代码从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_initialize

ARM栈初始化,主要是为分块代码加载而预留的.

h)boot_cache_mmu_init

ARM 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组件里实现的。从这种角度来看,u帮我们把wms_task和IWMS组件联系起来了,但并没有去将AL层软件和IWMS联系起来,这个工作将是由AL层软件自己去完成。当然,注册回调的这个工作也是可以在AL层完成,之所以在这里完成,而不是在AL层完成,其主要目的是这个工作可以做到与AL层无关,即AL层不需要关心这个事情,但这个事情是短消息功能得于实现的必须步骤;

f)注册键盘消息回调;

通过这个回调,所有的按键消息都将经由底层的hs_task传到此回调函数里。然后回调函数将把所有的按键信息放到一个全局变量ui_key_buffer里面,接着发送一个UI_KEY_SIG信号给ui_task通知它去处理按键信息,至于ui_task如何处理按键消息的,后面的ui_handleSignals里会有详细描述。

g)初始化Lcd,这个工作不是LCD硬件设备的真正初始化,只是一些UI需要用到的LCD数据结构的初始化,和我们关系不大;

[注]

硬件的初始化,全部都在hs_task里面完成,从这种角度来看的话,系统能跑到ui_task里面,表明所有的硬件设备的驱动都已经成功加载。

h)置开机标志ui_powerup为True;

i)注册IPC信号量UI_IPC_SIG,这个可以暂时不管;

j)bridle_InitSWITable的初始化,这个目标,暂时不知道,也可以先略过;

k)初始化资源文件,其主要工作就是在Rom里面建立资源文件的符号链表,这样就可以让系统找到这些资源文件了(资源文件是被编译在代码段的,假如不这样做的话,系统将找不到这些资源文件);

l)Brew运行环境AEE的初始化:AEE_Init,这个函数看不到代码,大家只需要知道,到了这一步,整个Brew也就Run起来了,在AEE初始化完成之后,它将自动启动一个Applet,即CoreStartApp,而CoreStartApp将把CoreApp启动起来;

m)到此为止,ui_task的初始化工作完成;

[注意]

1) 从上述的ui_task的初始化工作可以看出,ui_task并没有完成手机AL层

软件的基本功能的初始化,比如说Sim卡检测、网络初始化等,这些工作,应该是在CoreApp里完成的。

2) 真正和手机功能相关的初始化工作,是在CoreApp里完成的,这个Applet 的工作机理,后面也会有详细描述;

2.ui_HandleSignals;

ui_task主要完成如下事件的处理。

a)看门狗喂食;

b)TASK_STOP_SIG信号,任务Stop,目前这个任务为空,没做任何事;

c)TASK_OFFLINE_SIG的处理,这几个任务都属于操作系统层面的事件,目前我们可以暂时不管;

d)处理关机信号:CoreAppHandleStopSig(),这个只是处理ui_task在关机前需要完成的任务,比如说发送一个消息给CoreApp让它关掉自己,然后将ui_task关闭;

系统的真正关机信号是由tmc来处理,当它发现需要关机时,调用

tmc_powerdown_handler来完成相应的工作,在这里就是给所有的任务发送TASK_STOP_SIG的信号。

深层次的关机处理,不需要我们了解,也没必要去知道,我们只需要知道在ui_task里面把该关的关掉就Ok了。

关机是一个层层深入的过程,每一个App或者任务只需要负责将它们自己创建的资源释放掉就Ok了。而关机的导引线,显然是在CoreApp里截获到关机键之后发送出来的,事实上也是如此。

e)网络掉线时,发送掉线信号给CoreApp;

其实这个信号完全可以在CoreApp里面,自己去注册,然后及时更新自己的网络状态,就不知有没有这种接口函数。

f)处理按键消息,其主要完成如下的工作:

i.打开背光;

ii.特理按键到虚键值的转换;

iii.按键声音的处理;

iv.将按键消息传送到AEE执行环境,由它去负责按键的派发;

[注]

1.背光的打开是由ui默认完成的,那这样的话,假如我不想按键时有背光,是否可行?看来就得修改此处的代码;

2.AEE的按键派发机制如何?它能否保证处于显示最上层的App永远是可以

得到Key的App,即假如一个Applet将自身Hide,它是否依然可以得到Key,而其它的Applet是否就不可以得到了?很怕也像EMP一样出现焦点丢失的情况;

g)处理AEE_APP_SIG信号量,完成AEE的调度工作,这个任务是ui完成的最重要的一项工作,因为上层的App需要定时进行调度,目前看来,这个调度工作是由AEE_APP_SIG触发的,而AEE_APP_SIG这个信号量,则由操作系统层面的一个定时器定时发送的。现在大家只要了解,AEE_Dispatch会定时调用就Ok了,至于更详细的AEE调度机制,可以参考我的另外一篇《AEE运行机制深入分析与研究》;

h)处理AEE_SIO_SIG信号量,这个看不到代码,暂时略过不管;

3.结论

通过上述对于ui_task的分析,可以看出,ui_task真正和手机功能有关系的(即可能需要定制或者修改的地方),主要就是初始化资源文件和处理按键消息这两部分。至于其它部分,目前都不需要Amoi关心。手机真正功能的实现,比如说开机Logo的显示、Sim卡的检查、Pin码校验等,都是在CoreApp里面完成的。

高通8909平台NQ210调试

高通8909平台NQ210调试说明 高通平台电信VOLTE仅在Android 7.1上实现,而原来的NFC解决方案(PN547)只支持到Android6.0,所以有了高通8909+NQ210+Android7.1这个组合,以实现电信VOLTE+NFC。 F9 R4.1+NQ210 NFC性能调试过程中,几点说明: 1,配置文件需要将NXP的RF_BLK参数合入到高通默认参数 2,注重Rx端匹配调节,对读卡性能有较大提升。调试方法详见附件 3,最终的NFC电路可以不用DCDC,也不用MOS管实现读卡、点对点和开关机卡模拟。性能如下,满足我们要求 配置文件 高通参考设计里给了两个配置文件 /system/etc/libnfc-brcm.conf /system/etc/libnfc-qrd_default.conf 其中libnfc-qrd_default.conf没有NXP_RF_CONF_BLK的六组配置参数,NXP_CORE_CONF_EXTN 的配置参数也不全 从WPI给的配置文件libnfc-nxp_RF - EMVCO.CONF中,将NXP_RF_CONF_BLK六组参数和NXP_CORE_CONF_EXTN配置参数全部拷到libnfc-qrd_default.conf中,并将此文件替换手机中的默认文件。若出现卡模拟性能不佳,也可以在补全的配置文件中通过修改相位来进行优化。

配置文件中需要重点注意的是,NXP_EXT_TVDD_CFG的配置一定要和硬件对应。其中Config1是不采用DCDC的,Config2和3都是采用DCDC供电的。对于我们的项目,在没有DCDC下性能也能满足要求,所以NXP_EXT_TVDD_CFG=0x01 NFC匹配电路 F9 R4.1+NQ210最终的匹配电路如下: 其中:L4802+C4818/L4803+C4820是EMI Filter,采用默认值即可。 C4814+R4806/C4816+R4808是Rx通路匹配,对读卡性能同样有较大影响。靠近读卡器无法正确读卡,而远离读卡器就能正确读卡的问题,也可以通过Rx通路来优化。 中间的串电容,并电容就是NFC天线的发射匹配,NQ210的发射阻抗在30ohm,和PN547的50ohm有所不同。在实验室也可以以读卡/身份证距离为测试标准,盲调匹配电路。 这里重点针对Rx通路的优化进行说明。通常保持电容1nF不变,通过调节电阻来优化Rx通路。判断标准是要保证AGC值在500-800之间,可通过如下步骤优化电阻: 1,修改配置文件A0, 40, 01, 01-> A0, 40, 01, 81,让log中能看到AGC值 2,将修改后的配置文件导入手机,重启手机后并重现打开NFC 3,通过adb logcat输出log,在log中找到“6F13”地址的后四位数字,如5C02即代表0X025C,转换成10进制就是604 4,若AGC太小则减小电阻值,若AGC太大就增大电阻值。同时兼顾实测情况下的NFC性能最终来确认电阻值。 我们最终选用的3.3K电阻,对应的AGC值为604,满足要求。

基于Unity3D和高通Vuforia SDK的AR开发

基于Unity3D和高通Vuforia SDK的AR开发 发表时间:2017-12-13T09:47:20.257Z 来源:《科技中国》2017年8期作者:刘伟杨希文盼向兴婷 [导读] 摘要:本文基于Unity3D这一专业游戏引擎和高通Vuforia SDK制作一款简单的AR,模型通过3d max等三维建模软件进行制作。本文主要介绍基于Unity3D如何制作出一款适合教育领域的AR应用软件,并对AR的研究方向与前景做出探讨。 摘要:本文基于Unity3D这一专业游戏引擎和高通Vuforia SDK制作一款简单的AR,模型通过3d max等三维建模软件进行制作。本文主要介绍基于Unity3D如何制作出一款适合教育领域的AR应用软件,并对AR的研究方向与前景做出探讨。 关键词:增强现实(Augmented Reality),Unity 3D,教育领域 一、概述及研究现状 增强现实(Augmented Reality),简称AR技术。一种实时的记算摄影机摄影位置及角度并加上相应图形的技术,在显示屏中把虚拟世界叠加到现实世界中,用户可以通过设备与其进行交流互动。 目前,国内的AR技术发展迅速,在教育领域的应用也备受关注,具有广阔的发展前景。国内的AR多应用于儿童教育(出版物)等,随着移动手机性能的提升和AR技术(特别是图片识别技术)的发展,未来AR一定会在教育领域蓬勃发展,并且还会在社交、旅游、军事、医疗、游戏等诸多领域实现成功应用。 二、设计与实现模块 AR制作流程主要有:模型导入Unity—基于高通网站制作识别图——导入SDK,在Unity3D中完成后期制作(动画,模型渲染,脚本驱动,特效,声音等)——打包发布到安卓(Android)平台,下面具体进行介绍。 开发工具的准备:1、基于Unity 3D,所以先安装Unity3D,案例所用的版本是Unity3D5.6.1f(64位)的,安装SDK和JDK,保证后续可以发布到Android平台进行测试与应用。2、登录高通Vuforia网站注册账号。 三、识别图模块 制作识别图,首先登录高通Vuforia网站,点击Develop按钮,单击License Manager下的Add License Key,在Project Type选择Development。在Project Details下添加App name:AR Demo,点击Next,出现刚刚填写的信息,确认无误后,勾选下面的许可确定。点击Confirm,License Manager下面会有AR Demo,点击它出现License Key,后期在Unity里面会用到,所以将它复制下来。 再点击Target Manager,点击Add Database,在弹出的Create Database中填写Name:AR _Demo,Type选择默认的Device即可,点击Create。在Database出现刚刚创建的AR_Demo,后面有它的信息(Name,Type,Targets,Date Modified),Targets为0,要添加图片,点击它,点击Add Target,在弹出的Add Target下,我们选择Type为Single Image,点击File后面的Browse,选择准备好的图片,设置宽度:400,最后点击Add,这是出现Uploading Target,只需要等待几秒钟,就会看到Target制作完成,这时可以看到选择的图片复杂的Rating (等级),它的值越高代表可识别的点越多,识别也更加容易和准确。制作好后,勾选我们制作的Target,点击Download Database,在弹出的Download Database窗口中,选择开发平台(Select a development platform)为Unity Editor,然后点击Download进行下载。下载好后,识别图就制作完成,这时还需要下载Vuforia SDK。点击上面的Downloads按钮,点击Download for Unity,在弹出的Software License下点击I Agree。 四、Unity 3D实现AR模块 打开Unity,新建工程,导入两个*.unitypackage:AR _Demo和vuforia-unity-6-2-10,我们可以直接点击两个带有Unity图标的文件进行导入,也可在Unity菜单栏中选择Asset下的Import Package进行导入。删除unity自带的主摄像机Main Camera,在资源Assets目录下找到Vuforia—Prefabs—ARCamera,拖到项目场景中,再将Image Target也拖放到场景中,将右侧检视面板中Image target Behaviour下的Type选择AR_Demo),将模型放置在识别图上,调整模型大小和位置,让它处于摄像机中央。设置ARCamera:点击ARCamera右侧的Inspector下的Open Vuforia configuration,将刚刚复制的的License Key粘贴到App License Key中,并且勾选上Datasets下的Load AR_Demo Database 和Activate。 五、发布到Android平台模块 点击菜单栏File—Build and settings,选择发布平台Android,点击player settings,修改Package Name后参数Company,点击Add Open Scenes,然后Build,Unity生成apk可执行文件。最后,通过将生成的apk文件传到Android手机上并进行安装运行,实现预期效果。 六、结论与展望 本文的AR制作基于在Unity3D中完成相关测试,最后打包发布成APP安装到Android手机上,运行APP通过手机摄像机即可实现增强现实的效果,完美展示模型与现实的叠加。本文为从事AR相关开发的工作人员提供指导,也为在教育领域苦苦寻找更加高效的教学模式的教

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()。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和我们手机开发的关系非常密切,其地位也相当重要,所以,后文我将单独对它进行一个深入的研究与分析。到目前为止,大家只

高通android平台开发

问题描述: 对于有过开发高通android系统的人来说,获取代码构建开发环境并不是难事,但对于刚刚接触这一块内容的人,如果没有详细的说明很容易走弯路,本文档就是根据本人的实践总结的一些经验教训。 1.代码获取 高通的android代码分为两部分,一部分是开源的,可以从网站https://https://www.doczj.com/doc/ce13813321.html,/xwiki/bin/QAEP/下载,需要知道要下载的代码的分支及build id。另一部分是非开源的,需要从高通的另一个网站https://https://www.doczj.com/doc/ce13813321.html,/login/上下载,这个下载是有权限限制的,晓光的帐号可以下载代码。后面这部分代码需要放到第一部分代码的vendor指定目录下,可能是vendor/qcom-proprietary或vendor/qcom/proprietary,根据版本的不同有所区别。 高通平台相关的东西基本都在vendor/qcom/proprietary下或device/qcom下 2.编译环境构建(ubuntu 10.04 64位) Android2.3.x后的版本需要在64位下进行编译 更新ubuntu源,要加上deb https://www.doczj.com/doc/ce13813321.html,/ lucid partner 这个 源用来安装java。 apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev x11proto-core-dev libx11-dev libxml-simple-perl sun-java6-jdk gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs lib32z-dev lib32readline5-dev 研发主机不能更新java,需要让IT安装sun-java6-jdk。 在命令行执行sudo dpkg-reconfigure dash 选择no,否则编译时会报一下脚本语法错误 编译的过程中https://https://www.doczj.com/doc/ce13813321.html,/xwiki/bin/QAEP/和版本的 release notes中都有介绍,首先source build/envsetup.sh,然后choosecombo选择需要的选项,最后make或make –j4。-j4用来指定参与编译的cpu个数,指定了编译会快些。编译单个模块的时候只需要在make后面跟 上模块的名字 为了简化可以使用以下脚本 export TARGET_SIMULATOR=fasle export TARGET_BUILD_TYPE=release export TARGET_PRODUCT=msm7627a export TARGET_BUILD_VARIANT=eng set_stuff_for_environment make $1 编译的中间结果在out/target/product/平台/obj目录下,有时候为了完全

手机开不起机的原因有哪些

试试接上座充看看,如果还是没有反应,那就说明主板坏了,要去修.大概60块左右吧. 手机不开机的原因很多:一、开机线不正常引起的不开机 正常情况下,按开机键时,开机键的触发端电压应有明显变化,若无变化,一般是开机键接触不良或者是开机线断线、元件虚焊、损坏。维修时,用外接电源供电,观察电流表的变化,如果电流表无反应,一般是开机线断线或开机键不良。 二、电池供电电路不良引起的不开机 对于大部分手机,手机加上电池或外接电源后,供电电压直接加到电源工C上,如果供电电压未加到电源IC上,手机就不可能开机。 对于摩托罗拉系列的手机(摩托罗拉T2688除外),供电有所不同,电池供电和外接电源供电要经过电子开关转换再加到电源IC上。也就是说,手机的供电有两条路径,一路是电池供电;另一路是外部接口供电(带机充电座供电时)。当两路电源同时供电时,外部接口供电优先。而这两路电源的切换是由电子开关管来控制,主要达到对整机电流起到保护作用,防止因短路或者漏电对手机内部的集成电路造成损坏。但是,如果电子开关损坏,中源模块就有可能得不到电池的供电电压引起手机不开机。对于这种由电子开关供电的手机,由于既可以用外接电源接口供电,也可以通过电池触片用外电源加以供电。维修时可通过不同的供电方式进行供电,以便区分故障范围和确定电子开关是否正常。 一般来说,如果供电电路不良,按开机键电流表会无反应,这和开机线不良十分相似。 三、电源IC不正常引起的不开机 手机要正常工作,电源电路要输出正常的电压供给负载电路。在电源电路中,电源IC是其核心电路,不同品种及型号的手机,供电方式亦有所不同,有的电源电路的供电由几块稳压管供给,如爱立信早期系列(T18之前)手机、部分三星系列手机等。有的却有一块电源模块直接供给,如摩托罗拉系列手机、诺基亚系列手机等。但不管怎样,如果电源IC不能正常工作,就有可能造成手机不开机。 对于电源IC,重点是检查其输出的逻辑供电电压、13MHz时钟供电电压,在按开机键的过程中应能测到(不一定维持住),若测不到,在开机键、电池供电正常的情况下,说明电源IC虚焊、损坏。目前,越来越多的电源IC采用了BGA封装,给测量和维修带来了很大的负担,测量时可对照电路原理图在电源IC的外围电路的测试点上进行测试。若判断电源IC虚焊或损坏,需重新植锡、代换,这需要较高的操作技巧,需在实践中加以磨练。 四、系统对钟和复位不正常引起的不开机 系统时钟是CPU正常工作的条件之一,手机的系统时钟一般采用13MHz,13MHz时钟不正常,逻辑电路不工作,手机不可能开机。 13MHz时钟信号应能达到一定的幅度并稳定。用示波器测13MHz时钟输出端上的波形,如果无波形则检测13MHz时钟振荡电路的电源电压(对于13MHzVCO,供电电压加到13MHzVCO的一个脚亡,对于13MHz晶振组成的振荡电路,这个供电电压一般供给中频IC),若有正常电压则为13MHz时钟晶体、中频IC或13MHzVCO坏。 注意,有的示波器在晶体上测可能会使晶体停振,此时,可在探头上串接一个几十皮法以下的电容。有条件的话,最好使用代换法进行维修,以节约时间,提高效率。 13MHz时钟电路起振后,应确保13MHz时钟信号能通过电阻、电容及放大电路输人到CPU引脚上,测试CPU时钟输入脚,如没有,应检查线路中电阻、电容、放大电路是否虚焊或无供电及损坏。 另外,有些手机的时钟晶体或时钟VCO是26MHz(如摩托罗拉V998、诺基3310手机)或19.5MHz(如三星A188手机),产生的振荡频率要经过中频IC分频为13MHz后才供给CPU。 复位信号也是CPU工作工作条件之一,符号是RESET,简写RST,诺基亚乎机中用PURX表示。复位一般直接由电源IC通往CPU,或使用一专用复位小集成电路。复位在开机瞬间存在,开机后测量时己为高电平。如果需要测量正确的复位时间波形,应使用双踪示波器,一路测CPU电源,一路测复位。维修中发现,因复位电路不正常引起的手机不开机并不多见。 五、逻辑电路不正常引起的不开机 逻辑电路重点检测CPU对各存储器的片选信号CE和许可信号OE,这些信号很重要,但关键是必须会寻找这些信号,由于越来越多的手机逻辑电路采用了BGA封装的集成电路,给查找这些信号带来了很大的困难。有条件的话最好对照图纸来查找这些信号及其测量点。片选信号是一些上下跳变的脉冲信号,如果各存储器CE都没有,说明CPU没有工作,补焊、重焊、代换CPU或再仔细检查CPU 作的条件是否具备。如果某个存储器的片选信号没有,多为该存储器损坏。如果CE信号都有,说明CPU-F.作正常,故障可能是软件故障或总线故障以及某个存储器损坏。 手机在使用中经常会引起机板变形,如按按键、摔、碰等外力原因会引起某些芯片脱焊,一般补焊或重焊这些芯片会解决大部分问题。当重焊或代换正常的芯片还不能开机,并且使用免拆机维修仪读写也不能通过时,应逐个测量外围电路和代换这些芯片。 六、软件不正常引起的不开机 手机在开机过程中,若软件通不过就会不开机,软件出错主要是存储器资料不正常,当线路没有明显断线时,可以先代换正常的码片、版本或重写软件,有的芯片内电路会损坏,重写时则不能通过。重写软件时应将原来资料保存,以备应急修复。 七、其它原因引起的不开机

手机开机接入网络的过程

手机开机接入网络的过程 1. 首先搜索124个信道,即所有的BCH通道, 决定收到的广播信道BCH强度, (BCH的承载的信息是距Mobile最近的BTS(Base Transceiver Station); 呼叫信息); 2. 跟网络同步时间和频率, 由FCH/SCH调整频率和时间 3. 解码BCH的子通道BCCH(广播控制信道). 4. 网络检查SIM 卡的合法身份.是否是网络允许的SIM 卡。 5. 手机的位置更新. 6. 网络鉴权 手机主叫(MOC)过程:l 1. 手机给基站发送通道需求,即手机发送一个短的随即接入突发脉冲.(RACH Burst) 2. 由BCH 指定传输信道. SDCCH 3. 手机和基站在独立专用信道(SDCCH)上通信. 4. 权限认证 5. 指定手机在一个业务信道(TCH)上通信. 6. 在TCH上进行语音通信. 手机被叫l 1. BTS在PCH(PAGING CHANNEL)呼叫通道上使用SIM中的IMSI(International Mobile Subscriber Identification Number)号码来呼叫用户。 2. 由手机发送RACH(随机接入信道:Random Access Channel) 3. 通道指定在BCH. 4. 手机和基站在SDCCH 上通信(SDCCH的全称是独立专用控制信道(Stand-Alone Dedicated Control Channel)) 5. 手机用户被鉴权 6. 手机被指定TCH通道。 7. 在TCH通道上进行语音和数据通信。 紧急呼叫:l 1. GSM规格定义了112 为紧急呼叫号码 2. 112在手机有无SIM卡的情况下均可呼叫。 3. 在RACH 上, 手机112 建立紧急呼叫。 Authentication 鉴权:l 1. 目的:验证用户身份(IMSI /SIM); 提供手机新的加密键。 2. 鉴权是在什么情况下:每一次注册、每次呼叫或被叫企图、执行一些增值服务、漫游时的位置更新。 切换handover: 切换是手机通信从一个小区/信道到另外一个小区/信道。l 1. 上行和下行的接收质量报告 2. 上行和下行的接收信号强度 3. 距离,迁时 4. 干扰层。 5. 功率预算。 6. 切换包括:同一小区内部信道/时隙之间的切换。小区于小区之间。 加密ciphering: 语音和数据的保密、信号信息的保密;l 手机位置更新location update:l 1. MSC应知道呼叫手机的位置。 2. 手机连续的改变位置,手机在改变位置时通知MSC关于新位置。由MSC处理位置更新。

Android平台介绍及使用指导

Android平台介绍及使用指导 二○一○年二月 版本 1.0

目录 Android平台介绍 ................................................................................... - 4 -基本名词...................................................................................................................... - 5 - 操作方法介绍 .......................................................................................... - 6 - 手机按键介绍.............................................................................................................. - 6 - 快捷键介绍.................................................................................................................. - 6 - 信息功能介绍.............................................................................................................. - 7 - 联系人功能介绍........................................................................................................ - 11 - 通话记录功能介绍.................................................................................................... - 14 - 文本粘贴/复制功能介绍.......................................................................................... - 14 - Push Email(Moxier)功能介绍............................................................................ - 15 - 电子邮件功能介绍.................................................................................................... - 16 - 桌面功能介绍............................................................................................................ - 19 - 蓝牙功能介绍............................................................................................................ - 23 - Wifi功能介绍........................................................................................................... - 23 - 飞行模式功能介绍.................................................................................................... - 23 - CDMA数据链接介绍................................................................................................... - 24 - 黑屏解锁功能............................................................................................................ - 25 - 回复出厂设置............................................................................................................ - 26 - 应用程序设置............................................................................................................ - 26 - GPS设置..................................................................................................................... - 27 - 手机中英文语言切换................................................................................................ - 28 - 更换手机输入法........................................................................................................ - 29 - 数据线链接Android手机........................................................................................ - 29 - 手机测试模式进入方法............................................................................................ - 30 - 横屏显示介绍............................................................................................................ - 30 - 浏览器功能介绍........................................................................................................ - 31 - RSS功能介绍............................................................................................................ - 32 - Q/A- 34 -

手机开机原理

手机开机原理 说起不开机大家都很熟悉,不开机可以分为以下几种情况:1.加电即有电流反应,但不开机;2.按开机键无电流反应;3.按开机键有点电流不开机;4.按开机键大电流。说起这些故障产生的原因,我们先要了解一下手机的开机原理。 众所周知,手机可分为射频、逻辑、I/O接口三大部分,手机的开机主要是靠逻辑部分,逻辑部分其实就是单片机系统,由微控制单元(MCU)、数字处理单元(DSP)、存储器单元(ROM和RAM)、I/O接口等部分组成。MCU单元主要是发布指令,让各级电路工作,DSP是数字处理单元,即软件运行的地方,存储器主要是存放各电路的运行程序和一些应用数据。 说到这里,我们要先了解一下手机的开机方式。手机开机有两种触发方式:低电平触发开机和高电平触发开机。所谓低电平触发就是开机键一端接地,另一端接手机的开机触发端,如(夏新A8、诺基亚8310、摩托罗拉T720i等)。高电平开机就是开机键一端接手机的开机触发端艰苦,另一端接一个高电平,如(三星T108、摩托罗拉T2688、飞利浦9@9等)。现行的手机中,以低电平开机方式居多,下面我们就讨论一下低电平开机的原理。 我们以集成供电为例:给手机加上电源以后,电源块得到电池电压,通过电源块内部的开关电路在开机触发端会形成一个高电平,当按下开机键足够长时间,开机触发端的高电平会因为接地而变低,此信号传到电源块内部,电源块获悉此电平变低时,会启动内部电压调节器工作,相应的输出几路稳定的电压供各级电路,作为逻辑核心部分的CPU会得到两路供电:1.CPU专供VCORE 2.逻辑供电VBB。同时射频电路会得到中频参考电压VREF,时钟电路会得到VCTXO。 我们知道手机开机有三个必备条件:供电、时钟、复位。现在供电已满足,接着会产生时钟信号,一方面作为射频参考时钟,另一方面送往逻辑作为主时钟信号。微处理器得到时钟信号以后,需要将以前的记忆清除,于是电源块就会送来复位信号让其初始化,完成以后就会输出控制指令到存储器,让存储器处于允许状态,然后通过地址线查找开机程序具体在什么地方,找到以后通过数据线传送到CPU内部的DSP电路。运行成功以后,CPU输出维持信号到电源块,得到维持信号以后,电源会继续保持输出的各路电压,完成开机。 根据原理知道,手机开机过程是有先后顺序的,每一个电路工作都有不同的电流变化,所以当手机不开机时我们就可以根据电流来判断手机故障的范围

手机开机注册流程

手机开机流程及其简单协议介绍 手机正常开机后,要进行网络的注册。网络注册而言,主要是三个部分: a:PLMN (Public Land Mobile network)selection; b:Cell selection; c:Location selection。执行完这三个流程后,手机就附着在移动网络中了,可以进行相关的移动业务。 a. PLMN selection,主要是要选择一个合适的PLMN网络。其过程是AS(Access stratum)部分协议栈扫描周边的网络环境,测量小区的信号强度。将可用的PLMN标识上报给NAS(Non Access stratum),NAC协议层手动或者自动选择算法(存在优先级)选择一个PLMN网络。 交换注册 b. Cell selection 的选择,主要是为了选择一个合适的Cell能让手机在这个小区中进行驻扎。小区可以通过广播系统信息(system information)和广播信息,在系统信息中可以指出手机在该小区中是否首先(limited Cell)或者保留小区(reserved Cell)。在正常情况下,手机会选择一个可用的小区,这个部分也是有AS和NAS共同完成。 分配信道交换地理位置 c.手机完成PLMN和Cell的选择后,一般会发起位置注册流程,将手机的位置告知GSM网络,目前存在的注册流程包括LAU(normal LAU/IMSI attach),GPRS attach,以及EPS attach,从广义的角度来讲,RAU/TAU流程也属于注册流程。在该注册流程过程中,手机移动网可能拒绝手机注册,可能的情况是当前的位置不可用,当前的PLMN不可用,手机非法、IMSI非法等。如果注册失败,手机会根据原因值重新小区重选PLMN重选等。该步骤一般有NAS完成。 UMTS(Universal Mobile Telecommunications System【全球移动通信系统】)协议栈包含AS(Access stratum【接入层】)和NAS(Non Access stratum【非接入层】)。

基于Android平台的浏览器开发与实现

中国地质大学 毕业设计(论文)开题报告 题目:基于Android平台的浏览器开发与实现 学院:机电学院 专业:通信工程 班级:075083班 学号:858 姓名:许磊 指导教师:张晓峰 日期:2012 年 2 月29 日

一、选题的依据及意义: 随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务。 浏览器是网民进入互联网的第一窗口,让用户能够快速的访问自己所需要的信息,如小说、新闻、音乐、视频、体育赛事、天气情况、股市行情等。如今,手机浏览器不仅仅是一种网络应用程序,也逐渐成为一种网络应用平台。各种网络应用基本都可以在浏览器上实现,所以被用户广泛接受成为各大浏览器厂商的最主要目标。 研究本课题的意义是让用户有一个快速的上网浏览入口,给用户一个界面友好,功能强大,易于操作,便于管理的浏览器。同时也让自己更加熟悉Android 应用程序的开发,了解Android应用程序开发的流程,各个模块之间的联系。 二、国内外研究现状及发展趋势: Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序—移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的30多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。 经过多年的发展,第三代数字通信( 3G)技术获得了广泛的接受,它为移动终端用户带来了更快的数据传输速率。随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Android用户也逐渐增加,根据发展趋势,Android将成为第一大智能手机平台。 浏览器作为用户访问网络的窗口,各大厂商也相继推出了自己的浏览器,如

GSM手机开关机流程

一位GSM用户在北京关机,一个小时后他到达天津后手机开机,五分钟后被一个广州的用户固定电话呼叫,请大致描述这位移动用户的MS,在这一个小时五分钟内与网络所进行的信息交换,如果能附加描述固定电话呼叫的过程则可以加分,,, 请尽量详细描述,并说明空中接口信道 北京:关机imsi detach indication (sdcch信道) 天津:开机MS进行IMSI附着过程 location update request(sdcch信道,imsi附着) location update accept(sdcch信道) 广州电话呼叫: 1)PSTN经广州GMSC寻找到北京HLR(用户所在HLR)查询到现在MSC(TIANJIAN),提供动态漫游号码,PSTN收到信息后向MSC(tianjin)发送IAI,当MSC(天津)收到此信息后开始寻呼MS。 2)Paging request (网络向MS, PCH信道) Channel request (rach) Immidate assignment(agch) Paging resp Sabm(sdcch) L2 Ua(sdcch) Auth request(sdcch) Auth response(sdcch) Ciphpermod cmd(sdcch) Ciphermod com(sdcch) Setup(sdcch) Call Proceeding(sdcch) Assign cmd(sdcch) Assign compete(sdcch) Alerting(sdcch) Connect(sdcch to tch)

Disconnect(sdcch) Release(sdcch) Release compete(sdcch) A 在北京关机: 1.MS上RACH TO 网络,(RACH,AGCH) 2.网络分配SDCCH给MS,MS发出关机请求, 3.MSC要求MS做一次位置更新,并在HLR里标记IMSI为POWER OFF,清除VLR里TMSI 数据. MS关机完成 B 在天津开机 1.MS尝试与关机前保留的六个CELL进行同步,(保留的是北京关机前的小区) 2.收空中FCH(全零码),通过SCH同步. 3.进行网络鉴权,天津的MSC会从北京HLR获得用户资料(KI值等) 4.鉴权完成后北京HLR会标记这个用户IMSI结合(开机),在天津VLR获得分配TMSI. 5.MS监听一次PCH,转到IDLE状态. Attach 流程 当MS 开机(打开电源)后,它首先要在空中接口上搜索以找到正确的频率,并依靠搜索到的正确频率校正和同步频率,并将此频率锁定。该频率载有广播信息和可能的寻呼信息。 若MS是第一次开机,在其数据存储器(SIM卡)中找不到原来的位置区识别码(LAI),它就立即要求接入网路,向MSC发送“位置更新请求”消息,通知GSM系统这是一个此位置区内的新客户,MSC 根据该客户发送的IMSI,向该客户的归属位置寄存器(HLR)发送“位置更新请求”,HLR记录发请求的MSC 号码,并向MSC回送“位置更新接受”消息,至此MSC认为此MS 已被激活,在拜访位置寄存器(VLR)中对该客户对应的IMSI上作“附着”标记,再向MS 发送“位置更新证实”消息,MS 的SIM 卡中也同时记录此位置区识别码。 若MS不是第一次开机,而是关机后又开机的,MS接收到的LAI(LAI是在空中接口上连续发送的广播信息的一部分)与它SIM 卡中原来存储的LAI 不一致,那么它也是立即向MSC发送“位置更新请求”,MSC要判断原有的LAI是否是自己服务区的位置,如判断为肯定,MSC只需对该客户的SIM卡原来的L AI 码改写成新的LAI码,并在该客户对应的IMSI作“附着”标记即可;判断为否定,MSC需根据该客户的IMSI,向该客户的HLR发送“位置更新请求”,HLR 在该客户数据库内记录发请求的MSC 号码,再回送“位置更新接受”,MSC再对该客户的IMSI作“附着”标记,并向MS回送“位置更新证实”信息,MS 将

相关主题
文本预览
相关文档 最新文档