最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Qualcomm平台android开发总结要点

IT圈 admin 60浏览 0评论

2023年12月6日发(作者:鄞南蓉)

1、 高通平台android开发总结. 7

1.1 搭建高通平台环境开发环境. 7

1.2 搭建高通平台环境开发环境. 7

1.2.1 高通android智能平台概述. 7

1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系. 7

1.2.2 选择合适的源代码以及工具. 8

1.2.2.1 获取经过高通打补丁的android 源代码. 8

1.2.2.2 获取高通针对不同处理器的vendor源代码. 9

1.2.2.3 获取 modem 源代码. 9

1.2.2.3.1 高通 modem 源代码编译前的修正. 13

1.2.3 建立 Android 开发环境. 14

1.2.4 建立 modem 开发环境. 15

1.2.4.1 补充. 16

1.2.4.1.1 获取 licenses 16

1.2.4.1.2 Flex 简单使用指南. 16

1.2.4.1.3 启动 license 服务器. 18

1.2.4.1.4 license 没有办法从服务器获取的几种情况. 18

1.2.4.1.5 破解 rvds 的license 19

1.2.5 在高通开发板上烧录文件系统. 19

1.3 高通平台,android和 modem 编译流程分析. 21

1.3.1 android代码编译流程分析. 21

1.3.1.1 编译工具检测. 22

1.3.1.1.1 22

1.3.1.2 生成过程解析. 22

1.3.1.3 生成过程解析,怎样手动生成 28

1.3.1.4 编译过程存在的问题. 32

1.3.1.4.1 prelinkmap 的时候 base 0xaff00000 out of range 32

1.3.1.4.2 LOCAL_SDK_VERSION 使应用程序不能访问hide的api 32

1.3.1.4.3 armv5te-vfp 导致一些游戏运行不了. 32

1.3.2 分布式编译 android 代码. 33

1.3.3 modem 代码编译流程分析. 33

1.3.3.1 单独编译某个模块(如:qcsbl oemsbl). 34

1.3.3.2 $(TARGETDIR)/exist 规则解析. 36

1.3.3.3 setup规则解析. 36

1.3.3.3.1 corebsp_create_incpaths 36

1.3.3.3.2 create_incpaths 36

1.3.3.3.3 amsssetup 36

1.3.3.3.4 amsslinkaddress 36

1.3.3.3.5 firmware 38

1.3.3.4 deps规则解析. 38

1.3.3.5 corebsp_build规则解析. 38

1.3.3.5.1 corebsp_build_action 38

1.3.3.5.1.1 corebsp_scons 规则. 39

1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39

1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.

40

1.3.3.5.1.1.2.2 lder 过程解析. 41

1.3.3.5.1.1.2.3 lder 过程解析. 41

1.3.3.5.1.1.2.4 myBuilder 过程解析. 42

1.3.3.5.1.1.2.5 生成过程解析. 43

1.3.3.5.1.1.2.6 生成过程解析. 43

1.3.3.5.1.1.2.7 AMSS_ 生成过程解析. 43

1.3.3.5.1.1.2.8 生成过程解析. 43

1.3.3.5.1.1.2.9 生成过程解析. 44

1.3.3.5.1.1.2.10 enandprg_ 生成过程解析. 44

1.3.3.5.1.1.2.11 nandprg_ 生成过程解析. 45

1.3.3.5.1.1.2.12 生成过程解析. 45

3.3.3.5.1.1.1 corebsp_scons_done 46

1.3.3.5.1.2 corebsp 46

1.3.3.5.2 corebsp_create_incpaths 46

1.3.3.5.3 corebsp_setup 46

1.3.3.6 libs 46

1.3.3.7 copybar规则解析. 47

1.3.3.8 exe规则解析. 47

1.3.3.8.1 CORELIBS_生成过程解析. 47

1.3.3.8.2 生成过程解析. 47

1.3.3.9 bldprod规则解析. 48

1.3.3.10 create_mem_feat_html规则解析. 48

1.3.3.10.1 50

1.3.3.11 partition规则解析. 50

1.3.3.11.1 eMCC 启动和 NAND 启动的分区格式是不一样的,如果是 eMCC 启动,多了编译选项:. 50

1.4 高通平台 7630 启动流程分析. 52

1.4.1 启动流程概述. 52

1.4.2 pbl 流程. 52

1.4.3 dbl 流程. 52

1.4.4 osbl 流程. 54

1.4.4.1 osbl 装载 appsbl 过程分析. 56

1.4.5 appsbl 流程(源代码在 android中). 56

1.4.5.1 aboot_init 过程分析(需要侧重关心的部分). 58

1.4.5.1.1 fastboot 模式分析. 61

1.4.5.1.1.1 什么是 fastboot 模式. 61

1.4.5.1.1.2 fastboot 模式与 recovery 模式的区别. 61

1.4.5.1.1.3 怎样进入 fastboot 模式. 62

1.4.5.1.1.4 android 系统手机刷机过程分析(补充知识) 62

1.4.5.1.2 appsbl 引导 android 系统. 63

1.4.5.1.2.1 Android 系统启动过程中存在的问题. 67 1.4.5.1.1.1.1 linker 问题导致系统无法启动. 67

1.4.6 AMSS 流程. 69

1.5 android 系统重启关机流程分析. 82

1.5.1 c语言中调用 reboot 函数. 82

1.5.2 通过 adb 让系统重启. 82

1.5.3 fastboot 模式下系统重启. 83

1.5.4 系统关机. 84

1.5.5 内核中的系统调用 reboot 85

1.6 软件调用流程分析. 89

1.6.1 设置sim卡状态. 89

1.6.2 设置背光. 90

1.6.3 获取电池信息. 90

1.7 python scons 语法学习. 94

1.8 python 语法学习. 94

1.8.1 Python中文全攻略. 94

1.8.2 推荐一款Python编辑器. 94

1.8.3 使用 pyExcelerator 读 Execl 文件. 94

1.8.4 xlrd 解析 xls 文件. 95

1.8.5 xlrd 生成 xls 文件. 95

1.9 Python 语言之 scons 工具流程分析. 95

1.9.1 Program 方法. 100

1.9.2 Library 方法. 100

2、 高通常用工具使用. 101

2.1 QPST 101

2.2 QXDM 101

2.3 QCAT 101

3、 工程模式. 101

4、 Android 系统更新升级总结. 104

4.1 刷机基本知识. 104

4.1.1 各品牌代表手机刷机模式进入方法. 104

4.1.1.1 HTC G1 104

4.1.1.2 三星 Galaxy i7500 104

4.1.1.3 Google Nexus One 105

4.1.2 fastboot 模式. 105

4.1.2.1 fastboot 模式概述. 105

4.1.2.2 PC端fastboot 命令分析. 106

4.1.2.2.1 命令选项 –w –s -p –c 106

4.1.2.3 手机端fastboot 命令分析. 107

4.1.2.3.1 boot 107

4.1.2.3.2 erase 107

4.1.2.3.3 flash 107

4.1.2.3.4 continue 107

4.1.2.3.5 reboot 107

4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107

4.1.2.3.8 download 108

4.1.2.3.9 update 108

4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108

4.1.2.3.9.2 fprintf(stderr, "archive does not contain '%s'n", name); 108

4.1.2.4 fastboot 模式流程分析. 108

4.1.3 recovery 模式. 108

4.1.3.1 recovery 模式概述. 108

4.1.3.2 软件升级包. 109

4.1.3.3 recovery v1跟recovery v2的区别. 109

4.1.3.4 软件升级脚本语法解析. 109

4.1.3.4.1.1 mount 110

4.1.3.4.1.2 getprop 111

4.1.3.4.1.3 file_getprop 111

4.1.3.4.1.4 assert 111

4.1.3.4.1.5 format 111

4.1.3.4.1.6 apply_patch_check 111

4.1.3.4.1.7 apply_patch_space 111

4.1.3.4.1.8 apply_patch 111

4.1.3.4.1.9 package_extract_file 112

4.1.3.4.1.10 ui_print 112

4.1.3.4.1.11 META-INF/com/google/android/update-script 脚本分析. 1124.1.3.4.2 Recovery 模式中 install_package 函数解析. 117

4.1.3.5 Recovery 流程分析. 118

4.1.3.5.1 恢复出厂设置. 118

4.1.3.5.2 系统更新流程. 119

4.1.3.5.3 通过sd卡实现刷机. 121

4.1.3.6 系统升级包案例分析. 122

4.1.4 工程模式(HBoot) 模式. 122

4.1.4.1 HBOOT降级方法. 122

4.2 如何制作升级包 123

4.2.1 手动制作升级包. 123

4.2.2 自动制作升级包. 123

4.3 Android 签名机制. 125

4.4 android 文件系统权限概述. 125

4.4.1 获取手机root权限. 127

4.4.2 adb默认权限分析. 128

4.4.3 adb root命令切换到 root 权限. 129

4.4.4 挂载系统分区为读写(remount) 130

4.4.5 通过修改 获取 Nexus One 权限. 132

4.5 系统应用移植. 132

4.5.1 Android 2.2在线升级的移植. 132

4.5.2 解决donut Gtalk、Market登录不了的问题. 133

4.5.3 apk反编译问题总结. 133

4.5.4 系统重启. 133

5、 高通linux内核驱动开发. 133

5.1 添加串口调试. 133

5.2 Sensor 传感器. 133

5.3 USB 枚举 USB Composition 134

5.4 USB 枚举 USB Composition 136

6、 从 android 源代码制作 sdk 136

6.1 linux sdk 137

6.2 windows sdk 137

7、 程序安装与调试. 138

8、 android 框架流程分析. 138

8.1 屏幕显示相关. 138

8.1.1 屏幕分辨率. 138

8.1.2 屏幕模式. 139

8.2 Android 开机充电. 141

8.3 Android 开机动画. 141

8.3.1 内核开机画面. 141

8.3.2 文件系统开机画面. 141

8.3.2.1 开机显示的 ANDROID 文字. 141

8.3.2.2 ANDROID 发光动画. 142

8.3.2.3 文件分析. 143

8.3.2.4 文件分析. 143

8.3.3 三星I9000 开机动画. 144

8.4 JNI调用流程. 145

8.5 Android 开机铃声. 145

8.6 GPS 导航. 145

8.6.1 GPS导航原理. 145

8.6.2 GPS导航软件. 145

9、 高通modem框架流程分析. 146

9.1.1 添加自定义rpc调用. 146

9.1.1.1 从AP端获取modem的系统分区信息. 146

9.1.2 添加自定义 AT命令. 146

10、 linux 应用. 146

10.1 嵌入式Linux通过帧缓存截图 - Framebuffer Screenshot in Embedded

Linux 146

10.2 Linux下右键烧录文件. 147

10.3 Linux下右键svn 147

1、高通平台android开发总结

1.1 搭建高通平台环境开发环境

在高通开发板上烧录文件系统 建立高通平台开发环境

高通平台,android和 modem 编译流程分析

高通平台 7620 启动流程分析

qcril 流程分析,设置sim卡锁

python scons 语法学习

Python 语言之 scons 工具流程分析:

1.2 搭建高通平台环境开发环境

高通android智能平台概述

选择合适的源代码以及工具

建立 Android 开发环境(部分略)

建立 modem 开发环境

1.2.1 高通android智能平台概述

高通 7230 android 智能手机解决方案的软件包括两个部分

1. 以linux 操作系统为基础的 android 系统

2. 以 L4,REX为基础的 Modem 部分

在高通7系列的架构中,一个IC内部集成有两个ARM处理器,一个ARM9(或者arm11),专门负责处理通信协议,射频以及GPIO等,软件架构采用 AMSS, 另外一个是ARM11,用来处理多媒体,上层应用,以及其他的一些任务,运行的系统是 android 系统,这两个处理器之间通过共享内存的硬件方式来进行通信。

1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系

L4是一组计算机程序,是最初由Jochen Liedtke设计的微内核构架的操作系统内核,现在已经形成一个微内核家族。L4这个微内核系统由于其出色的性能和很小的体积而开始被计算机工业所认 知,被移植到了许多不同的硬件构架上。高通的 L4 提供了操作系统最基本的操作,是买别人的。

早期的操作系统绝大多数是 Monolithic Kernel, 意思是整个操作系统 - 包括Scheduling (调度), File system (文件系统), Networking (网络), Device

driver (设备驱动程序), Memory management (存储管理), Paging(存储页面管理) - 都在内核中完成.一直到现在广泛应用的操作系统,如UNIX,Linux,和Windows还大都是monolithic kernel操作系统.但随着操作系统变得越来越复杂(现代操作系统的内核有一两百万行C程序是很常见的事情),把所有这些功能都放在内核中使设计难度迅 速增加.

微内核是一个与Monolithic Kernel相反的设计理念.它的目的是使内核缩到最小,把所有可能的功能模块移出内核.理想情况下,内核中仅留下Address Space

Support(地址空间支持),IPC (Inter-Process Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。

REX 是在 L4 之上封装的服务,是一个抢占式,多任务的RTOS,所有的任务都以task的形式存在,REX提供包括任务创建,同步,互斥,计时器,中断控制等功能的 API,这里的task实际上就是我们的线程,每个 task对应着一个线程。REX维护一个task list(双向链表),始终运行高优先级的task。products里面所有的服务包括3g协议栈等都是以task的形式跑在rex之上的。

而Brew的话是运行的环境,跟Java 有点儿类似,相当于是一个虚拟机。

AMSS――高级的移动用户软件(Advanced Mobile Subscriber Software)技术,是一种新的软件架构,是对原来软件架构 DMSS 的升级。 AMSS源代码实际上是QC BREW(Binary Runtime Environment For Wireless)平台的的底层部分,去掉了为应用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平台基本上都是采用的这样的架构。

参考文档:

微内核操作系统及L4概述

/view/

MSM平台上的AMSS

/yili_xie/archive/2010/01/04/

1.2.2 选择合适的源代码以及工具 要编译出可供烧写使用的镜像文件需要三部分代码:

1) 获取经过高通打补丁的 android 源代码

2) 获取高通针对不同处理器的 vendor 源代码

3) 获取 modem 源代码

1.2.2.1 获取经过高通打补丁的android 源代码

网址:

/wiki/QAEP#Branch_Releases

/xwiki/bin/QAEP/eclair

/xwiki/bin/QAEP/eclair_caramel

/xwiki/bin/QAEP/froyo_almond

目前使用的 android 分支:

Android 2.1 版本 eclair

M7630AABBQMLZA1150 msm7630

eclair 2010年02月01日

M7630AABBQMLZA1200 msm7630 eclair

2010年03月30日

M7630AABBQMLZA2010 msm7630

éclair July 02, 2010

M7630AABBQMLZA1240 msm7630 eclair_caramel

2010年05月31日

M7630AABBQMLZA1250 msm7630 eclair_caramel

2010年06月15日

M7630AABBQMLZA1280 msm7630 eclair_caramel

2010年08月03日 M76XXTSNCJNLYA5340 msm7627 eclair_chocolate 2010年06月04

Android 2.2 版本 froyo

M7630AABBQMLZA2020

msm7630 froyo 2010年09月01

M76XXTSNCJNLYA6050 msm7627 froyo_almond

2010年10月29日

以下命令获取代码:

/xwiki/bin/QAEP/froyo_almond

ac_root=/home/shared/qualcomm

ac_root=/mnt/shared/qualcomm/

ac_date=20101105

ac_branch=froyo_almond

build_id=M76XXTSNCJNLYA6050

ac_xml=

mkdir -pv $ac_root/$ac_branch-$build_id-$ac_date

cd $ac_root/$ac_branch-$build_id-$ac_date

repo init -u git:///platform/ -b $ac_branch

-m $ac_xml

nohup repo sync&

1.2.2.2 获取高通针对不同处理器的vendor源代码

根据选择的 Android 源代码分支不同, vendor 代码的选择也是不一样的,BUILD ID 必须一致 M7630AABBQMLZA1150 对应

M7630AABBQMLZA1250 对应

M7630AABBQMLZA2020 对应 AMSS 7X30 LINUX RELEASE

2.0.20

M76XXTSNCJNLYA6050 对应 AMSS 7X27 LINUX REL 6.0.50

vendor 代码通过有效的高通帐号登录 HYPERLINK

"/login/"

/login/ 网站获取

1.2.2.3 获取 modem 源代码

根据硬件配置情况,选择不同的 BUILD ID, 然后根据 BUILD ID 选择相近的源代码

modem 代码通过有效的高通帐号登录 HYPERLINK

"/login/"

/login/ 网站获取

BUILD ID 是一组字母的组合,如:AAABQOLYM

以下分别对各个字段进行说明:

第三个字母 A 表示 LPDDR2 #USES_LPDDR2=yes

第三个字母 B 表示 LPDDR1

第六个字母 M 表示 Multimode

第六个字母 C 表示 CDMA

第六个字母 D 表示 JCDMA #相对于C多了:USES_UMTS=yes

USES_DSHDR_JCDMA_APIS=yes

第六个字母 O 表示 UMTS only #相对于C多了:USES_UMTS=yes

USES_SUPPORT_UMTS_GPS_PROTOCOLS=yes

#相对于C少了:USES_CDMA=yes USES_HDR=yes USES_REL_C=yes USES_CDMA2000=yes #USES_EXPORT_MCCMEID=yes USES_SUPPORT_CDMA_GPS_PROTOCOLS=yes

第7,8个字母为 AZ 表示 NADN boot

第7,8个字母为 LY 表示 eMMC boot #相对于AZ多了选项:

USES_SDCC_BOOT=yes USES_HSU_MS_FD_BOOT=yes

最后一个字母为 M 表示 modem

最后一个字母为 A 表示 app

以上为 7x30 平台的一些规律,具体参考文档,7227 参考相应的 release note:

<<80-VR192-1_E_AMSS_Linux_Software_Users_>>

第1个字母

第2个字母 F: 基于ffa参考设计 S: 基于surf的参考设计

第3个字母

第4个字母

第5个字母 K /J

K 相对于 J 多了以下选项

USES_HSU_CHG_BOOT=yes

USES_HSU_FAST_CHARGE=yes

USES_CHARGER=yes

USES_EBI1_TURBO_FFA=yes

第6个字母 O/ N / P

O表示只支持 UMTS(WCDMA)

------------------ USES_IPHC=yes

USES_PDCP=yes

USES_SUPPORT_UMTS_GPS_PROTOCOLS=yes

USES_UMTS=yes

-----------------

P表示只支持 CDMA/CDMA2000

USES_CDMA=yes

USES_CDMA2000=yes

USES_REL_C=yes

USES_SUPPORT_CDMA_GPS_PROTOCOLS=yes

USES_EXPORT_MCCMEID=yes

USES_HDR=yes

-----------------

N表示既支持 UMTS(WCDMA) 且支持 CDMA/CDMA2000

第7个字母

第8个字母

surf和ffa的区别

generally speaking surf have FPGA and don't have battery.

and FFA don't have FPGA but have battery.

msm7627_surf and msm7627_ffa and msm7627_7x_surf means different

hardware reference design. please check with your hardware engineer on which qualcomm hardware reference you use and then select the right build

command.

4.6 Build commands

To create an AMSS build, run the command script with the build ID matching

the build

configuration desired. The command scripts may be executed from the

build/ms subdirectory or

from the AMSS root directory using the full path to the command script

as in the following

examples:

./AMSS/products//build/ms/ – For SURF multimode

build

./AMSS/products//build/ms/ – For SURF UMTS only

build

./AMSS/products//build/ms/ – For SURF 1X only build

./AMSS/products//build/ms/ – For FFA multimode and

for reference only

以高通的开发板子为例,看如何选择源代码,通过 QPST 连接高通的开发板,我们可以看到他的配置信息如下:

高通 demo 版的配置情况:SURF-MSM7630 7X30A-AAABQMAZM-1200

从配置情况来看只有 HY11-N0216-3_1.2.00 HY11-N0216-4_1.2.20 满足要求 HY11-N0216-3_1.2.00/AMSS/products/7x30/build/ms/

HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/

后期我们要跟据实际情况来选择 BUILD ID,如我们的手机的配置情况为:

LPDDR2 ,WCDMA,eMMC 启动(NAND备选),那么modem 的BUILD ID为:

AAABQOLYM 或者 AAABQOAZM

AAABQOLYM

HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/

AAABQOAZM

HY11-N1122-1_1.2.20/AMSS/products/7x30/build/ms/ (NABD

boot 备选)

高通的Android第一人晓峰不建议我们第一次就用eMMC,而应该用Nand,目前只有HTC在用eMMC。高通在eMMC上面提供了参考代码,但是是未经过验证。终端厂商在使用过程中,一定会有很多问题需要自己解。

补充信息:

现在可能用到 BUILD ID 以及相应的 modem 和 vendor 源代码。

modem代码:

BUILD ID modem 源代码 modem镜像 说明文档

M7630AABBQMAZM1200

M7630AABBQMAZM1220

--

M7630AABBQMLYM1200

M7630AABBQMLYM1220 --

M7630AAABQCAZM1220

M7630AAABQCAZM1240

M7630AAABQCAZM1250

M7630AAABQCAZM1260

M7630AAABQCAZM1280

M7630AAABQCAZM1290

--

M7630AAABQMAZM1240

M7630AAABQMAZM1250

80-N0216-3_B_

5.3.2.1 LPDDR1 NAND boot

Multimode

5.3.2.2 LPDDR1 eMMC boot

Multimode

5.3.2.3 LPDDR1 eMMC boot UMTS

only

5.3.2.4 LPDDR1 NAND boot

JCDMA

HT11-N11 HT11-N11 HT11-N11 HT11-N14 HT11-N145.3.2.5 LPDDR2 NAND boot

Multimode

5.3.2.6 LPDDR2 eMMC boot

Multimode

80-N0216-4_A_

5.3.2 Build instructions and commands

5.3.2.1 LPDDR1 NAND boot

Multimode

5.3.2.2 LPDDR1 eMMC boot

Multimode

5.3.2.3 LPDDR1 eMMC boot UMTS

only

5.3.2.4 LPDDR1 NAND boot

JCDMA

5.3.2.5 LPDDR2 NAND boot

Multimode

5.3.2.6 LPDDR2 eMMC boot

Multimode

5.3.2.7 LPDDR2 eMMC boot UMTS

only

5.3.2.8 LPDDR2 NAND boot C2K

Only

5.3.2.9 LPDDR1 eMMC boot C2K

Only

5.3.2.10 LPDDR2 NAND boot

JCDMA

5.3.2.11 LPDDR2 NAND boot UMTS

only

80-N1665-1_B_M7630AAABQ_

5.3.2 Build instructions and commands

5.3.2.1 LPDDR1/LPDDR2 eMMC boot Multimode

5.3.2.2 LPDDR1/LPDDR2 eMMC boot UMTS only

5.3.2.3 LPDDR1/LPDDR2 eMMC boot C2K only

5.3.2.4 LPDDR2/LPDDR1 NAND boot Multimode

5.3.2.5 LPDDR1/LPDDR2 NAND boot JCDMA

5.3.2.6 LPDDR2/LPDDR1 NAND boot C2K only

5.3.2.7 LPDDR2/LPDDR1 NAND boot UMTS only

The same build ID will now work for LPDDR1 as well as LPDDR2.

从以上的发布信息,只有 LPDDR2 和 LPDDR1 不同的情况下可以使用同一个

build ID。

对于我们的硬件配置情况(LPDDR2 eMMC boot UMTS only) 可以使用的编译命令文件为:

选择 modem 代码 M7630AAABQMAZM1250

如果是支持 BREW 平台,通常多下面的选项:

USES_BREW_4.0=yes

USES_BREW=yes

USES_BREW_APPMGR=yes

或者 USES_BREW_USB_HID=yes

没有 USES_DIAG_SMD_SUPPORT=yes

项目 PD1007

OEM/Target Equipment (FeaturePhone,Smartphone,Datacard): Smartphone

Anticipated Launch Date: April 1 2011

Target market (such as China Telecom): China Open market

Current Software (such as Q6270BKPRZL1505): froyo-M76XXTSNCJNLYA7010

Bluetooth IC/Module (vendor name and module if support BT): BTS4025

WLAN IC/Module (vendor and module if support WLAN ):WCN1312

Chipset (such as QSC6270):MSM7227-1

RF chipset (such as RGR6240):RTR6285

PMIC chipset (such as PM7540):PM7540

WCMDA Supported Bands (900,1900,2100…. if support WCDMA):2100

CMDA Supported Bands (450,850,1900,2100… if support CDMA ):not suport

OS (Brew,BMP,Android,WM,ThinUI(no UI)…):android froyo

OS version (Android Donuts…): android froyo

1.2.2.3.1 高通 modem 源代码编译前的修正

从高通获取的源代码直接编译会存在一些问题,以下为可能的问题以及解决方法:

1) 为相应的脚本加上编译选项

vim ./AMSS/products/7x30/build/ms/

加上: BUILD_UNIX=yes

2) 如果编译过程出现 .pl 文件没有执行权限而退出,那么为工程下面所有的

pl 文件加上可执行属性,命令:

find ./ -name "*.pl" |xargs chmod 755

3) 无法找到需要的 pl 脚本解析器

vim ./AMSS/products/7x30/tools/build/

修改

#!/pkg/perl/5.6.1/bin/perl -w

#!/usr/bin/perl -w

4) 如果出现错误:

"AMSS/products/7x30/core/bsp/build/data/", line 14

IndentationError: expected an indented block

修改文件:./AMSS/products/7x30/core/bsp/build/scripts/ 内容:

#if ($line =~ /^# makefile (from/)

为:

if ($line =~ /^# makefile /)

原因分析:

会对编译过程的中间信息 :

...

line=# makefile (from'',line 363)

line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc

... 等信息进行解析,由于我们使用的是中文系统,所以以上内容变为:

line=# makefile (从'',行 363)

line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc

所以导致:

#if ($line =~ /^# makefile (from/) 判断条件为为 false

无法正确生成 ,python 在解析该文件的时候认为存在语法错误。

在 modem 代码 M7630AABBQMAZM2020()中开始使用

产生

./AMSS/products/7x30/core/bsp/build/data/ 文件,所以修改文件

在脚本中需要加入以下内容:

incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/

if test -f $incpathsxxx_py; then

PERL=`which /usr/bin/perl`

sed -i "s/(from//g" $incpathsxxx_py

fi

./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c

#DalAdieCodecDbInternal.h 改为:

#include "DALAdieCodecDbInternal.h"

5) 如果出现 make: execvp: ../../../../platform/cs/bin/cifc: Permission

denied 错误,执行以下命令: chmod -R 755 AMSS/platform/cs/bin/*

1.2.3 建立 Android 开发环境

(略)

curl /repo >~/bin/repo

chmod a+x ~/bin/repo

export PATH=~/bin:$PATH

1) 安装基本软件

sudo apt-get install git-core gnupg flex bison gperf build-essential zip

curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386

lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev

lib32readline5-dev lib32z-dev

2) 安装 sun-java5-jdk

ubuntu 下通过命令: sudo apt-get install sun-java5-jdk 将会安装下面的包

sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre

sun-java5-plugin

如果ubuntu 发布版本中没有 sun-java5-jdk 那么

sudo vim /etc/apt/

#for sun-java5-jdk

deb /ubuntu/ jaunty multiverse

deb /ubuntu/ jaunty-updates multiverse

sudo apt-get update

sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get ,那么用手动安装:

sudo mount -t nfs 172.20.127.15:/home/shared /mnt

sudo dpkg -i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*

3) 配置usb

cd /etc/udev/rules.d/

sudo vi

# adb single interface device

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1",

SYSFS{idProduct}=="d00d",

MODE="0664", GROUP="plugdev"

# adb composite interface device

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1",

SYSFS{idProduct}=="deed",

MODE="0664", GROUP="plugdev"

# Sooner low-level bootloader

BUS=="usb", SYSFS{idVendor}=="0bb4", SYSFS{idProduct}=="0a51",

MODE="0664",GROUP="plugdev"

sudo /etc/init.d/udev restart

1.2.4 建立 modem 开发环境

与android 源代码不同,modem 编译工具使用的是 RVDS ,实际上只用到其中的

RVCT 编译器, 高通不提供该工具,我们必须从arm公司获取相应的授权,RVDS

是 ADS 的升级版本,从 ADS 1.2 开始到 RVDS 3.1 我们公司都有其授权,按照高通的要求我们目前必须使用 RVDS 2.2 并且使用他的 349 patch。

RVDS 2.2 安装以及使用步骤如下: 1). RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目录

sudo mount -t nfs 172.20.127.15:/home/shared/ /mnt

cd /mnt/qualcommon/RVDS-2.2/

linux下rvds2.2的安装程序为:

./rvds2.2_linux-pentium/

执行以上命令,按照默认步骤安装,安装路径为:~/ARM

注意事项:

安装过程如果出现错误:

..................sfiedLinkError:

/tmp/ismp001/: libstdc++-.3:

cannot open shared object file: No such file or directory

从网上下载 libstdc++-.3 拷贝到 /usr/lib 目录 ,或者从下面地址获取:

172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-.3

工具的安装通过脚本进行了简化,具体过程请参考文档:

80-N0216-2_A_

80-VR881-7_B_

80-VR192-1_C_AMSS_Linux_Software_Users_

80-VR192-1_D_AMSS_Linux_Software_Users_

2) 安装高通指定的 593 patch

cd /mnt/qualcommon/RVDS2.2/下执行命令:

./

目前版本只支持 32 位的系统

1.2.4.1 补充

vim ./AMSS/products/7x30/core/bsp/build/scripts/ 定义了工作线程

#num_jobs = num_cpu * 2 modified by mhf

num_jobs = 2

if num_jobs < 4:

num_jobs = 2

if num_jobs > 8:

num_jobs = 8

ion('num_jobs', num_jobs)

―――――――

获取 RVDS

官方网站下载评估版本

/browse

/products/tools/

/download/eval_

/userguides/Web_Licensing_Portal_User_

(Licensing 需要通过 host id 注册)

―――――――

1.2.4.1.1 获取 licenses

RVDS 的 licenses 从其官方网站获取

/licensing/

/licensing/ /support/man/docs/license/license_sul_

入口 /licensing/ 合法用户登录

用户名:***************** 密码: Mohuifu7737

入口 /licensing/ 输入产品的序列号

然后按照步骤一步步操作即可

Server Host Id Type 类型选择 ETHERNET

Server Host Id 填写需要绑定主机的MAC地址 00:1a:64:0a:ba:70

最后保存 文件,文本格式。

1.2.4.1.2 Flex 简单使用指南

FLEXlm是应用广泛的License管理工具,它以使软件License能够在网上浮动而出名。浮动的License有利于软件的使用和对 License的管理,这使得用户能够高效地使用有效的许可,并使管理者能够控制允许使用它的节点。由于有大约1500厂商使用FLEXle管理 lICENSE,所以CAD系统管理人员极有可能要同时安装和管理来自不同厂商的License或同一厂商多个产品的License文件。可采取以下方法 避免产生冲突:

(1)用一个服务器运行一个Lmgrd(License文件的后台管理程序)和多个License文件;

(2)用一个服务器运行多个Lmgrd和License文件;

(3)运用多个服务器节点,每个服务器运行单独的Lmgrd和License文件。

第一种选择主要造用于高版本的Lmgrd,V6之前和FLEXlm,每个Lmgrd只能管理一个License文件;

第二种选择,将使用一台服务器,但需要运行多个Lmgrd;第三种选择,必须使用多个License服务器。

一、服务器端设定 e文件的设定

在使用FLEXlm进行管理的License文件中一般有SERVER行,它通过SERVER行的hostname和hostID定义License服务器。

SERVER this_host 0050BB0F402 27000

hostname hostID post

2.服务方式的选择

(1)一个服务器运行一个Lmgrd和多个License文件如果多个License文件具有相同的hostID,则可以通过修改hostname进行合 并。合并时,首先将多个License文件加到一个文件中,然后修改SERVER行,并且只保留一个SERVER行。对于Windows NT操作系统,应在各License的默认位置保存一个合并后的备份,这样每个软件将在其默认位置找到License信息,从而避免了对

LM_LICENSE_FILE的设定;对于UNIX操作系统,可以建立一个默认位置到License存放位置和Link。合并后的License文件, 就可以使用同一个Lmgrd。

(2)一个服务器运行一个Lmgrd和一个别License文件如果HostID不一样,则这些License服务只能运行于不同的服务器节点上,并且License不能合并。可以选择使用一个服务器运行一个Lmgrd和License文件。

(3)一个服务器运行多个Lmgrd和License文件如果多个License未进行合并,可以通过在同一台机器上启动多个Lmgrd,每个 Lmgrd管理一个License文件。使用多个Lmgrd管理多个License文件对服务器的性能并没有明显影响。如果License是由不同版本的 FLEXlm产生的,一般是新版本可以管理旧版本的License文件。所以应使用最新的Lmgrd和Vendor daemon。另外,当用一个服务器的多个Lmgrd管理多个License文件时,应该注意任何二个License文件的post都不能一样,并且对于 每个License而言,应选用合造的Lmgrd。

二、客户端设定

当使用客户端应用程序时(a Licensedapplication),可以通过在系统的环境变量中设定LM_LICENSE_FILE,使Application能够指向不同服务 器上的License文件。如果要使a Licensed application使用不同服务器都有单独的一个License文件),客户端应将需要用到的License文件拷贝到本机目录下,并指定 LM_LICENSE_FILE环境变量。UNIX: %setenv LM_LICENSE_FILE lfpath1 :

lfpath2 :…… : lfpathN Windows: lfpath1 ;lfpath2:…… ;lfpathN LfpathN为第N个License的路径;UNIX下路径间用":"隔开;Windows/NT下路径间使用";"隔开; 这样,每个Licensed aplication在启动时将依次查询LM_LICENSE_FILE中所指定的License文件,并向相应的License服务器申请许可,以使用 户能从所列的服务器得到许可。LM_LICENSE_FILE也可以使用各License文件中所指定的"post@hostname"。下面以 Windows NT为例介绍多个FLEXlm的安装。

三、同一机器上多个FLEXlm License Server的安装

(1) 以Administrator身分登录;

(2)在C盘建C:FLEXlm目录,并拷贝相关文件到其下;

(3)在C:FLEXlm下建立欲安装License Server的软件目录,放置各软件的License文件,Daemon和Daemon所需的动态连接库;

(4)修改和SERVER行和DAEMON的位置,并启动FLEXlm License

Manager。

(5)在Setup修改Service Name,输入造当名称,以区别是何种License服务;利用Browse选择合适和对应和并指定和放置路径;

(6)选中"StartServer at Power-Up"与"Use NT Services",这样下次启动机器时,将自动启动该Li-cense服务;

(7)点击Control按钮检查Service Name是否与设定名称相同,如果不同,回到"Setup"重新选择Service Name;如果一样,点击"Start"启动该Li-cense

Server;点击"Status"检查Licevse Server启动情况,若出现Server_name:

License server UP (MASTER),表示License Server启动成功;

(8)安装另外的License Server:可依上述(3)~(7)重新执行一次即可;

(9)切换不同License Server:在"Setup"中选择适当的"Service Name",然后启动或停止相应的License服务;

(10)移除License Server:在"Setup"选择适当的"Service Name",然后按"Remove"即可。

1.2.4.1.3 启动 license 服务器

#!/bin/bash ac_PATH=~/ARM/Utilities/FLEXlm/9.2/release/linux-pentium/

PATH=${ac_PATH}:${PATH}

export PATH

LICENSE_FILE=~/ARM/licenses/

LOG=~/ARM/licenses/

case "$1" in

start)

lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2

echo -n " lmgrd"

;;

stop)

ac_pid=`pidof lmgrd`

kill $ac_pid 2>> ${LOG} 1>&2

ac_pid=`pidof armlmd`

kill $ac_pid 2>> ${LOG} 1>&2

#lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2

;;

*)

echo "Usage: `basename $0` {start|stop}" 1>&2

exit 64

;;

esac

1.2.4.1.4 license 没有办法从服务器获取的几种情况 1.需要关闭网络防火墙

2.在客户端需要配置license服务器的服务端口

3.要求在同一个局域网内

sudo ufw disable

防火墙在系统启动时自动禁用

sudo iptables -A OUTPUT -p tcp --dport 8224 -j ACCEPT

修改/etc/sysconfig/iptables 文件,添加以下内容:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j

ACCEPT

1.2.4.1.5 破解 rvds 的license

第 1 章 欢迎使用 FLEXlm

在linux下创建一个虚拟网卡

/cgl/%E8%BD%AF%E4%BB%B6/%E5%A4%9A%E5%AA%92%E4%BD%93%E5%88%B6%E4%BD%9C%E8%BD%AF%E4%BB%B6/flash/Autocad%202002/Netsetup/support/AdLM/Docs/FlexUser/#895035

1.2.5 在高通开发板上烧录文件系统

通过设置模块完成系统,应用程序等个性化设置。

烧录之前必须了解获取硬件配置情况

2. 由硬件配置情况到高通网站选择相应的镜像文件

3. 烧录镜像文件到高通demo开发板

4. 从高通网站下载源代码编译相应的镜像文件进行验证

1. 烧录之前必须了解获取硬件配置情况 高通 demo 板的配置情况:SURF-MSM7630 7X30A-AAABQMBZM-1090 或者

7X30A-AAABQMAZM-1200

以上信息可以通过 QPST 连接高通的demo开发板获得

2. 由硬件配置情况到高通网站选择相应的镜像文件

要给高通的开发板烧录文件系统,必须有以下的镜像文件:

dsp相关的

AMSS modem binary image

设备启动的装载程序

OS boot loader binary image

分区表的二进制文件

应用程序的启动文件,如果是 eMMC 启动对应文件

emmc_

ap 端的linux 内核

android 文件系统的 system 分区

android 文件系统的 data 分区

其中 ,,,, 可以从以下目录获取

unzip /home/shared/qualcommon/

unzip /home/shared/qualcommon/

HK11-N0216-3_1.2.00/AAABQMAZ/

HK11-N0216-4_1.2.20/AAABQMAZ/

,,, 必须来自eclair源代码

3. 烧录镜像文件到高通demo开发板 怎样烧写文件请参考工具使用文档

通过fastboot烧写

参考文档:

80-VR192-1_D_AMSS_Linux_Software_Users_

6.2 USB setup in Linux

6.2.1 Using Fastboot in Linux

4. 从高通网站下载源代码编译相应的镜像文件进行验证

高通有两个cpu,他们分别跑不同的系统,应用程序(ap)端是android系统,modem

端是高通自己的系统。

======

android 系统目前使用的是 eclair 版本,此版本来自标准的 android 2.1

eclair,高通在上面加了自己的补丁,代码网址:

/wiki/QAEP#Branch_Releases

/wiki/QLBEP

下载 M7630AABBQMLZA1150 分支:

February 1,

2010 M7630AABBQMLZA1150 msm7630 eclair

命令如下:

mkdir -pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201

cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201

repo init -u git:///platform/ -b eclair -m

nohup repo sync 代码下的 vendor/qcom-proprietary 来自包

以上两部分代码已经下载并且合并,共享在:

172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150

---------------

编译 eclair 代码

svn co

172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150

cd eclair-M7630AABBQMLZA1150

cd eclair-M7630AABBQMLZA1150$

. ./

. ./

=======

modem代码从高通网站:/login/ 上获取

我们目前使用的是:

共享在:

172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220

-------

编译 modem 代码

svn co

172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220

cd modem-M7630AABBQMAZM1220 . ./

. ./make

========

编译结果分别如下:

------------

其中 ,,,, 位于以下目录:

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

------------

,,, 位于以下目录:

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/3 ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/3

------------

eMMC 启动使用的是 ext3 文件系统,需要使用镜像 3

3

补充说明:

文件的原始数据来自配置文件:

./AMSS/products/7x30/tools/jsdcc/partition_load_pt/

1.3 高通平台,android和 modem 编译流程分析

android 代码编译流程分析

modem 代码编译流程分析

1.3.1 android代码编译流程分析

1. 从服务器下载 android 源码到当前目录

smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/

svn co

172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/

cd froyo_almond-M76XXTSNCJNLYA6050/

. ./ 设置环境变量

Setting Environment ...

通常情况下 generic 用于编译模拟器版本

Options are:

1. generic 2. msm7627_surf

3. msm7627_ffa

4. tiny-system

====从以上列表中选择====

Which would you like? [1]

烧录的镜像文件

来自 android 源码

的主要功能是装载 linux 内核,通过 linux 的引导来完成

android 系统的加载,

被烧写在相应的分区,它的加载由 来完成,

程序来自 modem。

7x30 7x27 系列 appsboot 不一样,7x30 的 是 7x27

两个文件的合并

1) 生成过程解析

2) 生成过程解析,怎样手动生成

1.3.1.1 编译工具检测

make out/target/product/msm7630_surf/

1.3.1.1.1

1.3.1.2 生成过程解析

make out/target/product/msm7630_surf/

make out/target/product/msm7630_surf/nandwrite

make out/target/product/msm7630_surf/emmc_ 分别执行:

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1

生成 nandwrite

===============

#build nandwrite as a part of Android Build

TARGET_NANDWRITE :=

$(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk

NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite

nandwrite_clean:

$(hide) rm -f $(TARGET_NANDWRITE)

$(hide) rm -rf $(NANDWRITE_OUT)

$(NANDWRITE_OUT):

mkdir -p $(NANDWRITE_OUT)

$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)

@echo $(TARGET_PRODUCT)_nandwrite $(MAKE) -C bootable/bootloader/lk

BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite

BUILD_NANDWRITE=1

================

vim ./bootable/bootloader/lk/makefile:98:

TARGET :=

msm7630_surf #./bootable/bootloader/lk/project/msm7630_

PLATFORM :=

msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/

msm7x30

msm7630_

msm7630_surf_nandwrite

=============================

include project/$(PROJECT).mk

include target/$(TARGET)/

include target/$(TARGET)/tools/makefile

include platform/$(PLATFORM)/

include arch/$(ARCH)/

include platform/

include target/

include kernel/

include dev/

include app/

... include make/

...

include make/

========================

vim bootable/bootloader/lk/make/

INCMODULES := $(MODULES)

$(info including $(INCMODULES))

include $(addsuffix /,$(INCMODULES))

展开为:

./bootable/bootloader/lk/app/nandwrite/

./bootable/bootloader/lk/dev/fbcon/

./bootable/bootloader/lk/dev/keys/

./bootable/bootloader/lk/lib/debug/

./bootable/bootloader/lk/lib/heap/

./bootable/bootloader/lk/lib/libc/

./bootable/bootloader/lk/lib/ptable/

========================

bootable/bootloader/lk/make/:29:

include arch/$(ARCH)/

./bootable/bootloader/lk/project/msm7630_surf_ 中有:

MODULES += app/nandwrite

./bootable/bootloader/lk/platform/msm7x30/中有: MODULES += dev/fbcon

./bootable/bootloader/lk/kernel/ 中有:

MODULES += lib/libc lib/debug lib/heap

./bootable/bootloader/lk/target/msm7630_surf/ 中有:

MODULES += dev/keys lib/ptable

所以:

MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc

lib/ptable

因为

ifeq ($(BUILD_NANDWRITE), 1)

APPSBOOTHDR_FILES :=

else

out/host/linux-x86/bin/acp -fpt

out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite

25780 184 34000 59964 ea3c ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

arm-eabi-objcopy -O

binary ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/ generating

listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

symbols: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating size

map: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

make[2]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

make[1]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

target Prebuilt: (out/target/product/msm7630_surf/nandwrite)

make -C bootable/bootloader/lk

BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite

msm7630_surf_nandwrite BUILD_NANDWRITE=1

make[2]: 正在进入目录

`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk`

msm7630_surf_nandwrite

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1

==》生成 mkheader 工具

gcc target/msm7630_surf/tools/mkheader.c -o

target/msm7630_surf/tools/mkheader

$(BUILDDIR)/: $(LOCAL_DIR)/

@echo generating $@

@$(MKDIR)

$(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/"

< $< > $@

generating ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

compiling arch/arm/crt0.S compiling arch/arm/crt0.S

。。。compiling lib/ptable/ptable.c

compiling lib/ptable/ptable.c

vim bootable/bootloader/lk/platform/msm7x30/

-----

LINKER_SCRIPT += $(BUILDDIR)/

include platform/msm_shared/

-----

./build/core/product_:177:TARGET_DEVICE :=

$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)

./build/core/:152:OUT_DIR := $(TOPDIR)out

./build/core/:159:TARGET_OUT_ROOT_release :=

$(OUT_DIR)/target

./build/core/:161:TARGET_OUT_ROOT :=

$(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))

./build/core/:178: TARGET_PRODUCT_OUT_ROOT :=

$(TARGET_OUT_ROOT)/product

./build/core/:184:PRODUCT_OUT :=

$(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)

build/core/:200:TARGET_OUT_INTERMEDIATES :=

$(PRODUCT_OUT)/obj

bootable/bootloader/lk/:4:BOOTLOADER_OUT :=

$(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ

bootable/bootloader/lk/makefile:32:BUILDDIR :=

$(BOOTLOADER_OUT)/build-$(PROJECT) bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

所以:

TARGET_PRODUCT_OUT_ROOT=out/target/product/

PRODUCT_OUT=out/target/product/msm7630_surf/

TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/

BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/

所以:

BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf

所以:

OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf

bootable/bootloader/lk/makefile

OUTELF := $(BUILDDIR)/lk

./bootable/bootloader/lk/make/

$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)

@echo linking $@

$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)

$(LIBGCC) -o $@

vim ./bootable/bootloader/lk/

TARGET_NANDWRITE :=

$(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk

$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)

@echo $(TARGET_PRODUCT)_nandwrite

$(MAKE) -C bootable/bootloader/lk

BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite

BUILD_NANDWRITE=1

BOOTLOADER_EMMC_OUT :=

$(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ

vim ./bootable/bootloader/lk/make/

$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)

@echo linking $@

$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)

$(LIBGCC) -o $@

bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/

bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

./lk/platform/msm7x30/:23:LINKER_SCRIPT +=

$(BUILDDIR)/

==》链接 lk

linking ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

linking ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

generating

image: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

image: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

text data bss dec hex filename

29592 7388 42720 79700 13754 ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

text data bss dec hex filename

25780 184 34000 59964 ea3c ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

==》以 binary 格式,把文件

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 输出到:

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ arm-eabi-objcopy -O binary

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

==》

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

make[1]:正在离开目录 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

==》

make -C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ

ARCH=arm CROSS_COMPILE=arm-eabi- msm7630-perf_defconfig

make[1]: 正在进入目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel

generating

symbols: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

generating size

map: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

mkheader 从 生成 语法: mkheader

然后把 和 合并为文件 ,删除

文件

大小 40K

./bootable/bootloader/lk/target/msm7630_surf/tools/mkheader

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ out/target/product/msm7630_surf/

合并 out/target/product/msm7630_surf/

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ 为:

out/target/product/msm7630_surf/

cat out/target/product/msm7630_surf/

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ > out/target/product/msm7630_surf/

删除:out/target/product/msm7630_surf/

==================================================

1.3.1.3 生成过程解析,怎样手动生成

包括两个部分: kernel 和 ramdisk ,通过命令:

make out/target/product/msm7630_surf/ showcommands

会自动生成 kernel 和 ramdisk,然后把两者合并制作成烧写的镜像文件:

kernel 为

out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage

或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷贝

编译内核之前必须获取一个默认的配置文件 .config ,此配置文件可以生成,或者来自默认配置,高通中 msm7630_surf 的 默认配置文件名为: msm7630-perf_defconfig 在文件:

vendor/qcom/msm7630_surf/:45 中通过:

KERNEL_DEFCONFIG := msm7630-perf_defconfig 进行了指定。

我们可以通过命令:

make -j3 ARCH=arm CROSS_COMPILE=arm-eabi- kernel showcommands

或者通过如下命令一步步完成:

1. 获取默认的内核配置并生成.config 的命令如下:

make -C kernel

O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm

CROSS_COMPILE=arm-eabi- msm7630-perf_defconfig

-C kernel 告诉 make 进入 kernel 工作目录,到其下面寻找 makefile

文件

O 内核编译的中间文件以及编译结果等都存储在该目录下,此做法的好处是不会在kernel源代码目录下生成垃圾文件

ARCH=arm 告诉系统到 ./kernel/arch/$ARCH/configs/ 目录下找文件

msm7630-perf_defconfig,生成的.config 保存在:

out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config

2. 手动编译内核

make -C kernel

O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/

3. 如果需要配置内核,使用下面的命令

make kernelconfig

他首先会进入 menuconfig 界面,用户配置完成以后,会把修改后的配置文件$(KERNEL_OUT)/.config 更新为默认的配置文件

cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config

kernel/arch/arm/configs/msm7627-perf_defconfig

kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)

2023年12月6日发(作者:鄞南蓉)

1、 高通平台android开发总结. 7

1.1 搭建高通平台环境开发环境. 7

1.2 搭建高通平台环境开发环境. 7

1.2.1 高通android智能平台概述. 7

1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系. 7

1.2.2 选择合适的源代码以及工具. 8

1.2.2.1 获取经过高通打补丁的android 源代码. 8

1.2.2.2 获取高通针对不同处理器的vendor源代码. 9

1.2.2.3 获取 modem 源代码. 9

1.2.2.3.1 高通 modem 源代码编译前的修正. 13

1.2.3 建立 Android 开发环境. 14

1.2.4 建立 modem 开发环境. 15

1.2.4.1 补充. 16

1.2.4.1.1 获取 licenses 16

1.2.4.1.2 Flex 简单使用指南. 16

1.2.4.1.3 启动 license 服务器. 18

1.2.4.1.4 license 没有办法从服务器获取的几种情况. 18

1.2.4.1.5 破解 rvds 的license 19

1.2.5 在高通开发板上烧录文件系统. 19

1.3 高通平台,android和 modem 编译流程分析. 21

1.3.1 android代码编译流程分析. 21

1.3.1.1 编译工具检测. 22

1.3.1.1.1 22

1.3.1.2 生成过程解析. 22

1.3.1.3 生成过程解析,怎样手动生成 28

1.3.1.4 编译过程存在的问题. 32

1.3.1.4.1 prelinkmap 的时候 base 0xaff00000 out of range 32

1.3.1.4.2 LOCAL_SDK_VERSION 使应用程序不能访问hide的api 32

1.3.1.4.3 armv5te-vfp 导致一些游戏运行不了. 32

1.3.2 分布式编译 android 代码. 33

1.3.3 modem 代码编译流程分析. 33

1.3.3.1 单独编译某个模块(如:qcsbl oemsbl). 34

1.3.3.2 $(TARGETDIR)/exist 规则解析. 36

1.3.3.3 setup规则解析. 36

1.3.3.3.1 corebsp_create_incpaths 36

1.3.3.3.2 create_incpaths 36

1.3.3.3.3 amsssetup 36

1.3.3.3.4 amsslinkaddress 36

1.3.3.3.5 firmware 38

1.3.3.4 deps规则解析. 38

1.3.3.5 corebsp_build规则解析. 38

1.3.3.5.1 corebsp_build_action 38

1.3.3.5.1.1 corebsp_scons 规则. 39

1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39

1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.

40

1.3.3.5.1.1.2.2 lder 过程解析. 41

1.3.3.5.1.1.2.3 lder 过程解析. 41

1.3.3.5.1.1.2.4 myBuilder 过程解析. 42

1.3.3.5.1.1.2.5 生成过程解析. 43

1.3.3.5.1.1.2.6 生成过程解析. 43

1.3.3.5.1.1.2.7 AMSS_ 生成过程解析. 43

1.3.3.5.1.1.2.8 生成过程解析. 43

1.3.3.5.1.1.2.9 生成过程解析. 44

1.3.3.5.1.1.2.10 enandprg_ 生成过程解析. 44

1.3.3.5.1.1.2.11 nandprg_ 生成过程解析. 45

1.3.3.5.1.1.2.12 生成过程解析. 45

3.3.3.5.1.1.1 corebsp_scons_done 46

1.3.3.5.1.2 corebsp 46

1.3.3.5.2 corebsp_create_incpaths 46

1.3.3.5.3 corebsp_setup 46

1.3.3.6 libs 46

1.3.3.7 copybar规则解析. 47

1.3.3.8 exe规则解析. 47

1.3.3.8.1 CORELIBS_生成过程解析. 47

1.3.3.8.2 生成过程解析. 47

1.3.3.9 bldprod规则解析. 48

1.3.3.10 create_mem_feat_html规则解析. 48

1.3.3.10.1 50

1.3.3.11 partition规则解析. 50

1.3.3.11.1 eMCC 启动和 NAND 启动的分区格式是不一样的,如果是 eMCC 启动,多了编译选项:. 50

1.4 高通平台 7630 启动流程分析. 52

1.4.1 启动流程概述. 52

1.4.2 pbl 流程. 52

1.4.3 dbl 流程. 52

1.4.4 osbl 流程. 54

1.4.4.1 osbl 装载 appsbl 过程分析. 56

1.4.5 appsbl 流程(源代码在 android中). 56

1.4.5.1 aboot_init 过程分析(需要侧重关心的部分). 58

1.4.5.1.1 fastboot 模式分析. 61

1.4.5.1.1.1 什么是 fastboot 模式. 61

1.4.5.1.1.2 fastboot 模式与 recovery 模式的区别. 61

1.4.5.1.1.3 怎样进入 fastboot 模式. 62

1.4.5.1.1.4 android 系统手机刷机过程分析(补充知识) 62

1.4.5.1.2 appsbl 引导 android 系统. 63

1.4.5.1.2.1 Android 系统启动过程中存在的问题. 67 1.4.5.1.1.1.1 linker 问题导致系统无法启动. 67

1.4.6 AMSS 流程. 69

1.5 android 系统重启关机流程分析. 82

1.5.1 c语言中调用 reboot 函数. 82

1.5.2 通过 adb 让系统重启. 82

1.5.3 fastboot 模式下系统重启. 83

1.5.4 系统关机. 84

1.5.5 内核中的系统调用 reboot 85

1.6 软件调用流程分析. 89

1.6.1 设置sim卡状态. 89

1.6.2 设置背光. 90

1.6.3 获取电池信息. 90

1.7 python scons 语法学习. 94

1.8 python 语法学习. 94

1.8.1 Python中文全攻略. 94

1.8.2 推荐一款Python编辑器. 94

1.8.3 使用 pyExcelerator 读 Execl 文件. 94

1.8.4 xlrd 解析 xls 文件. 95

1.8.5 xlrd 生成 xls 文件. 95

1.9 Python 语言之 scons 工具流程分析. 95

1.9.1 Program 方法. 100

1.9.2 Library 方法. 100

2、 高通常用工具使用. 101

2.1 QPST 101

2.2 QXDM 101

2.3 QCAT 101

3、 工程模式. 101

4、 Android 系统更新升级总结. 104

4.1 刷机基本知识. 104

4.1.1 各品牌代表手机刷机模式进入方法. 104

4.1.1.1 HTC G1 104

4.1.1.2 三星 Galaxy i7500 104

4.1.1.3 Google Nexus One 105

4.1.2 fastboot 模式. 105

4.1.2.1 fastboot 模式概述. 105

4.1.2.2 PC端fastboot 命令分析. 106

4.1.2.2.1 命令选项 –w –s -p –c 106

4.1.2.3 手机端fastboot 命令分析. 107

4.1.2.3.1 boot 107

4.1.2.3.2 erase 107

4.1.2.3.3 flash 107

4.1.2.3.4 continue 107

4.1.2.3.5 reboot 107

4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107

4.1.2.3.8 download 108

4.1.2.3.9 update 108

4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108

4.1.2.3.9.2 fprintf(stderr, "archive does not contain '%s'n", name); 108

4.1.2.4 fastboot 模式流程分析. 108

4.1.3 recovery 模式. 108

4.1.3.1 recovery 模式概述. 108

4.1.3.2 软件升级包. 109

4.1.3.3 recovery v1跟recovery v2的区别. 109

4.1.3.4 软件升级脚本语法解析. 109

4.1.3.4.1.1 mount 110

4.1.3.4.1.2 getprop 111

4.1.3.4.1.3 file_getprop 111

4.1.3.4.1.4 assert 111

4.1.3.4.1.5 format 111

4.1.3.4.1.6 apply_patch_check 111

4.1.3.4.1.7 apply_patch_space 111

4.1.3.4.1.8 apply_patch 111

4.1.3.4.1.9 package_extract_file 112

4.1.3.4.1.10 ui_print 112

4.1.3.4.1.11 META-INF/com/google/android/update-script 脚本分析. 1124.1.3.4.2 Recovery 模式中 install_package 函数解析. 117

4.1.3.5 Recovery 流程分析. 118

4.1.3.5.1 恢复出厂设置. 118

4.1.3.5.2 系统更新流程. 119

4.1.3.5.3 通过sd卡实现刷机. 121

4.1.3.6 系统升级包案例分析. 122

4.1.4 工程模式(HBoot) 模式. 122

4.1.4.1 HBOOT降级方法. 122

4.2 如何制作升级包 123

4.2.1 手动制作升级包. 123

4.2.2 自动制作升级包. 123

4.3 Android 签名机制. 125

4.4 android 文件系统权限概述. 125

4.4.1 获取手机root权限. 127

4.4.2 adb默认权限分析. 128

4.4.3 adb root命令切换到 root 权限. 129

4.4.4 挂载系统分区为读写(remount) 130

4.4.5 通过修改 获取 Nexus One 权限. 132

4.5 系统应用移植. 132

4.5.1 Android 2.2在线升级的移植. 132

4.5.2 解决donut Gtalk、Market登录不了的问题. 133

4.5.3 apk反编译问题总结. 133

4.5.4 系统重启. 133

5、 高通linux内核驱动开发. 133

5.1 添加串口调试. 133

5.2 Sensor 传感器. 133

5.3 USB 枚举 USB Composition 134

5.4 USB 枚举 USB Composition 136

6、 从 android 源代码制作 sdk 136

6.1 linux sdk 137

6.2 windows sdk 137

7、 程序安装与调试. 138

8、 android 框架流程分析. 138

8.1 屏幕显示相关. 138

8.1.1 屏幕分辨率. 138

8.1.2 屏幕模式. 139

8.2 Android 开机充电. 141

8.3 Android 开机动画. 141

8.3.1 内核开机画面. 141

8.3.2 文件系统开机画面. 141

8.3.2.1 开机显示的 ANDROID 文字. 141

8.3.2.2 ANDROID 发光动画. 142

8.3.2.3 文件分析. 143

8.3.2.4 文件分析. 143

8.3.3 三星I9000 开机动画. 144

8.4 JNI调用流程. 145

8.5 Android 开机铃声. 145

8.6 GPS 导航. 145

8.6.1 GPS导航原理. 145

8.6.2 GPS导航软件. 145

9、 高通modem框架流程分析. 146

9.1.1 添加自定义rpc调用. 146

9.1.1.1 从AP端获取modem的系统分区信息. 146

9.1.2 添加自定义 AT命令. 146

10、 linux 应用. 146

10.1 嵌入式Linux通过帧缓存截图 - Framebuffer Screenshot in Embedded

Linux 146

10.2 Linux下右键烧录文件. 147

10.3 Linux下右键svn 147

1、高通平台android开发总结

1.1 搭建高通平台环境开发环境

在高通开发板上烧录文件系统 建立高通平台开发环境

高通平台,android和 modem 编译流程分析

高通平台 7620 启动流程分析

qcril 流程分析,设置sim卡锁

python scons 语法学习

Python 语言之 scons 工具流程分析:

1.2 搭建高通平台环境开发环境

高通android智能平台概述

选择合适的源代码以及工具

建立 Android 开发环境(部分略)

建立 modem 开发环境

1.2.1 高通android智能平台概述

高通 7230 android 智能手机解决方案的软件包括两个部分

1. 以linux 操作系统为基础的 android 系统

2. 以 L4,REX为基础的 Modem 部分

在高通7系列的架构中,一个IC内部集成有两个ARM处理器,一个ARM9(或者arm11),专门负责处理通信协议,射频以及GPIO等,软件架构采用 AMSS, 另外一个是ARM11,用来处理多媒体,上层应用,以及其他的一些任务,运行的系统是 android 系统,这两个处理器之间通过共享内存的硬件方式来进行通信。

1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系

L4是一组计算机程序,是最初由Jochen Liedtke设计的微内核构架的操作系统内核,现在已经形成一个微内核家族。L4这个微内核系统由于其出色的性能和很小的体积而开始被计算机工业所认 知,被移植到了许多不同的硬件构架上。高通的 L4 提供了操作系统最基本的操作,是买别人的。

早期的操作系统绝大多数是 Monolithic Kernel, 意思是整个操作系统 - 包括Scheduling (调度), File system (文件系统), Networking (网络), Device

driver (设备驱动程序), Memory management (存储管理), Paging(存储页面管理) - 都在内核中完成.一直到现在广泛应用的操作系统,如UNIX,Linux,和Windows还大都是monolithic kernel操作系统.但随着操作系统变得越来越复杂(现代操作系统的内核有一两百万行C程序是很常见的事情),把所有这些功能都放在内核中使设计难度迅 速增加.

微内核是一个与Monolithic Kernel相反的设计理念.它的目的是使内核缩到最小,把所有可能的功能模块移出内核.理想情况下,内核中仅留下Address Space

Support(地址空间支持),IPC (Inter-Process Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。

REX 是在 L4 之上封装的服务,是一个抢占式,多任务的RTOS,所有的任务都以task的形式存在,REX提供包括任务创建,同步,互斥,计时器,中断控制等功能的 API,这里的task实际上就是我们的线程,每个 task对应着一个线程。REX维护一个task list(双向链表),始终运行高优先级的task。products里面所有的服务包括3g协议栈等都是以task的形式跑在rex之上的。

而Brew的话是运行的环境,跟Java 有点儿类似,相当于是一个虚拟机。

AMSS――高级的移动用户软件(Advanced Mobile Subscriber Software)技术,是一种新的软件架构,是对原来软件架构 DMSS 的升级。 AMSS源代码实际上是QC BREW(Binary Runtime Environment For Wireless)平台的的底层部分,去掉了为应用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平台基本上都是采用的这样的架构。

参考文档:

微内核操作系统及L4概述

/view/

MSM平台上的AMSS

/yili_xie/archive/2010/01/04/

1.2.2 选择合适的源代码以及工具 要编译出可供烧写使用的镜像文件需要三部分代码:

1) 获取经过高通打补丁的 android 源代码

2) 获取高通针对不同处理器的 vendor 源代码

3) 获取 modem 源代码

1.2.2.1 获取经过高通打补丁的android 源代码

网址:

/wiki/QAEP#Branch_Releases

/xwiki/bin/QAEP/eclair

/xwiki/bin/QAEP/eclair_caramel

/xwiki/bin/QAEP/froyo_almond

目前使用的 android 分支:

Android 2.1 版本 eclair

M7630AABBQMLZA1150 msm7630

eclair 2010年02月01日

M7630AABBQMLZA1200 msm7630 eclair

2010年03月30日

M7630AABBQMLZA2010 msm7630

éclair July 02, 2010

M7630AABBQMLZA1240 msm7630 eclair_caramel

2010年05月31日

M7630AABBQMLZA1250 msm7630 eclair_caramel

2010年06月15日

M7630AABBQMLZA1280 msm7630 eclair_caramel

2010年08月03日 M76XXTSNCJNLYA5340 msm7627 eclair_chocolate 2010年06月04

Android 2.2 版本 froyo

M7630AABBQMLZA2020

msm7630 froyo 2010年09月01

M76XXTSNCJNLYA6050 msm7627 froyo_almond

2010年10月29日

以下命令获取代码:

/xwiki/bin/QAEP/froyo_almond

ac_root=/home/shared/qualcomm

ac_root=/mnt/shared/qualcomm/

ac_date=20101105

ac_branch=froyo_almond

build_id=M76XXTSNCJNLYA6050

ac_xml=

mkdir -pv $ac_root/$ac_branch-$build_id-$ac_date

cd $ac_root/$ac_branch-$build_id-$ac_date

repo init -u git:///platform/ -b $ac_branch

-m $ac_xml

nohup repo sync&

1.2.2.2 获取高通针对不同处理器的vendor源代码

根据选择的 Android 源代码分支不同, vendor 代码的选择也是不一样的,BUILD ID 必须一致 M7630AABBQMLZA1150 对应

M7630AABBQMLZA1250 对应

M7630AABBQMLZA2020 对应 AMSS 7X30 LINUX RELEASE

2.0.20

M76XXTSNCJNLYA6050 对应 AMSS 7X27 LINUX REL 6.0.50

vendor 代码通过有效的高通帐号登录 HYPERLINK

"/login/"

/login/ 网站获取

1.2.2.3 获取 modem 源代码

根据硬件配置情况,选择不同的 BUILD ID, 然后根据 BUILD ID 选择相近的源代码

modem 代码通过有效的高通帐号登录 HYPERLINK

"/login/"

/login/ 网站获取

BUILD ID 是一组字母的组合,如:AAABQOLYM

以下分别对各个字段进行说明:

第三个字母 A 表示 LPDDR2 #USES_LPDDR2=yes

第三个字母 B 表示 LPDDR1

第六个字母 M 表示 Multimode

第六个字母 C 表示 CDMA

第六个字母 D 表示 JCDMA #相对于C多了:USES_UMTS=yes

USES_DSHDR_JCDMA_APIS=yes

第六个字母 O 表示 UMTS only #相对于C多了:USES_UMTS=yes

USES_SUPPORT_UMTS_GPS_PROTOCOLS=yes

#相对于C少了:USES_CDMA=yes USES_HDR=yes USES_REL_C=yes USES_CDMA2000=yes #USES_EXPORT_MCCMEID=yes USES_SUPPORT_CDMA_GPS_PROTOCOLS=yes

第7,8个字母为 AZ 表示 NADN boot

第7,8个字母为 LY 表示 eMMC boot #相对于AZ多了选项:

USES_SDCC_BOOT=yes USES_HSU_MS_FD_BOOT=yes

最后一个字母为 M 表示 modem

最后一个字母为 A 表示 app

以上为 7x30 平台的一些规律,具体参考文档,7227 参考相应的 release note:

<<80-VR192-1_E_AMSS_Linux_Software_Users_>>

第1个字母

第2个字母 F: 基于ffa参考设计 S: 基于surf的参考设计

第3个字母

第4个字母

第5个字母 K /J

K 相对于 J 多了以下选项

USES_HSU_CHG_BOOT=yes

USES_HSU_FAST_CHARGE=yes

USES_CHARGER=yes

USES_EBI1_TURBO_FFA=yes

第6个字母 O/ N / P

O表示只支持 UMTS(WCDMA)

------------------ USES_IPHC=yes

USES_PDCP=yes

USES_SUPPORT_UMTS_GPS_PROTOCOLS=yes

USES_UMTS=yes

-----------------

P表示只支持 CDMA/CDMA2000

USES_CDMA=yes

USES_CDMA2000=yes

USES_REL_C=yes

USES_SUPPORT_CDMA_GPS_PROTOCOLS=yes

USES_EXPORT_MCCMEID=yes

USES_HDR=yes

-----------------

N表示既支持 UMTS(WCDMA) 且支持 CDMA/CDMA2000

第7个字母

第8个字母

surf和ffa的区别

generally speaking surf have FPGA and don't have battery.

and FFA don't have FPGA but have battery.

msm7627_surf and msm7627_ffa and msm7627_7x_surf means different

hardware reference design. please check with your hardware engineer on which qualcomm hardware reference you use and then select the right build

command.

4.6 Build commands

To create an AMSS build, run the command script with the build ID matching

the build

configuration desired. The command scripts may be executed from the

build/ms subdirectory or

from the AMSS root directory using the full path to the command script

as in the following

examples:

./AMSS/products//build/ms/ – For SURF multimode

build

./AMSS/products//build/ms/ – For SURF UMTS only

build

./AMSS/products//build/ms/ – For SURF 1X only build

./AMSS/products//build/ms/ – For FFA multimode and

for reference only

以高通的开发板子为例,看如何选择源代码,通过 QPST 连接高通的开发板,我们可以看到他的配置信息如下:

高通 demo 版的配置情况:SURF-MSM7630 7X30A-AAABQMAZM-1200

从配置情况来看只有 HY11-N0216-3_1.2.00 HY11-N0216-4_1.2.20 满足要求 HY11-N0216-3_1.2.00/AMSS/products/7x30/build/ms/

HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/

后期我们要跟据实际情况来选择 BUILD ID,如我们的手机的配置情况为:

LPDDR2 ,WCDMA,eMMC 启动(NAND备选),那么modem 的BUILD ID为:

AAABQOLYM 或者 AAABQOAZM

AAABQOLYM

HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/

AAABQOAZM

HY11-N1122-1_1.2.20/AMSS/products/7x30/build/ms/ (NABD

boot 备选)

高通的Android第一人晓峰不建议我们第一次就用eMMC,而应该用Nand,目前只有HTC在用eMMC。高通在eMMC上面提供了参考代码,但是是未经过验证。终端厂商在使用过程中,一定会有很多问题需要自己解。

补充信息:

现在可能用到 BUILD ID 以及相应的 modem 和 vendor 源代码。

modem代码:

BUILD ID modem 源代码 modem镜像 说明文档

M7630AABBQMAZM1200

M7630AABBQMAZM1220

--

M7630AABBQMLYM1200

M7630AABBQMLYM1220 --

M7630AAABQCAZM1220

M7630AAABQCAZM1240

M7630AAABQCAZM1250

M7630AAABQCAZM1260

M7630AAABQCAZM1280

M7630AAABQCAZM1290

--

M7630AAABQMAZM1240

M7630AAABQMAZM1250

80-N0216-3_B_

5.3.2.1 LPDDR1 NAND boot

Multimode

5.3.2.2 LPDDR1 eMMC boot

Multimode

5.3.2.3 LPDDR1 eMMC boot UMTS

only

5.3.2.4 LPDDR1 NAND boot

JCDMA

HT11-N11 HT11-N11 HT11-N11 HT11-N14 HT11-N145.3.2.5 LPDDR2 NAND boot

Multimode

5.3.2.6 LPDDR2 eMMC boot

Multimode

80-N0216-4_A_

5.3.2 Build instructions and commands

5.3.2.1 LPDDR1 NAND boot

Multimode

5.3.2.2 LPDDR1 eMMC boot

Multimode

5.3.2.3 LPDDR1 eMMC boot UMTS

only

5.3.2.4 LPDDR1 NAND boot

JCDMA

5.3.2.5 LPDDR2 NAND boot

Multimode

5.3.2.6 LPDDR2 eMMC boot

Multimode

5.3.2.7 LPDDR2 eMMC boot UMTS

only

5.3.2.8 LPDDR2 NAND boot C2K

Only

5.3.2.9 LPDDR1 eMMC boot C2K

Only

5.3.2.10 LPDDR2 NAND boot

JCDMA

5.3.2.11 LPDDR2 NAND boot UMTS

only

80-N1665-1_B_M7630AAABQ_

5.3.2 Build instructions and commands

5.3.2.1 LPDDR1/LPDDR2 eMMC boot Multimode

5.3.2.2 LPDDR1/LPDDR2 eMMC boot UMTS only

5.3.2.3 LPDDR1/LPDDR2 eMMC boot C2K only

5.3.2.4 LPDDR2/LPDDR1 NAND boot Multimode

5.3.2.5 LPDDR1/LPDDR2 NAND boot JCDMA

5.3.2.6 LPDDR2/LPDDR1 NAND boot C2K only

5.3.2.7 LPDDR2/LPDDR1 NAND boot UMTS only

The same build ID will now work for LPDDR1 as well as LPDDR2.

从以上的发布信息,只有 LPDDR2 和 LPDDR1 不同的情况下可以使用同一个

build ID。

对于我们的硬件配置情况(LPDDR2 eMMC boot UMTS only) 可以使用的编译命令文件为:

选择 modem 代码 M7630AAABQMAZM1250

如果是支持 BREW 平台,通常多下面的选项:

USES_BREW_4.0=yes

USES_BREW=yes

USES_BREW_APPMGR=yes

或者 USES_BREW_USB_HID=yes

没有 USES_DIAG_SMD_SUPPORT=yes

项目 PD1007

OEM/Target Equipment (FeaturePhone,Smartphone,Datacard): Smartphone

Anticipated Launch Date: April 1 2011

Target market (such as China Telecom): China Open market

Current Software (such as Q6270BKPRZL1505): froyo-M76XXTSNCJNLYA7010

Bluetooth IC/Module (vendor name and module if support BT): BTS4025

WLAN IC/Module (vendor and module if support WLAN ):WCN1312

Chipset (such as QSC6270):MSM7227-1

RF chipset (such as RGR6240):RTR6285

PMIC chipset (such as PM7540):PM7540

WCMDA Supported Bands (900,1900,2100…. if support WCDMA):2100

CMDA Supported Bands (450,850,1900,2100… if support CDMA ):not suport

OS (Brew,BMP,Android,WM,ThinUI(no UI)…):android froyo

OS version (Android Donuts…): android froyo

1.2.2.3.1 高通 modem 源代码编译前的修正

从高通获取的源代码直接编译会存在一些问题,以下为可能的问题以及解决方法:

1) 为相应的脚本加上编译选项

vim ./AMSS/products/7x30/build/ms/

加上: BUILD_UNIX=yes

2) 如果编译过程出现 .pl 文件没有执行权限而退出,那么为工程下面所有的

pl 文件加上可执行属性,命令:

find ./ -name "*.pl" |xargs chmod 755

3) 无法找到需要的 pl 脚本解析器

vim ./AMSS/products/7x30/tools/build/

修改

#!/pkg/perl/5.6.1/bin/perl -w

#!/usr/bin/perl -w

4) 如果出现错误:

"AMSS/products/7x30/core/bsp/build/data/", line 14

IndentationError: expected an indented block

修改文件:./AMSS/products/7x30/core/bsp/build/scripts/ 内容:

#if ($line =~ /^# makefile (from/)

为:

if ($line =~ /^# makefile /)

原因分析:

会对编译过程的中间信息 :

...

line=# makefile (from'',line 363)

line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc

... 等信息进行解析,由于我们使用的是中文系统,所以以上内容变为:

line=# makefile (从'',行 363)

line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc

所以导致:

#if ($line =~ /^# makefile (from/) 判断条件为为 false

无法正确生成 ,python 在解析该文件的时候认为存在语法错误。

在 modem 代码 M7630AABBQMAZM2020()中开始使用

产生

./AMSS/products/7x30/core/bsp/build/data/ 文件,所以修改文件

在脚本中需要加入以下内容:

incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/

if test -f $incpathsxxx_py; then

PERL=`which /usr/bin/perl`

sed -i "s/(from//g" $incpathsxxx_py

fi

./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c

#DalAdieCodecDbInternal.h 改为:

#include "DALAdieCodecDbInternal.h"

5) 如果出现 make: execvp: ../../../../platform/cs/bin/cifc: Permission

denied 错误,执行以下命令: chmod -R 755 AMSS/platform/cs/bin/*

1.2.3 建立 Android 开发环境

(略)

curl /repo >~/bin/repo

chmod a+x ~/bin/repo

export PATH=~/bin:$PATH

1) 安装基本软件

sudo apt-get install git-core gnupg flex bison gperf build-essential zip

curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386

lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev

lib32readline5-dev lib32z-dev

2) 安装 sun-java5-jdk

ubuntu 下通过命令: sudo apt-get install sun-java5-jdk 将会安装下面的包

sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre

sun-java5-plugin

如果ubuntu 发布版本中没有 sun-java5-jdk 那么

sudo vim /etc/apt/

#for sun-java5-jdk

deb /ubuntu/ jaunty multiverse

deb /ubuntu/ jaunty-updates multiverse

sudo apt-get update

sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get ,那么用手动安装:

sudo mount -t nfs 172.20.127.15:/home/shared /mnt

sudo dpkg -i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*

3) 配置usb

cd /etc/udev/rules.d/

sudo vi

# adb single interface device

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1",

SYSFS{idProduct}=="d00d",

MODE="0664", GROUP="plugdev"

# adb composite interface device

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1",

SYSFS{idProduct}=="deed",

MODE="0664", GROUP="plugdev"

# Sooner low-level bootloader

BUS=="usb", SYSFS{idVendor}=="0bb4", SYSFS{idProduct}=="0a51",

MODE="0664",GROUP="plugdev"

sudo /etc/init.d/udev restart

1.2.4 建立 modem 开发环境

与android 源代码不同,modem 编译工具使用的是 RVDS ,实际上只用到其中的

RVCT 编译器, 高通不提供该工具,我们必须从arm公司获取相应的授权,RVDS

是 ADS 的升级版本,从 ADS 1.2 开始到 RVDS 3.1 我们公司都有其授权,按照高通的要求我们目前必须使用 RVDS 2.2 并且使用他的 349 patch。

RVDS 2.2 安装以及使用步骤如下: 1). RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目录

sudo mount -t nfs 172.20.127.15:/home/shared/ /mnt

cd /mnt/qualcommon/RVDS-2.2/

linux下rvds2.2的安装程序为:

./rvds2.2_linux-pentium/

执行以上命令,按照默认步骤安装,安装路径为:~/ARM

注意事项:

安装过程如果出现错误:

..................sfiedLinkError:

/tmp/ismp001/: libstdc++-.3:

cannot open shared object file: No such file or directory

从网上下载 libstdc++-.3 拷贝到 /usr/lib 目录 ,或者从下面地址获取:

172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-.3

工具的安装通过脚本进行了简化,具体过程请参考文档:

80-N0216-2_A_

80-VR881-7_B_

80-VR192-1_C_AMSS_Linux_Software_Users_

80-VR192-1_D_AMSS_Linux_Software_Users_

2) 安装高通指定的 593 patch

cd /mnt/qualcommon/RVDS2.2/下执行命令:

./

目前版本只支持 32 位的系统

1.2.4.1 补充

vim ./AMSS/products/7x30/core/bsp/build/scripts/ 定义了工作线程

#num_jobs = num_cpu * 2 modified by mhf

num_jobs = 2

if num_jobs < 4:

num_jobs = 2

if num_jobs > 8:

num_jobs = 8

ion('num_jobs', num_jobs)

―――――――

获取 RVDS

官方网站下载评估版本

/browse

/products/tools/

/download/eval_

/userguides/Web_Licensing_Portal_User_

(Licensing 需要通过 host id 注册)

―――――――

1.2.4.1.1 获取 licenses

RVDS 的 licenses 从其官方网站获取

/licensing/

/licensing/ /support/man/docs/license/license_sul_

入口 /licensing/ 合法用户登录

用户名:***************** 密码: Mohuifu7737

入口 /licensing/ 输入产品的序列号

然后按照步骤一步步操作即可

Server Host Id Type 类型选择 ETHERNET

Server Host Id 填写需要绑定主机的MAC地址 00:1a:64:0a:ba:70

最后保存 文件,文本格式。

1.2.4.1.2 Flex 简单使用指南

FLEXlm是应用广泛的License管理工具,它以使软件License能够在网上浮动而出名。浮动的License有利于软件的使用和对 License的管理,这使得用户能够高效地使用有效的许可,并使管理者能够控制允许使用它的节点。由于有大约1500厂商使用FLEXle管理 lICENSE,所以CAD系统管理人员极有可能要同时安装和管理来自不同厂商的License或同一厂商多个产品的License文件。可采取以下方法 避免产生冲突:

(1)用一个服务器运行一个Lmgrd(License文件的后台管理程序)和多个License文件;

(2)用一个服务器运行多个Lmgrd和License文件;

(3)运用多个服务器节点,每个服务器运行单独的Lmgrd和License文件。

第一种选择主要造用于高版本的Lmgrd,V6之前和FLEXlm,每个Lmgrd只能管理一个License文件;

第二种选择,将使用一台服务器,但需要运行多个Lmgrd;第三种选择,必须使用多个License服务器。

一、服务器端设定 e文件的设定

在使用FLEXlm进行管理的License文件中一般有SERVER行,它通过SERVER行的hostname和hostID定义License服务器。

SERVER this_host 0050BB0F402 27000

hostname hostID post

2.服务方式的选择

(1)一个服务器运行一个Lmgrd和多个License文件如果多个License文件具有相同的hostID,则可以通过修改hostname进行合 并。合并时,首先将多个License文件加到一个文件中,然后修改SERVER行,并且只保留一个SERVER行。对于Windows NT操作系统,应在各License的默认位置保存一个合并后的备份,这样每个软件将在其默认位置找到License信息,从而避免了对

LM_LICENSE_FILE的设定;对于UNIX操作系统,可以建立一个默认位置到License存放位置和Link。合并后的License文件, 就可以使用同一个Lmgrd。

(2)一个服务器运行一个Lmgrd和一个别License文件如果HostID不一样,则这些License服务只能运行于不同的服务器节点上,并且License不能合并。可以选择使用一个服务器运行一个Lmgrd和License文件。

(3)一个服务器运行多个Lmgrd和License文件如果多个License未进行合并,可以通过在同一台机器上启动多个Lmgrd,每个 Lmgrd管理一个License文件。使用多个Lmgrd管理多个License文件对服务器的性能并没有明显影响。如果License是由不同版本的 FLEXlm产生的,一般是新版本可以管理旧版本的License文件。所以应使用最新的Lmgrd和Vendor daemon。另外,当用一个服务器的多个Lmgrd管理多个License文件时,应该注意任何二个License文件的post都不能一样,并且对于 每个License而言,应选用合造的Lmgrd。

二、客户端设定

当使用客户端应用程序时(a Licensedapplication),可以通过在系统的环境变量中设定LM_LICENSE_FILE,使Application能够指向不同服务 器上的License文件。如果要使a Licensed application使用不同服务器都有单独的一个License文件),客户端应将需要用到的License文件拷贝到本机目录下,并指定 LM_LICENSE_FILE环境变量。UNIX: %setenv LM_LICENSE_FILE lfpath1 :

lfpath2 :…… : lfpathN Windows: lfpath1 ;lfpath2:…… ;lfpathN LfpathN为第N个License的路径;UNIX下路径间用":"隔开;Windows/NT下路径间使用";"隔开; 这样,每个Licensed aplication在启动时将依次查询LM_LICENSE_FILE中所指定的License文件,并向相应的License服务器申请许可,以使用 户能从所列的服务器得到许可。LM_LICENSE_FILE也可以使用各License文件中所指定的"post@hostname"。下面以 Windows NT为例介绍多个FLEXlm的安装。

三、同一机器上多个FLEXlm License Server的安装

(1) 以Administrator身分登录;

(2)在C盘建C:FLEXlm目录,并拷贝相关文件到其下;

(3)在C:FLEXlm下建立欲安装License Server的软件目录,放置各软件的License文件,Daemon和Daemon所需的动态连接库;

(4)修改和SERVER行和DAEMON的位置,并启动FLEXlm License

Manager。

(5)在Setup修改Service Name,输入造当名称,以区别是何种License服务;利用Browse选择合适和对应和并指定和放置路径;

(6)选中"StartServer at Power-Up"与"Use NT Services",这样下次启动机器时,将自动启动该Li-cense服务;

(7)点击Control按钮检查Service Name是否与设定名称相同,如果不同,回到"Setup"重新选择Service Name;如果一样,点击"Start"启动该Li-cense

Server;点击"Status"检查Licevse Server启动情况,若出现Server_name:

License server UP (MASTER),表示License Server启动成功;

(8)安装另外的License Server:可依上述(3)~(7)重新执行一次即可;

(9)切换不同License Server:在"Setup"中选择适当的"Service Name",然后启动或停止相应的License服务;

(10)移除License Server:在"Setup"选择适当的"Service Name",然后按"Remove"即可。

1.2.4.1.3 启动 license 服务器

#!/bin/bash ac_PATH=~/ARM/Utilities/FLEXlm/9.2/release/linux-pentium/

PATH=${ac_PATH}:${PATH}

export PATH

LICENSE_FILE=~/ARM/licenses/

LOG=~/ARM/licenses/

case "$1" in

start)

lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2

echo -n " lmgrd"

;;

stop)

ac_pid=`pidof lmgrd`

kill $ac_pid 2>> ${LOG} 1>&2

ac_pid=`pidof armlmd`

kill $ac_pid 2>> ${LOG} 1>&2

#lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2

;;

*)

echo "Usage: `basename $0` {start|stop}" 1>&2

exit 64

;;

esac

1.2.4.1.4 license 没有办法从服务器获取的几种情况 1.需要关闭网络防火墙

2.在客户端需要配置license服务器的服务端口

3.要求在同一个局域网内

sudo ufw disable

防火墙在系统启动时自动禁用

sudo iptables -A OUTPUT -p tcp --dport 8224 -j ACCEPT

修改/etc/sysconfig/iptables 文件,添加以下内容:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j

ACCEPT

1.2.4.1.5 破解 rvds 的license

第 1 章 欢迎使用 FLEXlm

在linux下创建一个虚拟网卡

/cgl/%E8%BD%AF%E4%BB%B6/%E5%A4%9A%E5%AA%92%E4%BD%93%E5%88%B6%E4%BD%9C%E8%BD%AF%E4%BB%B6/flash/Autocad%202002/Netsetup/support/AdLM/Docs/FlexUser/#895035

1.2.5 在高通开发板上烧录文件系统

通过设置模块完成系统,应用程序等个性化设置。

烧录之前必须了解获取硬件配置情况

2. 由硬件配置情况到高通网站选择相应的镜像文件

3. 烧录镜像文件到高通demo开发板

4. 从高通网站下载源代码编译相应的镜像文件进行验证

1. 烧录之前必须了解获取硬件配置情况 高通 demo 板的配置情况:SURF-MSM7630 7X30A-AAABQMBZM-1090 或者

7X30A-AAABQMAZM-1200

以上信息可以通过 QPST 连接高通的demo开发板获得

2. 由硬件配置情况到高通网站选择相应的镜像文件

要给高通的开发板烧录文件系统,必须有以下的镜像文件:

dsp相关的

AMSS modem binary image

设备启动的装载程序

OS boot loader binary image

分区表的二进制文件

应用程序的启动文件,如果是 eMMC 启动对应文件

emmc_

ap 端的linux 内核

android 文件系统的 system 分区

android 文件系统的 data 分区

其中 ,,,, 可以从以下目录获取

unzip /home/shared/qualcommon/

unzip /home/shared/qualcommon/

HK11-N0216-3_1.2.00/AAABQMAZ/

HK11-N0216-4_1.2.20/AAABQMAZ/

,,, 必须来自eclair源代码

3. 烧录镜像文件到高通demo开发板 怎样烧写文件请参考工具使用文档

通过fastboot烧写

参考文档:

80-VR192-1_D_AMSS_Linux_Software_Users_

6.2 USB setup in Linux

6.2.1 Using Fastboot in Linux

4. 从高通网站下载源代码编译相应的镜像文件进行验证

高通有两个cpu,他们分别跑不同的系统,应用程序(ap)端是android系统,modem

端是高通自己的系统。

======

android 系统目前使用的是 eclair 版本,此版本来自标准的 android 2.1

eclair,高通在上面加了自己的补丁,代码网址:

/wiki/QAEP#Branch_Releases

/wiki/QLBEP

下载 M7630AABBQMLZA1150 分支:

February 1,

2010 M7630AABBQMLZA1150 msm7630 eclair

命令如下:

mkdir -pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201

cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201

repo init -u git:///platform/ -b eclair -m

nohup repo sync 代码下的 vendor/qcom-proprietary 来自包

以上两部分代码已经下载并且合并,共享在:

172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150

---------------

编译 eclair 代码

svn co

172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150

cd eclair-M7630AABBQMLZA1150

cd eclair-M7630AABBQMLZA1150$

. ./

. ./

=======

modem代码从高通网站:/login/ 上获取

我们目前使用的是:

共享在:

172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220

-------

编译 modem 代码

svn co

172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220

cd modem-M7630AABBQMAZM1220 . ./

. ./make

========

编译结果分别如下:

------------

其中 ,,,, 位于以下目录:

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/

------------

,,, 位于以下目录:

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/

./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/3 ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/3

------------

eMMC 启动使用的是 ext3 文件系统,需要使用镜像 3

3

补充说明:

文件的原始数据来自配置文件:

./AMSS/products/7x30/tools/jsdcc/partition_load_pt/

1.3 高通平台,android和 modem 编译流程分析

android 代码编译流程分析

modem 代码编译流程分析

1.3.1 android代码编译流程分析

1. 从服务器下载 android 源码到当前目录

smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/

svn co

172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/

cd froyo_almond-M76XXTSNCJNLYA6050/

. ./ 设置环境变量

Setting Environment ...

通常情况下 generic 用于编译模拟器版本

Options are:

1. generic 2. msm7627_surf

3. msm7627_ffa

4. tiny-system

====从以上列表中选择====

Which would you like? [1]

烧录的镜像文件

来自 android 源码

的主要功能是装载 linux 内核,通过 linux 的引导来完成

android 系统的加载,

被烧写在相应的分区,它的加载由 来完成,

程序来自 modem。

7x30 7x27 系列 appsboot 不一样,7x30 的 是 7x27

两个文件的合并

1) 生成过程解析

2) 生成过程解析,怎样手动生成

1.3.1.1 编译工具检测

make out/target/product/msm7630_surf/

1.3.1.1.1

1.3.1.2 生成过程解析

make out/target/product/msm7630_surf/

make out/target/product/msm7630_surf/nandwrite

make out/target/product/msm7630_surf/emmc_ 分别执行:

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1

生成 nandwrite

===============

#build nandwrite as a part of Android Build

TARGET_NANDWRITE :=

$(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk

NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite

nandwrite_clean:

$(hide) rm -f $(TARGET_NANDWRITE)

$(hide) rm -rf $(NANDWRITE_OUT)

$(NANDWRITE_OUT):

mkdir -p $(NANDWRITE_OUT)

$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)

@echo $(TARGET_PRODUCT)_nandwrite $(MAKE) -C bootable/bootloader/lk

BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite

BUILD_NANDWRITE=1

================

vim ./bootable/bootloader/lk/makefile:98:

TARGET :=

msm7630_surf #./bootable/bootloader/lk/project/msm7630_

PLATFORM :=

msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/

msm7x30

msm7630_

msm7630_surf_nandwrite

=============================

include project/$(PROJECT).mk

include target/$(TARGET)/

include target/$(TARGET)/tools/makefile

include platform/$(PLATFORM)/

include arch/$(ARCH)/

include platform/

include target/

include kernel/

include dev/

include app/

... include make/

...

include make/

========================

vim bootable/bootloader/lk/make/

INCMODULES := $(MODULES)

$(info including $(INCMODULES))

include $(addsuffix /,$(INCMODULES))

展开为:

./bootable/bootloader/lk/app/nandwrite/

./bootable/bootloader/lk/dev/fbcon/

./bootable/bootloader/lk/dev/keys/

./bootable/bootloader/lk/lib/debug/

./bootable/bootloader/lk/lib/heap/

./bootable/bootloader/lk/lib/libc/

./bootable/bootloader/lk/lib/ptable/

========================

bootable/bootloader/lk/make/:29:

include arch/$(ARCH)/

./bootable/bootloader/lk/project/msm7630_surf_ 中有:

MODULES += app/nandwrite

./bootable/bootloader/lk/platform/msm7x30/中有: MODULES += dev/fbcon

./bootable/bootloader/lk/kernel/ 中有:

MODULES += lib/libc lib/debug lib/heap

./bootable/bootloader/lk/target/msm7630_surf/ 中有:

MODULES += dev/keys lib/ptable

所以:

MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc

lib/ptable

因为

ifeq ($(BUILD_NANDWRITE), 1)

APPSBOOTHDR_FILES :=

else

out/host/linux-x86/bin/acp -fpt

out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite

25780 184 34000 59964 ea3c ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

arm-eabi-objcopy -O

binary ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/ generating

listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

symbols: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating size

map: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

make[2]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

make[1]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

target Prebuilt: (out/target/product/msm7630_surf/nandwrite)

make -C bootable/bootloader/lk

BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite

msm7630_surf_nandwrite BUILD_NANDWRITE=1

make[2]: 正在进入目录

`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk`

msm7630_surf_nandwrite

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1

==》生成 mkheader 工具

gcc target/msm7630_surf/tools/mkheader.c -o

target/msm7630_surf/tools/mkheader

$(BUILDDIR)/: $(LOCAL_DIR)/

@echo generating $@

@$(MKDIR)

$(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/"

< $< > $@

generating ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

compiling arch/arm/crt0.S compiling arch/arm/crt0.S

。。。compiling lib/ptable/ptable.c

compiling lib/ptable/ptable.c

vim bootable/bootloader/lk/platform/msm7x30/

-----

LINKER_SCRIPT += $(BUILDDIR)/

include platform/msm_shared/

-----

./build/core/product_:177:TARGET_DEVICE :=

$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)

./build/core/:152:OUT_DIR := $(TOPDIR)out

./build/core/:159:TARGET_OUT_ROOT_release :=

$(OUT_DIR)/target

./build/core/:161:TARGET_OUT_ROOT :=

$(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))

./build/core/:178: TARGET_PRODUCT_OUT_ROOT :=

$(TARGET_OUT_ROOT)/product

./build/core/:184:PRODUCT_OUT :=

$(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)

build/core/:200:TARGET_OUT_INTERMEDIATES :=

$(PRODUCT_OUT)/obj

bootable/bootloader/lk/:4:BOOTLOADER_OUT :=

$(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ

bootable/bootloader/lk/makefile:32:BUILDDIR :=

$(BOOTLOADER_OUT)/build-$(PROJECT) bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

所以:

TARGET_PRODUCT_OUT_ROOT=out/target/product/

PRODUCT_OUT=out/target/product/msm7630_surf/

TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/

BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/

所以:

BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf

所以:

OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

make -C bootable/bootloader/lk

BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf

bootable/bootloader/lk/makefile

OUTELF := $(BUILDDIR)/lk

./bootable/bootloader/lk/make/

$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)

@echo linking $@

$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)

$(LIBGCC) -o $@

vim ./bootable/bootloader/lk/

TARGET_NANDWRITE :=

$(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk

$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)

@echo $(TARGET_PRODUCT)_nandwrite

$(MAKE) -C bootable/bootloader/lk

BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite

BUILD_NANDWRITE=1

BOOTLOADER_EMMC_OUT :=

$(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ

vim ./bootable/bootloader/lk/make/

$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)

@echo linking $@

$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)

$(LIBGCC) -o $@

bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/

bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

./lk/platform/msm7x30/:23:LINKER_SCRIPT +=

$(BUILDDIR)/

==》链接 lk

linking ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

linking ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

generating

image: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/

generating

image: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

text data bss dec hex filename

29592 7388 42720 79700 13754 ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

text data bss dec hex filename

25780 184 34000 59964 ea3c ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

==》以 binary 格式,把文件

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 输出到:

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ arm-eabi-objcopy -O binary

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

==》

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

生成...

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

make[1]:正在离开目录 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk

==》

make -C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ

ARCH=arm CROSS_COMPILE=arm-eabi- msm7630-perf_defconfig

make[1]: 正在进入目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel

generating

symbols: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

generating size

map: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/

mkheader 从 生成 语法: mkheader

然后把 和 合并为文件 ,删除

文件

大小 40K

./bootable/bootloader/lk/target/msm7630_surf/tools/mkheader

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ out/target/product/msm7630_surf/

合并 out/target/product/msm7630_surf/

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ 为:

out/target/product/msm7630_surf/

cat out/target/product/msm7630_surf/

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/ > out/target/product/msm7630_surf/

删除:out/target/product/msm7630_surf/

==================================================

1.3.1.3 生成过程解析,怎样手动生成

包括两个部分: kernel 和 ramdisk ,通过命令:

make out/target/product/msm7630_surf/ showcommands

会自动生成 kernel 和 ramdisk,然后把两者合并制作成烧写的镜像文件:

kernel 为

out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage

或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷贝

编译内核之前必须获取一个默认的配置文件 .config ,此配置文件可以生成,或者来自默认配置,高通中 msm7630_surf 的 默认配置文件名为: msm7630-perf_defconfig 在文件:

vendor/qcom/msm7630_surf/:45 中通过:

KERNEL_DEFCONFIG := msm7630-perf_defconfig 进行了指定。

我们可以通过命令:

make -j3 ARCH=arm CROSS_COMPILE=arm-eabi- kernel showcommands

或者通过如下命令一步步完成:

1. 获取默认的内核配置并生成.config 的命令如下:

make -C kernel

O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm

CROSS_COMPILE=arm-eabi- msm7630-perf_defconfig

-C kernel 告诉 make 进入 kernel 工作目录,到其下面寻找 makefile

文件

O 内核编译的中间文件以及编译结果等都存储在该目录下,此做法的好处是不会在kernel源代码目录下生成垃圾文件

ARCH=arm 告诉系统到 ./kernel/arch/$ARCH/configs/ 目录下找文件

msm7630-perf_defconfig,生成的.config 保存在:

out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config

2. 手动编译内核

make -C kernel

O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/

3. 如果需要配置内核,使用下面的命令

make kernelconfig

他首先会进入 menuconfig 界面,用户配置完成以后,会把修改后的配置文件$(KERNEL_OUT)/.config 更新为默认的配置文件

cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config

kernel/arch/arm/configs/msm7627-perf_defconfig

kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)

发布评论

评论列表 (0)

  1. 暂无评论