目录
Modem 通话名词
APN基础
一. 基本含义
二. APN的构成
三. APN类型
四. 专线APN
五. 业务流程
六. 国内常见APN
「 Qualcomm 」 How to enabe Video Turbo Mode 如何启用视频 Turbo 模式
高通平台启动过程
一、前言
1.CPU位数
2.ELF Loading
3.Watchdog Reset Debug
二、高通平台CPU类型介绍
1.APSS (Applications Processor Subsystem)
2.RPM (Resource Power Manager)
3.MPSS (Modem peripheral subsystem)OCIMEM
4.WCNSS (Wireless connectivity subsystem )
5.Low-power audio subsystem (LPASS)
三、 高通启动过程介绍
1.APPS PBL ( Application Process Primary Boot Loader )
2.SBL1 ( Secondary boot loader Stage 1 )
3.QTEE Or TZ(trustzone)
4.DEVCFG
5.Debug Policy
6.RPM_FW
7.APPSBL or boot manager and OS loader
8.HLOS(High-level Operating System)
9.Modem PBL
10.Modem boot authenticator MBA
11.Modem、Wifi、LPASS 的启动
系统启动框图
QTEE : SBL ==> TZ启动工作流程
Modem 通话名词
normal Volte call : 4G 语音通话
normal CS call : 通话时,回流到 2G、3G 通话
Enable: Emergency call : 紧急通话
PS : 数据业务
APN基础APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。
对于手机用户来说,可以访问的外部网络类型有很多,例如:Internet、WAP网站、集团企业内部网络、行业内部专用网络。
而不同的接入点所能访问的范围以及接入的方式是不同的,网络侧如何知道手机激活以后要访问哪个网络从而分配哪个网段的IP呢,
这就要靠APN来区分了,即APN决定了用户的手机通过哪种接入方式来访问什么样的网络
APN决定了手机通过哪种接入方式来访问网络,用来标识GPRS的业务种类。
APN分为两大类: WAP业务、 WAP以外的服务(比如:连接因特网)
从运营商角度看,APN就是一个逻辑名字,APN一般都部署在GGSN设备上或者逻辑连接到GGSN上,
用户使用GPRS上网时,都通过GGSN代理出去到外部网络,
因此,APN设置、过滤、统计等,就成为一个对GPRS计费、GPRS资费有重要参考价值的参数之一(因为APN可以区分一个业务或者外部网络)。
APN的完整说明在3GPP规范TS23.003 Clause 9中进行了详细定义。
APN在GPRS骨干网中用来标识要使用的外部PDN(Packet data network,分组数据网,即常说的Internet),
在GPRS网络中代表外部数据网络的总称。
APN由以下两部分组成:
①. APN网络标识:
是用户通过GGSN/PGW(Gateway GPRS Support Node,GPRS网关支持节点/PDN Gateway ,分组数据网网关)可连接到外部网络的标识,
该标识由网络运营者分配给ISP(Internet Service Provider,因特网业务提供者)或公司,与其固定Internet域名一致,是APN的必选组成部分。
例如 , 定义移动用户通过该接入某公司的企业网,则APN的网络标识可以规划为“www.ABC123.com”。
②. APN运营者标识
用于标识GGSN/PGW所归属的网络,是APN的可选组成部分。其形式为“MNCxxxx.MCCyyyy.gprs”(3G网络中),
或者“MNCxxxx.MCCyyyy.3gppnetwork.org(4G网络中)。
APN实际上就是对一个外部PDN的标识,这些PDN包括企业内部网、Internet、WAP网站、行业内部网等专用网络。
网络侧如何知道手机到底做了激活以后要访问哪个网络呢(因为每个网络分配的IP可能都是不一样的,有的是私网,有的是公网IP),
这就要靠APN来区分了,当然各个运营商可能名字不一样。
现在涉及到的APN有以下两种:
① 通过手机浏览器上网时使用。 (现在国内销售的手机都已经将APN配置预先做好了。)
② 通过客户端软件来登陆服务器时使用。
专线APN根据企业对网络安全的特殊要求,采用了多种安全措施,主要包括:
①通过一条2M 专线接入运营商GPRS网络,
双方互联路由器之间采用私有IP地址进行广域连接,在GGSN与移动公司互联路由器之间采用GRE隧道。
②为客户分配专用的APN,普通用户不得申请该APN。用于GPRS专网的SIM卡仅开通该专用APN,限制使用其他APN。
③客户可自建一套RADIUS服务器和DHCP服务器,GGSN向RADIUS服务器提供用户主叫号码,
采用主叫号码和用户账号相结合的认证方式;用户通过认证后由DHCP服务器分配企业内部的静态IP地址。
④端到端加密:移动终端和服务器平台之间采用端到端加密,避免信息在整个传输过程中可能的泄漏。
⑤双方采用防火墙进行隔离,并在防火墙上进行IP地址和端口过滤。
五. 业务流程① APN通常作为用户签约数据存储在HSS(Home Subscriber Server,归属用户服务器)/HLR(以下简称HLR)中,
② 用户手机在发起分组业务时也可向网络侧SGSN(Serving GPRS Support Node,服务GPRS支持节点)/ MME(Mobility Management Entity,移动管理实体)提供APN。
③ SGSN/MME(以下简称SGSN)根据用户所提供的APN,通过DNS(Domain Name Server,域名服务器)进行域名解析,从而获取到GGSN/PGW(以下简称GGSN)的IP地址,将用户接入到APN对应的PDN中。
④ 此外,HLR中也可存储一个通配符,这样用户或SGSN就可以选择接入一个没有在HLR中存储的APN。
⑤ SGSN存储APN与GGSN地址对应表,通过不同的APN选择不同的GGSN。
**APN的获取方式:** 用户提供 、用户定制、SGSN指定
用户可以激活多个PDP上下文,每个PDP上下文与一个APN相联系。
用户选择不同的APN的目的就是通过不同的GGSN选择外部网络。
APN需要通过DNS进行域名解析才能获取GGSN或外部网络节点的真实的IP地址。
GPRS专网系统终端上网登录服务器平台的流程为:
1)用户发出GPRS登录请求,请求中包括由运营商为GPRS专网系统专门分配的专网APN;
2)根据请求中的APN,SGSN向DNS服务器发出查询请求,找到与企业服务器平台连接的GGSN,并将用户请求通过GTP隧道封装送给GGSN;
3)GGSN将用户认证信息(包括手机号码、用户账号、密码等)通过专线送至Radius进行认证;
4)Radius认证服务器看到手机号等认证信息,确认是合法用户发来的请求,向DHCP服务器请求分配用户地址;
5)Radius认证通过后,由Radius向GGSN发送携带用户地址的确认信息;
6)用户得到了IP地址,就可以携带数据包,对GPRS专网系统信息查询和业务处理平台进行访问。
在国内,APN大致上有以下几种类型:
「 Qualcomm 」 How to enabe Video Turbo Mode 如何启用视频 Turbo 模式Turbo Mode means OC Mode (超频模式)
By default it it disabled.
code:
/vendor/qcom/proprietary/wfd/utils/data/wfdconfig.xml 和 wfdconfigsink.xml
0
// you can modify it to 1 to enable TurboMode(OC Mode)
adb push command:
adb push wfdconfig.xml /system/etc/wfdconfig.xml
adb push wfdconfigsink.xml /system/etc/wfdconfigsink.xml
adb reboot
Date: Monday - June - 17 - 2019 - 17:49
By: CielleeX
高通CPU 启动流程介绍
Date: 2019/10/13
一、前言 1.CPU位数在开机过程中,会从PBL (AArch32) 切换到 AArch 64 位。这个64位和32位的意思是,CPU的指令集的长度,现在CPU一般都是64位架构的。
同一套代码也可以根据客户的需求,配置为32 位或者 64位,一般来说64位比32位好,但内存占用肯定会更小。比如,如果做低端机或者非手机项目,客户要省成本,非要用小的flash ,那这样,就尽量用32位好些,当然性能会相对差。
这也说明了,所以马儿吃草或马儿跑 这两者是要权衡的。
注意: x86并不意味着就是CPU就是32位的。
x86 是指 x86指令集的意思,它包括了(IA32 和 IA64),
而所谓的32位和64位指的是CPU指令集的长度。
IA(Intel Architecture)英特尔体系结构、
IA-32架构下有32位CPU,也有64位架构 (我们常用的CPU一般都是这种的)。
IA-64 架构下只有 Intel64 的CPU(一般只有服务器使用),这种架构是Intel放弃IA32开发出来的,它不好往下兼容,也就是没兼32位。
X86架构是对这个系列的简称:
x86、x86-32、x86-64(AMD 64位CPU采用的技术)、x64(EM64T Intel在64位处理器采用的技术)、 老的32位包括(i0386、i0486、I0586、i0686)等。
还有一些其他的架构就是:
大学玩的 ARM单片机,它是ARM构构(也有对应的ARM 32位 和ARM 64位的区别)
Solaris 平台的sparc 架构, 及 IBM apple 的 PowerPC架构,
EFL指的是镜像,在高通中加载模块镜像,都是靠前一个模块来加载或启动后一个模块的镜象来实现切换的,通过ELF 头信息,就能知道整个img镜像的布局信息,就知道镜像应该如何加载到内存什么位置。 ---------- 这个很重要,加载不好会导致没法开机
3.Watchdog Reset Debug主要是用于系统稳定性问题分析,比如系统 crash 死机 ramdump 的功能实现,就靠它的。
二、高通平台CPU类型介绍在我们平常所说的高通平台(比如 MSM8917,MSM8937,SDM450,SDM660,SDM855 等),或者苹果A12, 华为麒麟980等等,这些我们虽然叫CPU,但并不是只有一个CPU,实际上在它们内部是由很多CPU 共同协同工作的。
我们今天就是要介绍就是在一个平台中,这么多CPU 是如何协同工作的。
CPU类型如下:
1.APSS (Applications Processor Subsystem)它就是我们平常说的主CPU处理器,比如 ARM Cortex-A53 或者 Qualcomm Kryo CPU(Kryo 目前只用在 SDM632 中).
它的启动地址是 0x00100000 (1 M)
主要负责电源管理相关的事务
芯片为ARM Cortex-M3,启动地址是0x002000000 (2 M) 物理地址,
(逻辑地址是指相对它内部的地址,逻辑地址还是0x00000000)
是 onchip memory,运行时作为RAM 使用,SBL运行时内存不够用时,会借用
芯片为Modem Qualcomm Hexagon DSP,启动地址可自定义配置,
在booloader 过程中加载的。
主要是对通迅相关业务的处理,比如打电话,发短信等 。
芯片为ARM9, 启动地址为 0x0 或者 0xFFFF0000 ,或者 自定义配置
主要负责wifi,bt 等无线相关的事宜
LPASS 也就是我们做高通项目时常说的 ADSP
芯片为 LPASS Hexagon, 启动地址可 自定义配置
主要是对低功耗相关的处理,最初是audio 处理算法等,后面慢慢地新增了很多功能。
比如:后面我们要学习的传感器(比如光感、距感、重力传感器等等) ,在老平台,或者 MTK 平台,这些代码是在 Kernel 目录下的,现在高通的sensor 代码是放在 ADSP 目录下的。
主要的好处在于,省功耗,因为,如果放在Kenrel 目录下,好果计步器等等还在运行的话,是没法放CPU和 Flash休眠的。
但如果放在 ADSP 中,这样,在adsp 处理Audio 数据的间隙稍带处理下Sensor 数据,
当Sensor 工作时,就可以让 CPU 和 Flash 都进入休眠,此时 adsp 和 cache 是工作的,对比起来,功耗大大的减少了。
在高通平台中,是有很多镜像,启动的顺序,保存的位置,及各个的功能均是不一样的。
如下:
1.APPS PBL ( Application Process Primary Boot Loader )Cortex-A53( AArch32 ) core 1 / Qualcomm Kryo Silver core 1
启动地址为: APPS ROM( 0x00100000)高通ROM固件(固化代码),不是安卓镜像,高通芯片出产自带刷入的,用户或者开发者开法 *** 件它。
主要作用为:
(1)枚举选择启动方式,识别Emmc
上电时自启动,通过查询对应的BootOption GPIO状态 或者fuse 知道当前硬件的启动方式(比如,是通过 USB 来启动,还是通过Flash Emmc 来启动)。
USB 启动的话,如果拿电脑举例 ,就是我们的 USB 启动盘了。
在高通中,当检测到要从USB 启动,或者 当前flash emmc 中是没有镜像时,当前高通板子就会修改USB 口,枚举出 9008 口用于镜像下载。
(2)Load加载SBL 镜像
从Flash emmc中加载并校验 SBL1 ELF镜像,通过ELF 头信息知道 应该如何将 SBL 镜像拆分加载到不同的内存区域(主要是 L2 TCM 和 RPM Code RAM 两块内存区域)。
加载完SBL镜像后,就把 PC 指针交给 SBL。
Cortex-A53( AArch32 ) core / Qualcomm Kryo Silver core
是从emmc load 出来的image,load后分布在 L2 TCM 、OCIMEM、RPM Code RAM 两块内存区域。
L2 TCM 是系统运行起来后的二级缓存(Cache)
OCIMEM 是 onchip memory,运行时作为RAM 使用,SBL运行时内存不够用时,会借用该地址区。
主要作用:
(1) Memoey subsystem环境初始化,Buses,Clock,DDR(LPDDR3), CDT初始化
(PBL中没有DDR是可以运行的,但sbl 中一定要对DDR 做初始化,因为后续所有的镜像load都是load到 DDR中)
一般来说,几乎所有的DDR 相关问题的修Debug修改都是在SBL1 中做的,
除了DDR的频率的调整是在RPM 中做的。
(2)USB 初始三、 高通启动过程化,主要是实现RAM Dump功能,也就是我们的 900E 端口,其实就是在SBL1中实现坆举的。
(3)还包括USB 充电,开机温升检测,PMIC 等功能初始化
SBL1 执行完毕后,会把 PC 指针交给QTEE
Cortex-A53( AArch64 ) core / Qualcomm Kryo Silver core,运行在 eMMC LPDDR3 中
和安全相关的模块也是运行在A53 的环境中,主要功能就是初始化TrustZone bsp 模块,初始化可信任环境
(1)初始化secure run-time 全相关的环境。
(2)配置 xPU
(3)读取fuse 信息
(4)对各种子系统的 image 镜像做鉴权
扩展:
xPU是APU(Audio),BPU(人工智能相关),CPU,DPU(AI芯片DeepLearning),EPU(情绪合成引擎,其于MCU),FPU(浮点运算),GPU(图形处理),HPU(全息处理器),IPU(图像认知,视觉处理),MPU(微处理器),NPU(神经网络处理器),VPU(视觉处理器)
详细参考:
百度安全验证https://baijiahao.baidu.com/s?id=1577211892337884082&wfr=spider&for=pc
4.DEVCFGCortex-A53( AArch64 ) core / Qualcomm Kryo Silver core,运行在 eMMC LPDDR3 中.
这部分代码是 TZ 4.0对外的接口,可以通过这个模块实现对 TrustZone 的配置。
而TZ4.0的代码大部分是不对外开放的,如果有相关的问题,只能提交case 给到高通,请他们协助分析。
Cortex-A53( AArch32 ) core / Qualcomm Kryo Silver core,运行在 eMMC LPDDR3 中
这部分主要是调试使用的,Secure boot使能后,JTAG就会禁止使用,这个是fuse 决定的。
Debug Policy 就相当于提供了一个方法,这样在Secure boot 使能后,还能通过烧写image 的方式来使能 JTAG 调试功能。
这个模块必须在 TrustZone 启动并运行起来后才会生效的。
所以如果是 secure boot 使能的板子,如果SBL出问题了,由于TrustZone未启动,此时是没法通过JTAG 进行调试的。
Contex-M3 运行在 eMMC RPM Code RAM中
RPM的代码实现,主要是Power、休眠唤醒和时钟相关的管理,
比如当系统申请休眠后,会投票给 RPM,由RPM 来检查是否是所有系统都申请休眠了,最终由 RPM 来对系统进行监管,此时系统所有的核都进入休眠了。
还有RPM 可以设置 DDR 的频率(最高频率,定频等)
还包括,可以配置各路 Power LDO 的电压值 等等
RPM_FW 是由 QTEE 来启动执行的,
RPM 启动起来后,我们的UART log 就可以正常打开调试了。
Cortex-A53( AArch32 ) core / Qualcomm Kryo Silver core,运行在 eMMC LPDDR3 中,注意此处LK是运行32位的,而此时CPU是64位指令集模式,也就是在64位指令集下运行32位指令。
此处也就是我们后面要说的fastboot,lk ,UEFI 相关的实现部分
主要功能如下:
(1)支持屏幕驱动,能够点亮屏幕
(2)加载 和 验证 Kernel 镜像(boot.img),随后将 PC 指针给到 Kerner 当中。
PBL 和 SBL 是只运行在 AArch32 模式下的。
Cortex-A53( AArch64/32 ) core / Qualcomm Kryo Silver core,运行在 eMMC LPDDR3 中,可以根据需求配置系统是 32位 或 64位的。
HLOS就是我们所说的Android 系统、或 Windows Mobile 系统等等
此时,我们Cortex-A53的多核就打开了,之前启动过程中,A53用的几乎只有 core 1 核心,现在 A53的8核,这样系统的吞吐量,性能相关的都打开了。
此时系统Android界面就出来了。
Modem Hexagon 运行在 Modem ROM and Hexagon TCM (data and stack)中。
在这么多子系统中,只有Modem 是有独立 PBL(Primary Boot Loader)的。
其主要的功能如下:
(1)在Modem ROM中建立初始化Heaxagon TCM内存
(2)从LPDDR3中拷贝 MBA 到Heaxagon TCM中, MBA 是Modem 的加密校验模块,负责校验后面的Modem模块是否安全。
Modem Hexagon 运行在 eMMC Hexagon TCM中
(1)校验后面的Modem模块是否安全
(2)配置Modem 的secure 环境
在HLOS 启动完成到一定阶段后,会对它的子系统模块先load image *** 作 ,然后告诉对应的子系统image的地址,接着各子系统就知道从哪里去执行image,随后HLOS发出一个解复位 *** 作,让子系统正式跑起来,
AMSS modem、WCNSS image 和 LPASS image 这三个模块的子系统。
系统启动框图EL0, EL1, EL2, EL3 是在Cortex ARM中Execution Level执行等级区分,EL0 是最低等级,EL3 是最高等级。
我们后面的 Warm Reset 就必须在EL3 最高等级中做,不同的Level 中执行不同的image 或 *** 作。
从上图可以看出
APP PBL/ SBL/ APPSBL 这三个模块是运行在 AArch32 位模式下的
TZ 和 HLOS 是可根据用户需求选择运行在 32 或 64 模式下的。
这样势必涉及到 32 位转64位的过程,这个就是QTEE工作的。
QTEE 是指从 PBL 跳转到 TZ 的中间过程,它有单独的入口代码。
详细过程如下:
(1)PBL 和 SBL 是只运行在 AArch32 模式下的。
(2)通过解析SBL1 的头信息,可以知道接下来要运行的是32位TZ还是64位TZ:
(3)如果系统是32位指令集的话,整个初始化流程为:
SBL 会先将指针交给 QTEE镜像入口,然后由QTEE加载并启运TZ。
APPS PBL ==> SBL ==> QTEE ==>TZ ==> APPSBL ==> HLOS
(4)如果系统是64位指令集的话,在进入TZ 前要做一个WarmReset,流程如下:
SBL 会更新reset address, remaps secure path(TZ PC指针入口) 给 QTEE,然后启动一个WarmReset(CPU Core 1),然后切换CPU到64位模式。
然后CPU Reset 完毕后,PC 指针会指向QTEE 入口,运行QTEE镜像,最终通过QTEE将指针交给 TZ ,正式启运TZ
APPS PBL ==> SBL ==> [ Warm Reset ] ==> QTEE ==> TZ ==> APPSBL ==> HLOS
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)