人人范文网 范文大全

Qualcomm平台android开发总结

发布时间:2020-03-03 12:38:48 来源:范文大全 收藏本文 下载本文 手机版

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 appsboot.mbn 生成过程解析.22

1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img 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 ametup 36

1.3.3.3.4 amlinkaddre 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 env.BinBuilder 过程解析.41 1.3.3.5.1.1.2.3 env.MbnBuilder 过程解析.41

1.3.3.5.1.1.2.4 env.MbnDummyBuilder 过程解析.42 1.3.3.5.1.1.2.5 fsbl.mbn 生成过程解析.43 1.3.3.5.1.1.2.6 dbl.mbn 生成过程解析.43

1.3.3.5.1.1.2.7 AMSS_AABBQOLYM.mbn 生成过程解析.43 1.3.3.5.1.1.2.8 adsp.mbn 生成过程解析.43 1.3.3.5.1.1.2.9 osbl.mbn 生成过程解析.44

1.3.3.5.1.1.2.10 enandprg_AABBQOLYM.mbn 生成过程解析.44 1.3.3.5.1.1.2.11 nandprg_AABBQOLYM.mbn 生成过程解析.45 1.3.3.5.1.1.2.12 emmcbld.mbn 生成过程解析.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_AABBQOLYM.mbn生成过程解析.47 1.3.3.8.2 am.mbn 生成过程解析.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 aert 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/ MSM平台上的AMSS http://blog.csdn.net/yili_xie/archive/2010/01/04/5129469.aspx

1.2.2 选择合适的源代码以及工具 要编译出可供烧写使用的镜像文件需要三部分代码: 1) 获取经过高通打补丁的 android 源代码 2) 获取高通针对不同处理器的 vendor 源代码 3) 获取 modem 源代码

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

https://www.daodoc.com/wiki/QAEP#Branch_Releases https://www.daodoc.com/xwiki/bin/QAEP/eclair https://www.daodoc.com/xwiki/bin/QAEP/eclair_caramel https://www.daodoc.com/xwiki/bin/QAEP/froyo_almond

目前使用的 android 分支: Android 2.1 版本 eclair

M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 2010年02月01日

M7630AABBQMLZA1200 msm7630 eclair M7630AABBQMLZA1200.xml 2010年03月30日

M7630AABBQMLZA2010 msm7630 éclair M7630AABBQMLZA2010.xml July 02, 2010 M7630AABBQMLZA1240 msm7630 eclair_caramel M7630AABBQMLZA1240.xml 2010年05月31日

M7630AABBQMLZA1250 msm7630 eclair_caramel M7630AABBQMLZA1250.xml 2010年06月15日

M7630AABBQMLZA1280 msm7630 eclair_caramel M7630AABBQMLZA1280.xml 2010年08月03日 M76XXTSNCJNLYA5340 msm7627 eclair_chocolate M76XXTSNCJNLYA5340.xml 2010年06月04 Android 2.2 版本 froyo

M7630AABBQMLZA2020 msm7630 froyo M7630AABBQMLZA2020.xml 2010年09月01 M76XXTSNCJNLYA6050 msm7627 froyo_almond M76XXTSNCJNLYA6050.xml 2010年10月29日

以下命令获取代码:

https://www.daodoc.com/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=M76XXTSNCJNLYA6050.xml

mkdir -pv $ac_root/$ac_branch-$build_id-$ac_date cd $ac_root/$ac_branch-$build_id-$ac_date repo init -u git://codeaurora.org/platform/manifest.git -b $ac_branch -m $ac_xml nohup repo sync&

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

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

M7630AABBQMLZA1150 对应 HY11-VR881-5.zip M7630AABBQMLZA1250 对应 HY11-VR881-11.zip M7630AABBQMLZA2020 对应 HY11-N1627-3.zip AMSS 7X30 LINUX RELEASE 2.0.20 M76XXTSNCJNLYA6050 对应 HY11-N1188-6.zip AMSS 7X27 LINUX REL 6.0.50 vendor 代码通过有效的高通帐号登录 HYPERLINK "https://support.cdmatech.com/login/" https://support.cdmatech.com/login/ 网站获取

1.2.2.3 获取 modem 源代码

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

modem 代码通过有效的高通帐号登录 HYPERLINK "https://support.cdmatech.com/login/" https://support.cdmatech.com/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: > 第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/MSNCJNLYM.cmd – For SURF multimode build ./AMSS/products//build/ms/MSNCJOLYM.cmd – For SURF UMTS only build ./AMSS/products//build/ms/MSNCJPLYM.cmd – For SURF 1X only build ./AMSS/products//build/ms/MFNCKNLYM.cmd – 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/AAABQMAZM.cmd HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AAABQMAZM.cmd 后期我们要跟据实际情况来选择 BUILD ID,如我们的手机的配置情况为: LPDDR2 ,WCDMA,eMMC 启动(NAND备选),那么modem 的BUILD ID为: AAABQOLYM 或者 AAABQOAZM AAABQOLYM HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQOLYM.cmd AAABQOAZM HY11-N1122-1_1.2.20/AMSS/products/7x30/build/ms/AAABQOAZM.cmd (NABD boot 备选) 高通的Android第一人晓峰不建议我们第一次就用eMMC,而应该用Nand,目前只有HTC在用eMMC。高通在eMMC上面提供了参考代码,但是是未经过验证。终端厂商在使用过程中,一定会有很多问题需要自己解。

补充信息:

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

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

M7630AABBQMAZM1200 HY11-N0216-3.zip HK11-N0216-3.zip HT11-N0216-3.zip M7630AABBQMAZM1220 HY11-N0216-4.zip HK11-N0216-4.zip HT11-N0216-4.zip -- M7630AABBQMLYM1200 HY11-N0723-1.zip HK11-N0723-1.zip HT11-N0723-1.zip M7630AABBQMLYM1220 HY11-N0723-2.zip HK11-N0723-2.zip HT11-N0723-2.zip -- M7630AAABQCAZM1220 HY11-N1122-1.zip HK11-N1122-1.zip HT11-N1122-1.zip M7630AAABQCAZM1240 HY11-N1122-2.zip HK11-N1122-2.zip HT11-N1122-2.zip M7630AAABQCAZM1250 HY11-N1122-3.zip HK11-N1122-3.zip HT11-N1122-3.zip M7630AAABQCAZM1260 HY11-N1122-4.zip HK11-N1122-4.zip HT11-N1122-4.zip M7630AAABQCAZM1280 HY11-N1122-5.zip HK11-N1122-5.zip HT11-N1122-5.zip M7630AAABQCAZM1290 HY11-N1122-6.zip HK11-N1122-6.zip HT11-N1122-6.zip -- M7630AAABQMAZM1240 HY11-N1496-2.zip HK11-N1496-2.zip HT11-N1496-2.zip M7630AAABQMAZM1250 HY11-N1496-3.zip HK11-N1496-3.zip HT11-N1496-3.zip

80-N0216-3_B_M7630AABBQMAZM1200.pdf 5.3.2.1 LPDDR1 NAND boot Multimode AABBQMAZM.cmd 5.3.2.2 LPDDR1 eMMC boot Multimode AABBQMLYM.cmd 5.3.2.3 LPDDR1 eMMC boot UMTS only AABBQOLYM.cmd 5.3.2.4 LPDDR1 NAND boot JCDMA AABBQDAZM.cmd 5.3.2.5 LPDDR2 NAND boot Multimode AAABQMAZM.cmd 5.3.2.6 LPDDR2 eMMC boot Multimode AAABQMLYM.cmd

80-N0216-4_A_M7630AABBQMAZM1220.pdf 5.3.2 Build instructions and commands 5.3.2.1 LPDDR1 NAND boot Multimode AABBQMAZM.cmd 5.3.2.2 LPDDR1 eMMC boot Multimode AABBQMLYM.cmd 5.3.2.3 LPDDR1 eMMC boot UMTS only AABBQOLYM.cmd 5.3.2.4 LPDDR1 NAND boot JCDMA AABBQDAZM.cmd 5.3.2.5 LPDDR2 NAND boot Multimode AAABQMAZM.cmd 5.3.2.6 LPDDR2 eMMC boot Multimode AAABQMLYM.cmd 5.3.2.7 LPDDR2 eMMC boot UMTS only AAABQOLYM.cmd 5.3.2.8 LPDDR2 NAND boot C2K Only AAABQCAZM.cmd 5.3.2.9 LPDDR1 eMMC boot C2K Only AABBQCLYM.cmd 5.3.2.10 LPDDR2 NAND boot JCDMA AAABQDAZM.cmd 5.3.2.11 LPDDR2 NAND boot UMTS only AAABQOAZM.cmd

80-N1665-1_B_M7630AAABQ_AZM1240.pdf 5.3.2 Build instructions and commands 5.3.2.1 LPDDR1/LPDDR2 eMMC boot Multimode AABBQMLYM.cmd 5.3.2.2 LPDDR1/LPDDR2 eMMC boot UMTS only AABBQOLYM.cmd 5.3.2.3 LPDDR1/LPDDR2 eMMC boot C2K only AABBQCLYM.cmd 5.3.2.4 LPDDR2/LPDDR1 NAND boot Multimode AAABQMAZM.cmd 5.3.2.5 LPDDR1/LPDDR2 NAND boot JCDMA AABBQDAZM.cmd 5.3.2.6 LPDDR2/LPDDR1 NAND boot C2K only AAABQCAZM.cmd 5.3.2.7 LPDDR2/LPDDR1 NAND boot UMTS only AAABQOAZM.cmd The same build ID will now work for LPDDR1 as well as LPDDR2.从以上的发布信息,只有 LPDDR2 和 LPDDR1 不同的情况下可以使用同一个 build ID。

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

AAABQOLYM.cmd AABBQOLYM.cmd 选择 modem 代码 M7630AAABQMAZM1250 HK11-N1496-3.zip

如果是支持 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/xxxxxx.cmd 加上: BUILD_UNIX=yes

2) 如果编译过程出现 .pl 文件没有执行权限而退出,那么为工程下面所有的 pl 文件加上可执行属性,命令:

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

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

vim ./AMSS/products/7x30/tools/build/depgen.pl 修改

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

#!/usr/bin/perl -w

4) 如果出现错误:

"AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmlym.py", line 14 IndentationError: expected an indented block 修改文件:./AMSS/products/7x30/core/bsp/build/scripts/genpaths.pl 内容:

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

if ($line =~ /^# makefile /) 原因分析:

genpaths.pl 会对编译过程的中间信息 : ...line=# makefile (from'incpaths.min',line 363) line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc ...等信息进行解析,由于我们使用的是中文系统,所以以上内容变为: line=# makefile (从'incpaths.min',行 363) line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc 所以导致:

#if ($line =~ /^# makefile \(from/) 判断条件为为 false 无法正确生成 incpathsaaabqmlym.py,python 在解析该文件的时候认为存在语法错误。

在 modem 代码 M7630AABBQMAZM2020(HY11-N2280-2.zip)中开始使用 genincpaths.py 产生

./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqoazm.py 文件,所以修改文件 amend-source-code-qualcomm-modem.sh 在脚本中需要加入以下内容: incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/genincpaths.py 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: Permiion denied 错误,执行以下命令:

chmod -R 755 AMSS/platform/cs/bin/*

1.2.3 建立 Android 开发环境 (略)

curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 1) 安装基本软件

sudo apt-get install git-core gnupg flex bison gperf build-eential 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/source.list #for sun-java5-jdk deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/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 50-android.rules # 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/setuplinux.bin 执行以上命令,按照默认步骤安装,安装路径为:~/ARM 注意事项:

安装过程如果出现错误:

..................java.lang.UnsatisfiedLinkError: /tmp/ismp001/6073753.tmp: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory 从网上下载 libstdc++-libc6.2-2.so.3 拷贝到 /usr/lib 目录 ,或者从下面地址获取:

http://172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-libc6.2-2.so.3 工具的安装通过脚本进行了简化,具体过程请参考文档: 80-N0216-2_A_M7630AABBQMAZM1170.pdf 80-VR881-7_B_M7630AABBQMLZA1200.pdf 80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf 80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf

2) 安装高通指定的 593 patch cd /mnt/qualcommon/RVDS2.2/下执行命令: ./setup-patch-rvct2.2-bin593-lib349.sh

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

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

#num_jobs = num_cpu * 2 modified by mhf num_jobs = 2 if num_jobs 8: num_jobs = 8 env.SetOption('num_jobs', num_jobs) ――――――― 获取 RVDS 官方网站下载评估版本

https://silver.arm.com/browse http://www.daodoc.com/wiki/QAEP#Branch_Releases https://www.daodoc.com/wiki/QLBEP 下载 M7630AABBQMLZA1150 分支:

February 1, 2010 M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 命令如下:

mkdir -pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 repo init -u git://codeaurora.org/platform/manifest.git -b eclair -m M7630AABBQMLZA1150.xml nohup repo sync 代码下的 vendor/qcom-proprietary 来自包 HY11-VR881-5.zip 以上两部分代码已经下载并且合并,共享在:

http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 --------------- 编译 eclair 代码

svn co http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150$ ../setenv.sh ../make-image.sh ======= modem代码从高通网站:https://support.cdmatech.com/login/ 上获取 我们目前使用的是: 共享在:

http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 ------- 编译 modem 代码

svn co http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 cd modem-M7630AABBQMAZM1220 ../setenv-qualcomm.sh ../make ======== 编译结果分别如下: ------------ 其中 adsp.mbn,am.mbn,dbl.mbn,osbl.mbn,partition.mbn 位于以下目录: ./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn ./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/am.mbn ./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn ./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn ./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn ------------ appsboot.mbn,boot.img,system.img,userdata.img 位于以下目录: ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3 ./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3 ------------ eMMC 启动使用的是 ext3 文件系统,需要使用镜像 system.img.ext3 userdata.img.ext3 补充说明:

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

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

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

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

http://smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/ svn co http://172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/ cd froyo_almond-M76XXTSNCJNLYA6050/ ../setenv.sh 设置环境变量 Setting Environment ...通常情况下 generic 用于编译模拟器版本 Options are: 1.generic 2.msm7627_surf 3.msm7627_ffa 4.tiny-system ====从以上列表中选择==== Which would you like? [1]

烧录的镜像文件appsboothd.mbn appsboot.mbn boot.img system.img userdata.img persist.img 来自 android 源码 appsboot.mbn 的主要功能是装载 linux 内核,通过 linux 的引导来完成 android 系统的加载,

appsboot.mbn 被烧写在相应的分区,它的加载由 osbl.mbn 来完成, osbl.mbn 程序来自 modem。

7x30 7x27 系列 appsboot 不一样,7x30 的 appsboot.mbn 是 7x27 appsboothd.mbn appsboot.mbn 两个文件的合并

1) appsboot.mbn 生成过程解析

2) boot.img 生成过程解析,怎样手动生成 boog.img

1.3.1.1 编译工具检测

make out/target/product/msm7630_surf/appsboot.mbn 1.3.1.1.1

1.3.1.2 appsboot.mbn 生成过程解析

make out/target/product/msm7630_surf/appsboot.mbn make out/target/product/msm7630_surf/nandwrite make out/target/product/msm7630_surf/emmc_appsboot.mbn 分别执行:

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_surf.mk PLATFORM := msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/rules.mk msm7x30 msm7630_surf.mk msm7630_surf_nandwrite ============================= include project/$(PROJECT).mk include target/$(TARGET)/rules.mk include target/$(TARGET)/tools/makefile include platform/$(PLATFORM)/rules.mk include arch/$(ARCH)/rules.mk include platform/rules.mk include target/rules.mk include kernel/rules.mk include dev/rules.mk include app/rules.mk ...include make/module.mk ...include make/build.mk ======================== vim bootable/bootloader/lk/make/module.mk INCMODULES := $(MODULES) $(info including $(INCMODULES)) include $(addsuffix /rules.mk,$(INCMODULES)) 展开为: ./bootable/bootloader/lk/app/nandwrite/rules.mk ./bootable/bootloader/lk/dev/fbcon/rules.mk ./bootable/bootloader/lk/dev/keys/rules.mk ./bootable/bootloader/lk/lib/debug/rules.mk ./bootable/bootloader/lk/lib/heap/rules.mk ./bootable/bootloader/lk/lib/libc/rules.mk ./bootable/bootloader/lk/lib/ptable/rules.mk ======================== bootable/bootloader/lk/make/build.mk:29: include arch/$(ARCH)/compile.mk

./bootable/bootloader/lk/project/msm7630_surf_nandwrite.mk 中有: MODULES += app/nandwrite ./bootable/bootloader/lk/platform/msm7x30/rules.mk中有: MODULES += dev/fbcon ./bootable/bootloader/lk/kernel/rules.mk 中有: MODULES += lib/libc lib/debug lib/heap ./bootable/bootloader/lk/target/msm7630_surf/rules.mk 中有: 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/lk.bin generating listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.lst generating listing: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.debug.lst generating symbols: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.sym generating size map: ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.size 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)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld @echo generating $@ @$(MKDIR) $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" $@

generating ../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/system-onesegment.ld 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/rules.mk ----- LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld include platform/msm_shared/rules.mk -----

./build/core/product_config.mk:177:TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE) ./build/core/envsetup.mk:152:OUT_DIR := $(TOPDIR)out ./build/core/envsetup.mk:159:TARGET_OUT_ROOT_release := $(OUT_DIR)/target ./build/core/envsetup.mk:161:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE)) ./build/core/envsetup.mk:178: TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product ./build/core/envsetup.mk:184:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE) build/core/envsetup.mk:200:TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj bootable/bootloader/lk/AndroidBoot.mk: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/build.mk $(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT) @echo linking $@ $(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS) $(LIBGCC) -o $@

vim ./bootable/bootloader/lk/AndroidBoot.mk 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/build.mk $(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT) @echo linking $@ $(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS) $(LIBGCC) -o $@

bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/lk.bin bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

./lk/platform/msm7x30/rules.mk:23:LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld

==》链接 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/lk.bin generating image: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin text data b dec hex filename 29592 7388 42720 79700 13754 ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk text data b 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/lk.bin 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/lk.bin ==》

生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.debug.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size 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/lk.sym generating size map: ../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size

mkheader 从 lk.bin 生成 appsboothd.mbn 语法: mkheader 然后把 appsboothd.mbn 和 lk.bin 合并为文件 appsboot.mbn,删除 appsboothd.mbn 文件 appsboothd.mbn 大小 40K ./bootable/bootloader/lk/target/msm7630_surf/tools/mkheader out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin out/target/product/msm7630_surf/appsboothd.mbn 合并 out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin 为:

out/target/product/msm7630_surf/appsboot.mbn cat out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin > out/target/product/msm7630_surf/appsboot.mbn 删除:out/target/product/msm7630_surf/appsboothd.mbn ==== 1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img boot.img 包括两个部分: kernel 和 ramdisk ,通过命令: make out/target/product/msm7630_surf/boot.img showcommands 会自动生成 kernel 和 ramdisk,然后把两者合并制作成烧写的镜像文件:boot.img 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/AndroidBoard.mk: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)

4.手动生成 ramdisk 执行命令

make out/target/product/msm7630_surf/ramdisk.img showcommands 会用到命令:

out/host/linux-x86/bin/mkbootfs out/target/product/msm7630_surf/root | out/host/linux-x86/bin/minigzip > \ out/target/product/msm7630_surf/ramdisk.img 5.手动生成 boot.img 需要使用命令 mkbootimg ,语法如下: mkbootimg --kernel 内核 --ramdisk ramdisk镜像 --cmdline 命令行 --base 基地址 --pagesize 大小 --output 输出的boot.img ========== KERNEL=out/target/product/$TARGET_PRODUCT/kernel KERNEL=out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage RAMDISK=out/target/product/$TARGET_PRODUCT/ramdisk.img CMDLINE="console=ttyDCC0 androidboot.hardware=qcom" BASE=0x00200000 PAGESIZE=4096 OUTPUT=out/target/product/$TARGET_PRODUCT/boot.img out/host/linux-x86/bin/mkbootimg --kernel $KERNEL --ramdisk $RAMDISK --cmdline "$CMDLINE" --base $BASE --pagesize $PAGESIZE --output $OUTPUT =========================================

编译 bootloader (appsboot.mbn) ,nandwrite 生成过程解析 ./vendor/qcom/msm7630_surf/AndroidBoard.mk:25: include bootable/bootloader/lk/AndroidBoot.mk =================== 因为有:

bootable/bootloader/lk/AndroidBoot.mk:3: TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn INSTALLED_BOOTLOADER_TARGET := $(PRODUCT_OUT)/bootloader file := $(INSTALLED_BOOTLOADER_TARGET)

Android项目开发总结

Android开发知识点总结

Android应用程序开发个人总结

Android开发基本知识总结Android课件

Android开发优势总结(推荐)

Android开发Info类总结

android开发实习报告总结

android 开发心得

android教程JNI开发疑点总结

android教程JNI开发疑点总结

Qualcomm平台android开发总结
《Qualcomm平台android开发总结.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档