Android -Recovery

Recovery简介Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。
升级一般通过运行升级包中的META-INF/com/google/android/update-script脚本来执行自定义升级,脚本中是一组recovery系统能识别的UI控制,文件系统操作命令,例如write_raw_image(写FLASH分区),copy_dir(复制目录)。该包一般被下载至SDCARD和CACHE分区下。如果对该包内容感兴趣,可以从http://forum.xda-developers.com/showthread.php?t=442480下载JF升级包来看看。
升级中还涉及到包的数字签名,签名方式和普通JAR文件签名差不错。公钥会被硬编译入recovery,编译时生成在:out/target/product/XX/obj/PACKAGING/ota_keys_inc_intermediates/keys.inc
G1中的三种启动模式MAGIC KEY:

camera + power:bootloader模式,ADP里则可以使用fastboot模式
home + power:recovery模式
正常启动

Bootloader正常启动,又有三种方式,按照BCB(Bootloader Control Block, 下节介绍)中的command分类:

command == 'boot-recovery' → 启动recovery.img。recovery模式
command == 'update-radio/hboot' → 更新firmware(bootloader)
其他 → 启动boot.img

Recovery涉及到的其他系统及文件 
CACHE分区文件
Recovery 工具通过NAND cache分区上的三个文件和主系统打交道。主系统(包括恢复出厂设置和OTA升级)可以写入recovery所需的命令,读出recovery过程中的LOG和intent。

/cache/recovery/command: recovery命令,由主系统写入。所有命令如下:
--send_intent=anystring - write the text out to recovery.intent
--update_package=root:path - verify install an OTA package file
--wipe_data - erase user data (and cache), then reboot
--wipe_cache - wipe cache (but not user data), then reboot
/cache/recovery/log:recovery过程日志,由主系统读出
/cache/recovery/intent:recovery输出的intent
MISC分区内容Bootloader Control Block (BCB) 存放recovery bootloader message。结构如下:
struct bootloader_message {
char command[32];
char status[32]; // 未知用途
char recovery[1024];

};

command可以有以下两个值
“boot-recovery”:标示recovery正在进行,或指示bootloader应该进入recovery mode
“update-hboot/radio”:指示bootloader更新firmware
recovery内容
“recovery\n
<recovery command>\n
<recovery command>”
其中recovery command为CACHE:/recovery/command命令


两种Recovery Case 
FACTORY RESET(恢复出厂设置)
用户选择“恢复出厂设置”
设置系统将"--wipe_data"命令写入/cache/recovery/command
系统重启,并进入recover模式(/sbin/recovery)
get_args() 将 "boot-recovery"和"--wipe_data"写入BCB
erase_root() 格式化(擦除)DATA分区
erase_root() 格式化(擦除)CACHE分区
finish_recovery() 擦除BCB
重启系统


OTA INSTALL(OTA升级)
升级系统下载 OTA包到/cache/some-filename.zip
升级系统写入recovery命令"--update_package=CACHE:some-filename.zip"
重启,并进入recovery模式
get_args() 将"boot-recovery" 和 "--update_package=..." 写入BCB
install_package() 作升级
finish_recovery() 擦除 BCB
** 如果安装包失败 ** prompt_and_wait() 等待用户操作,选择ALT+S或ALT+W 升级或恢复出厂设置
main() 调用 maybe_install_firmware_update()
如果包里有hboot/radio的firmware则继续,否则返回
将 "boot-recovery" 和 "--wipe_cache" 写入BCB
将 firmware image写入cache分区
将 "update-radio/hboot" 和 "--wipe_cache" 写入BCB
重启系统
bootloader自身更新firmware
bootloader 将 "boot-recovery" 写入BCB
erase_root() 擦除CACHE分区
清除 BCB
main() 调用 reboot() 重启系统


Recovery模式流程
/init → init.rc → /sbin/recovery →
main():recovery.c


ui_init():ui.c [UI initialize]
gr_init():minui/graphics.c [set tty0 to graphic mode, open fb0]
ev_init():minui/events.c [open /dev/input/event*]
res_create_surface:minui/resource.c [create surfaces for all bitmaps used later, include icons, bmps]
create 2 threads: progress/input_thread [create progress show and input event handler thread]
get_args():recovery.c
get_bootloader_message():bootloader.c [read mtdblock0(misc partition) 2nd page for commandline]
check if nand misc partition has boot message. If yes, fill argc/argv.
If no, get arguments from /cache/recovery/command, and fill argc/argv.
set_bootloader_message():bootloader.c [set bootloader message back to mtdblock0]
Parser argv[] filled above
register_update_commands():commands.c [ register all commands with name and hook function ]
registerCommand():commands.c 
Register command with name, hook, type, cookie.
Commands, e.g: assert, delete, copy_dir, symlink, write_raw_image.
registerFunction():commands.c
Register function with name, hook, cookie.
Function, e.g: get_mark, matches, getprop, file_contains
install_package():
translate_root_path():roots.c [ "SYSTEM:lib" and turns it into a string like "/system/lib", translate the updater.zip path ]
mzOpenZipArchive():zip.c [ open updater.zip file (uncompass) ]
handle_update_package():install.c
verify_jar_signature():verifier.c [ verify signature with keys.inc key; verify manifest and zip package archive ]
verifySignature() [ verify the signature file: CERT.sf/rsa. ]
digestEntry():verifier.c [ get SHA-1 digest of CERT.sf file ]
RSA_verify(public key:keys.inc, signature:CERT.rsa, CERT.sf's digest):libc/rsa.c [ Verify a 2048 bit RSA PKCS1.5 signature against an expected SHA-1 hash. Use public key to decrypt the CERT.rsa to get original SHA digest, then compare to digest of CERT.sf ]
verifyManifest() [ Get manifest SHA1-Digest from CERT.sf. Then do digest to MANIFEST.MF. Compare them ]
verifyArchive() [ verify all the files in update.zip with digest listed in MANIFEST.MF ]
find_update_script():install.c [ find META-INF/com/google/android/update-script updater script ]
handle_update_script():install.c [ read cmds from script file, and do parser, exec ]
parseAmendScript():amend.c [ call yyparse() to parse to command ]
exeCommandList():install.c
exeCommand():execute.c [ call command hook function ]
erase DATA/CACHE partition
prompt_and_wait():recovery.c [ wait for user input: 1) reboot 2) update.zip 3) wipe data ]
ui_key_xxx get ALT+x keys
1) do nothing
2) install_package('SDCARD:update.zip')
3) erase_root() → format_root_device() DATA/CACHE
may_install_firmware_update():firmware.c [ remember_firmware_update() is called by write_hboot/radio_image command, it stores the bootloader image to CACHE partition, and write update-hboot/radio command to MISC partition for bootloader message to let bootloader update itself after reboot ]
set_bootloader_message()
write_update_for_bootloader():bootloader.c [ write firmware image into CACHE partition with update_header, busyimage and failimage ]
finish_recovery():recovery.c [ clear the recovery command and prepare to boot a (hopefully working) system, copy our log file to cache as well (for the system to read), and record any intent we were asked to communicate back to the system. ]
reboot()
 

 

本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍Red Hat Linux安装程序是如何加载驱动的,通过了解这个过程, 我们可以自己将驱动程序放到引导盘中;安装完系统后,使用kudzu自动配置硬件程序。

  Linux设备驱动概述

  1. 内核和驱动模块

  操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。正如我们查看屏幕上的文档时,不用去管到底使用nVIDIA芯片,还是ATI芯片的显示卡,只需知道输入命令后,需要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有较高的比例。

  Linux内核中采用可加载的模块化设计(LKMs ,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。

  如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。

  我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。

  理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的命令,在加载驱动程序要用到它们:lsmod、modprob、insmod、rmmod、modinfo。

lsmod 列出当前系统中加载的模块,例如:

#lsmod (与cat /proc/modules 得出的内容是一致的) Module Size Used by Not tainted radeon 115364 1 agpgart 56664 3 nls_iso8859-1 3516 1 (autoclean) loop 12120 3 (autoclean) smbfs 44528 2 (autoclean) parport_pc 19076 1 (autoclean) lp 9028 0 (autoclean) parport 37088 1 (autoclean) [parport_pc lp] autofs 13364 0 (autoclean) (unused) ds 8704 2 yenta_socket 13760 2 pcmcia_core 57184 0 [ds yenta_socket] tg3 55112 1 sg 36940 0 (autoclean) sr_mod 18104 0 (autoclean) microcode 4724 0 (autoclean) ide-scsi 12208 0 scsi_mod 108968 3 [sg sr_mod ide-scsi] ide-cd 35680 0 cdrom 33696 0 [sr_mod ide-cd] nls_cp936 124988 1 (autoclean) nls_cp437 5148 1 (autoclean) vfat 13004 1 (autoclean) fat 38872 0 (autoclean) [vfat] keybdev 2976 0 (unused) mousedev 5524 1 hid 22212 0 (unused) input 5888 0 [keybdev mousedev hid] ehci-hcd 20104 0 (unused) usb-uhci 26412 0 (unused) usbcore 79392 1 [hid ehci-hcd usb-uhci] ext3 91592 2 jbd 52336 2 [ext3]

上面显示了当前系统中加载的模块,左边数第一列是模块名,第二列是该模块大小,第三列则是该模块使用的数量。

如果后面为unused,则表示该模块当前没在使用。如果后面有autoclean,则该模块可以被rmmod -a命令自动清洗。rmmod -a命令会将目前有autoclean的模块卸载,如果这时候某个模块未被使用,则将该模块标记为autoclean。如果在行尾的[ ]括号内有模块名称,则括号内的模块就依赖于该模块。例如:

cdrom 34144 0 [sr_mod ide-cd]

其中ide-cd及sr_mod模块就依赖于cdrom模块。

系统的模块文件保存在/lib/modules/2.4.XXX/kerne目录中,根据分类分别在fs、net等子目录中,他们的互相依存关系则保存在/lib/modules/2.4.XXX/modules.dep 文件中。

需要注意,该文件不仅写入了模块的依存关系,同时内核查找模块也是在这个文件中,使用modprobe命令,可以智能插入模块,它可以根据模块间依存关系,以及/etc/modules.conf文件中的内容智能插入模块。比如希望加载ide的光驱驱动,则可运行下面命令:

# modprobe ide-cd

此时会发现,cdrom模块也会自动插入。

insmod也是插入模块的命令,但是它不会自动解决依存关系,所以一般加载内核模块时使用的命令为modprobe。

rmmod可以删除模块,但是它只可以删除没有使用的模块。

Modinfo用来查看模块信息,如modinfo -d cdrom,在Red Hat Linux系统中,模块的相关命令在modutils的RPM包中。

2.设备文件

当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种类Unix系统,Unix的一个基本特点是“一切皆为文件”,它抽象了设备的处理,将所有的硬件设备都像普通文件一样看待,也就是说硬件可以跟普通文件一样来打开、关闭和读写。

系统中的设备都用一个设备特殊文件代表,叫做设备文件,设备文件又分为Block(块)型设备文件、Character(字符)型设备文件和Socket(网络插件)型设备文件。Block设备文件常常指定哪些需要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。

而Character型设备文件常指定直接读写,没有缓冲区的设备,比如并口、虚拟控制台等。Socket(网络插件)型设备文件指定的是网络设备访问的BSD socket 接口。

#ls -l /dev/hda /dev/video0 /dev/log brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda srw-rw-rw- 1 root root 0 Jun 3 16:55 /dev/log crw------- 1 root root 81, 0 Sep 15 2003 /dev/video0

上面显示的是三种设备文件,注意它们最前面的字符,Block型设备为b,Character型设备为c,Socket设备为s。

由此可以看出,设备文件都放在/dev目录下,比如硬盘就是用/dev/hd*来表示,/dev/hda表示第一个IDE接口的主设备,/dev/hda1表示第一个硬盘上的第一个分区;而/dev/hdc 表示第二个IDE接口的主设备。可以使用下面命令:

#dd if=/dev/hda of=/root/a.img bs=446 count=1

把第一个硬盘上前446个字节的MBR信息导入到a.img文件中。

对于Block和Character型设备,使用主(Major)和辅(minor)设备编号来描述设备。主设备编号来表示某种驱动程序,同一个设备驱动程序模块所控制的所有设备都有一个共同的主设备编号,而辅设备编号用于区分该控制器下不同的设备,比如,/dev/hda1(block 3/1)、/dev/hda2(block 3/2 )和/dev/hda3( block3/3 )都代表着同一块硬盘的三个分区,他们的主设备号都是3,辅设备号分别为1、2、3。 这些设备特殊文件用mknod命令来创建:

# mknod harddisk b 3 0

我们就在当前位置创建出一个与 /dev/hda一样的、可以访问第一个IDE设备主硬盘的文件,文件名叫做harddisk。

使用下面命令可以查看设备编号:

#file /dev/hda /dev/hda: block special (3/0)

其中Block代表/dev/hda是系统的Block型(块型)设备文件,它的主设备编号为3,辅设备编号为0。

#ls -l /dev/hda /dev/hdb brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda brw-rw---- 1 root disk 3, 64 Sep 15 2003 /dev/hdb

使用ls -l也可以看到设备编号,/dev/hdb代表第一个IDE接口的从设备(Slave)也是Block设备,编号为(3/64),还有另外一种设备文件是/dev/tty*。使用如下命令:

#echo "hello tty1" > /dev/tty1

将字符串“hello tty1”输出到/dev/tty1代表的第一个虚拟控制台上,此时按“Alt + F1”可以看到该字符出现在屏幕上,这个特殊的文件就代表着我们的第一虚拟控制台。

#file /dev/tty1 /dev/tty1: character special (4/1)

由上可以看到,它的类型为Character 型(字符型)设备文件,主设备号为4,辅设备号为1。同样,/dev/tty2代表着第二个虚拟控制台,是Character设备,编号为 (4/2)。

当将/dev/cdrom加载到/mnt/cdrom中时,只要访问/mnt/cdrom系统就会自动引入到/dev/cdrom对应的驱动程序中,访问实际的数据。

有关设备文件的编号可以看内核文档/usr/src/linux-2.*/Documentation/devices.txt 文件(在Kernel的源文件解包后的Documentation目录中),其中详细叙述了各种设备文件编号的意义。

3.使用/proc目录中的文件监视驱动程序的状态

通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是proc文件系统,它一般会被加载到/proc目录。访问设备文件时,操作系统通常会通过查找/proc目录下的值,确定由哪些驱动模块来完成任务。如果proc文件系统没有加载,访问设备文件时就会出现错误。

Linux系统中proc文件系统是内核虚拟的文件系统,其中所有的文件都是内核中虚拟出来的,各种文件实际上是当前内核在内存中的参数。它就像是专门为访问内核而打开的一扇门,比如访问/proc/cpuinfo文件,实际上就是访问目前的CPU的参数,每一次系统启动时系统都会通过/etc/fstab中设置的信息自动将proc文件系统加载到/proc目录下:

# grep proc /etc/fstab none /proc proc defaults 0 0

此外,也可以通过mount命令手动加载:

# mount -t proc none /proc

通过/proc目录下的文件可以访问或更改内核参数,可以通过/proc目录查询驱动程序的信息。下面先让我们看一下/proc目录中的信息:

# ls /proc 1 4725 5032 5100 5248 5292 crypto kcore partitions 14 4794 5044 5110 5250 5293 devices kmsg pci 2 4810 5075 5122 5252 5295 dma ksyms self 3 4820 5079 5132 5254 5345 driver loadavg slabinfo 4 4831 5080 5151 5256 6 execdomains locks stat 4316 4910 5081 5160 5258 7 fb lvm swaps 4317 4912 5082 5170 5262 70 filesystems mdstat sys 4318 4924 5083 5180 5271 8 fs meminfo sysrq-trigger 4319 4950 5084 5189 5287 9 ide misc sysvipc 4620 4963 5085 5232 5288 apm interrupts modules tty 4676 5 5086 5242 5289 bus iomem mounts uptime 4680 5005 5087 5244 5290 cmdline ioports mtrr version 4706 5018 5088 5246 5291 cpuinfo irq net

需要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时变化产生的,可以通过以下命令来查看文件的具体值:

# cat /proc/interrupts CPU0 0: 50662 XT-PIC timer 1: 3 XT-PIC keyboard 2: 0 XT-PIC cascade 5: 618 XT-PIC ehci-hcd, eth1 8: 1 XT-PIC rtc 9: 0 XT-PIC usb-uhci, usb-uhci 11: 50 XT-PIC usb-uhci, eth0 12: 16 XT-PIC PS/2 Mouse 14: 8009 XT-PIC ide0 15: 0 XT-PIC ide1 NMI: 0 ERR: 0

其它文件的含意见表1所示。

/proc/sys目录下的文件一般可以直接更改,相当于直接更改内核的运行参数,例如:

# echo 1 > /proc/sys/net/ipv4/ip_forward

上面代码可以将内核中的数据包转发功能打开。

另外,Linux系统中提供一些命令来查询系统的状态,如free可以查看目前的内存使用情况,ide_info可以查看ide设备的信息,例如: #ide_info /dev/had。类似的命令还有scsi_info,可以查看SCSI设备的信息。这些命令一般也是查询/proc目录下的文件,并返回结果。  

系统初始化过程驱动程序的安装

Linux安装过程中,系统上的硬件会被检测,基于检测到的结果安装程序会决定哪些模块需要在引导时被载入。Red Hat的安装程序为anaconda,它提供了自动检测硬件,并且安装的机制。

但是,如果计算机内的某些硬件没有默认的驱动程序,比如一块SCSI卡,我们可以在启动后的boot提示符下,输入“linux dd”,在加载完内核后,系统会自动提示插入驱动盘,这时就有机会把该硬件的Linux驱动程序装入。

如果在安装系统时,某种硬件总是因为中断冲突(ISA总线的设备较常见,比如一块ISA网卡)没法正常驱动,或者是缺少驱动程序,那么可以在boot提示符下输入“linux noprobe”。在这种模式下,安装程序不会自动配置找到的硬件,可以自己来选择现有驱动,配置驱动程序的参数,或者选择用光盘或软盘加载驱动程序。

定制引导盘

系统启动时是如何加载驱动的?下面让我们来看一下Red Hat的安装光盘是怎样引导的。当Linux安装光盘启动时,加载位于光盘上isolinux中的内核文件vmlinuz,内核运行完毕后,又将initrd.img的虚拟文件系统加载到内存中。这个文件为ext2文件系统的镜像,经过gzip压缩,可以通过以下步骤查看该镜像中的内容:

# mount /mnt/cdrom # mkdir /mnt/imgdir # gunzip < /mnt/cdrom/isolinux/initrd.img > /ext2img # mount -t ext2 -o loop /ext2img /mnt/imgdir # cd /mnt/imgdir # ls -F bin@ dev/ etc/ linuxrc@ lost+found/ modules/ proc/ sbin/ tmp/ var/ # cd modules # ls module-info modules.cgz modules.dep modules.pcimap pcitable

其中modules.dep为模块的注册文件,同时有各种模块的依存关系。modules.cgz为cpio的打包文件,实际的各种驱动模块就在该文件中。我们可以通过以下命令解包:

# cpio -idmv < modules.cgz

由此可以看到,解包出来的目录2.4.21-4XXX。进入该目录下的i386目录,就可以看到当前启动盘中支持的所以驱动程序:

# ls 3c59x.o 3w-xxxx.o 8139cp.o 8139too.o 8390.o aacraid.o acenic.o aic79xx.o ……

若希望在系统中加入需要的驱动程序,可以相应地修改这些文件,比如在modules.dep中加入该模块的名字和依存关系,将编译好的驱动模块文件加入modules.cgz中,这样就可以制定自己的安装光盘。

硬盘上的系统启动过程与上面类似,但是initrd的镜像文件要更简单些,一般在initrd-2.4.XXX.img的虚拟文件系统中,只会在/lib目录下包含ext3.o jbd.o lvm-mod.o等少数文件,用来驱动硬盘上的ext3的文件系统。加载文件系统后,就可以使用/lib/modules/2.4.XXX/下的modules.dep文件及Kernel目录中的各种驱动文件。

#!/bin/bash
adb-eclair2.2 shell am start -a com.android.contacts.action.LIST_DEFAULT
echo "press menu"|telnet 127.0.0.1 1080
 
for i in `seq 0 10`
do
echo "sleep 1000"|telnet 127.0.0.1 1080
echo "press menu"|telnet 127.0.0.1 1080
done
monkey --port 1080 -v -v
netstat -an | grep 1080
sudo adb-eclair2.2 forward tcp:1080 tcp:1080
 
 
 
 
关于如何添加自己的库或者别的文件进入apk
参见development/pdk/ndk下的内容
简单的说把编译好的apk解开
unzip testapp.apk -d temp/
建立目录
mkdir temp/lib/
mkdir temp/lib/armeabi
然后把编译好的库放进armeabi目录下 (也许以后会有x86。。。)
至于其他文件也可以类似的处理
然后 apkbuilder testapp.apk -v -rf temp/ 即可
最后,本帖对于山寨厂这样自己整系统可以随意乱放native库或者执行程序的例外。。。
 
 
安装动态库到 /system/lib/ 目录
在工程的 Android.mk 文件中加如下内容
include $(CLEAR_VARS)
LOCAL_PREBUILT_LIBS := gears.so
include $(BUILD_MULTI_PREBUILT)
 
<?xml version="1.0" encoding="utf-8"?>
<!-- This version must agree with that in apps/common/res/apns.xml -->
 
 
 
<keywords version="6">
<keyword username="mohuifu" password="mohuifu"/>
<keyword username="mohuifu" password="mohuifu"/>
</keywords>
 
 
 
$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
$(combo_target)CXX := $($(combo_target)TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
$(combo_target)AR := $($(combo_target)TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
$(combo_target)OBJCOPY := $($(combo_target)TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
$(combo_target)LD := $($(combo_target)TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
允许连接的客户端
echo 'ALLOWEDNETS="127.0.0.1 172.20.120.0/24"' >> /etc/default/distcc
连接以下机器进行编译
export DISTCC_HOSTS='172.20.120.88 172.20.120.67 172.20.120.65'
 
 
最佳答案-网友投票选出
1.深圳市南山区蛇口星艺幼儿园
0755-26670733
南山区蛇口湾夏路42号
2.深圳蛇口北大附中南海玫瑰幼儿园
地址:深圳市南山区蛇口望海路南海玫瑰园 二期内
电话0755——26813720
——26812946
3,这里是一个blog上的南山幼儿园名单
http://xiaochongzhi.bb.iyaya.com/biji-1339736.html
 
http://sz3322.com/html/96.html
 
 
 
 
 
 
 
 
It's Factory Test Mode, and is supposedly a very good way to turn your phone into a brick.
For what it's worth, the QPST FTM App help file says:
The Factory Test Mode (FTM) Radio Frequency (RF) Evaluation Graphical User Interface (GUI)
software is used to to test a phone. FTM RF Evaluation GUI is an application used to control
a QUALCOMM phone such as a Subscriber Unit Reference Design (SURF) or Form Factor Accurate
(FFA) for testing RF in three system modes—CDMA 1x, GSM, and WCDMA.
 
This application requires Dual-Mode Subscriber Station (DMSS) or Advanced Mode Subscriber Software (AMSS) software with FTM built into it. The FTM mode must be enabled before using the CDMA 1x, GSM, and WCDMA RF controls.
 
FTM is a mode of operation that allows a user to perform diagnostic or design verification functionality by exposing functions not discretely available to the user in DMSS mode. FTM does not provide the ability to make phone calls and is not driven by the DMSS Call Processing State Machine.
Source(s):
http://www.howardforums.com/showthread.p…
 
 
>>>>>>> .r455
求Qualcomm Factory Test Mode(FTM)Diag command interfaces的资料
此外,哪位高手有如下的文档?
For further information on FTM and these Diag commands, see
QUALCOMM Application Note CL93-V1974-1, Factory Test Mode.
 
 
 
 
kernel/arch/arm/mach-msm/board-msm7x30.c:77:#include <asm/mach-types.h>
./out/target/product/msm7630_surf/obj/KERNEL_OBJ/include/asm-arm/mach-types.h:27539:
# define machine_is_msm7x30_surf() (machine_arch_type == MACH_TYPE_MSM7X30_SURF)
 
 
make -C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi- msm7630-perf_defconfig
111
make -C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/ menuconfig
222
make configkernek
 
make kernelconfig 会配置内核,修改的文件为
kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG)
env KCONFIG_NOTIMESTAMP=true \
$(MAKE) -C kernel O=../$(KERNEL_OUT) ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
cp $(KERNEL_OUT)/.config kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)
 
*** Build configuration changed: "msm7630_surf-userdebug-{mdpi,nodpi,hdpi}" -> "msm7630_surf-eng-{mdpi,nodpi,hdpi}"
*** Forcing "make installclean"...
 
 
 
 
Cupcake是g1新固件的代号,OTA是over the air(自动升级的正式版),其它都是非官方的版本修来得来。
楼主多看贴子吧,自然就会明白的
OTA
Over-the-Air ,又叫空中下载技术,空中无线传送等等,校长自己的通俗解释就是说,运营商通过网络把一些数据传送到你的手机上。
就这样么简单。比如Cupcake的更新。通过网络,传送到你的手机上更新。
 
 
 
如何刷新 Android 手机的 recovery
一个有用的recovery可以省去不少的麻烦,并且对于经常需要刷机的Android来说有很大的帮助,这里的命令就是用来修改Android手机的recovery。
adb shell reboot bootloader (wait for device to reboot into bootloader)
fastboot boot recovery.img
adb shell mount /sdcard
adb push recovery.img /sdcard/recovery.img
adb shell flash_image recovery /sdcard/recovery.img
 
通过 adb 更新 Android 系统字体
目前已知的更新 Android 系统字体的方法,无非就是 sign 一个 update 包,进入 recovery 模式来更新,但是其实通过 su 到 root 权限就可以直接通过 adb 来更新了,这里是代码,首先需要将字体拷贝到 sd card 上面,并且重命名为 DroidSansFallback.ttf 才行。
 
adb shell
su (then wait for the superuser screen and press yes)
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
chmod 4755 /system/fonts/DroidSansFallback.ttf
dd if=/sdcard/DroidSansFallback.ttf of=/system/fonts/DroidSansFallback.ttf
reboot
注:用此方法,可以更新所有系统字体和程序。
 
刷 Android ROM 的时候,需要注意的地方
刷 ROM 的时候,需要注意的地方:
* 如果要清除原始数据的话,先 wipe 再flash,顺序很重要!
 
 
 
 
3.1.8 SIM卡联系人添加/修改/删除功能
2,拔号器中输入特殊码拔号广播,如“*#”等特殊字符
Intent intent = new Intent(Intents.SECRET_CODE_ACTION,
Uri.parse("android_secret_code://" + input.substring(4, len - 4)));
context.sendBroadcast(intent);
发送的广播,不是监听的广播
3.2.4 本进程用到的设置值,和设置模块的接口 内容缺失
3.5 标记整理界面 新加的
3.6 SIM卡联系人界面 的内容描述不正确, 与 SIM卡联系人编辑界面相同
联系人编辑界面姓名的编辑与 eclair 2.1 不符
在一些描述中说如图,实际上相应的图片并不存在,要么添加图片,要么用文字描述
 
 
 
启动email程序
I/ActivityManager( 56): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com }
E/ViewContact( 120): No activity found for intent: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com }
启动QQ程序
I/ActivityManager( 56): Starting activity: Intent { act=android.intent.action.SENDTO dat=imto://qq/13250831 }
E/ViewContact( 120): No activity found for intent: Intent { act=android.intent.action.SENDTO dat=imto://qq/13250831 }
 
 
=====================
23. 备份我的设置
 
 
# I/ActivityManager( 59): Starting activity: Intent { act=android.intent.action.SENDTO dat=imto://aim/mohuifu%40aim.com cmp=com.android.im/.app.ImUrlActivity }
I/ActivityManager( 59): Start proc com.android.im for activity com.android.im/.app.ImUrlActivity: pid=338 uid=10028 gids={3003}
D/ImService( 242): ImService.onStart, checkAutoLogin=false
I/ActivityManager( 59): Starting activity: Intent { act=android.intent.action.INSERT dat=content://imps/providers/0 cmp=com.android.im/.app.AccountActivity (has extras) }
W/InputManagerService( 59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43fd26c0 (uid=10028 pid=338)
W/InputManagerService( 59): Client not active, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43fd4ee8
I/ActivityManager( 59): Displayed activity com.android.im/.app.ImUrlActivity: 1213 ms (total 34947 ms)
W/dalvikvm( 338): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime( 338): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 338): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.im/com.android.im.app.AccountActivity}: java.lang.NullPointerException
E/AndroidRuntime( 338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime( 338): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime( 338): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime( 338): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime( 338): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 338): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 338): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 338): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 338): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 338): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 338): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 338): at com.android.im.app.AccountActivity.onCreate(AccountActivity.java:115)
E/AndroidRuntime( 338): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 338): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
E/AndroidRuntime( 338): ... 11 more
E/ActivityThread( 59): Failed to find provider info for android.server.checkin
E/Checkin ( 59): Error reporting crash: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/crashes
W/ActivityManager( 59): Launch timeout has expired, giving up wake lock!
W/ActivityManager( 59): Activity idle timeout for HistoryRecord{43fcc500 com.android.im/.app.ImUrlActivity}
W/ActivityManager( 59): Activity idle timeout for HistoryRecord{43fd4350 com.android.im/.app.AccountActivity}
 
 
 
 
D/dalvikvm( 1125): GC freed 3576 objects / 199192 bytes in 108ms
I/NotificationService( 111): enqueueToast pkg=com.google.android.gm callback=android.app.ITransientNotification$Stub$Proxy@43bccb30 duration=0
W/InputManagerService( 111): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43c3d908 (uid=10029 pid=1125)
W/IInputConnectionWrapper( 1125): showStatusIcon on inactive InputConnection
W/Sources ( 1053): Unknown type=com.google, mime=vnd.android.cursor.item/group_membership
I/ActivityManager( 111): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com cmp=com.google.android.gm/.ComposeActivityGmail }
I/ActivityManager( 111): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com flg=0x2800000 cmp=com.google.android.gm/.ComposeActivity }
I/ActivityManager( 111): Displayed activity com.google.android.gm/.ComposeActivity: 437 ms (total 481 ms)
 
 
 
 
 
 
 
 
 
通过email发送
===============
I/ActivityManager( 106): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com cmp=android/com.android.internal.app.ResolverActivity }
I/ActivityManager( 106): Displayed activity android/com.android.internal.app.ResolverActivity: 221 ms (total 221 ms)
I/ActivityManager( 106): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com flg=0x3800000 cmp=com.android.email/.activity.MessageCompose }
I/ActivityManager( 106): Displayed activity com.android.email/.activity.MessageCompose: 179 ms (total 179 ms)
===============
通过gmail发送
===============
I/ActivityManager( 106): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com flg=0x3800000 cmp=com.google.android.gm/.ComposeActivityGmail }
I/ActivityManager( 106): Starting activity: Intent { act=android.intent.action.SENDTO dat=mailto:mohuifu%40gmail.com flg=0x2800000 cmp=com.google.android.gm/.ComposeActivity }
I/ActivityManager( 106): Displayed activity com.google.android.gm/.ComposeActivity: 267 ms (total 287 ms)
===============
 
E/PackageManager( 111): Package com.android.providers.im requires unavailable shared library com.android.im.plugin; failing!
W/PackageManager( 111): Package couldn't be installed in /data/app/com.android.providers.im.apk
 
 
所以安装 adb install ImProvider.apk 必须有插件 /system/framework/com.android.im.plugin.jar
Got library com.android.im.plugin in /system/framework/com.android.im.plugin.jar
 
#find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |
 
How to install google maps on cupcake with the android source.
 
1. Compile the android source.
2. Get the Maps.apk and com.google.android.maps.jar from the emulator.
3. Copy the files to under the out/target/product/dream/system/ directory.
* cp Maps.apk out/target/product/dream/system/app/
* cp com.google.android.maps.jar out/target/product/dream/system/framework/
4. Add the permission for maps.
1. out/target/product/dream/system/etc/permissions/platform.xml
*
<permissions>
...
...
...
 
<!-- This is a list of all the libraries available for application
code to link against. -->
 
<library name="android.awt"
file="/system/framework/android.awt.jar" />
<library name="android.test.runner"
file="/system/framework/android.test.runner.jar" />
<library name="com.android.im.plugin"
file="/system/framework/com.android.im.plugin.jar"/>
<library name="com.google.android.maps"
file="/system/framework/com.google.android.maps.jar" />
 
</permissions>
 
5. Remove system.img files under the out/target/dream/
* rm out/target/product/dream/obj/PACKAGING/systemimage_unopt_intermediates/system.img
* rm out/target/product/dream/system.img
6. Run 'make' again and write flash images to the phone.
 
 
 
 
 
 
 
 
0647 从家里出发
0655 上19路车
0715 到深圳大学
0757 上公司班车
0805 上高速
0830 下高速
0848 到公司办公室
 
6225 8878 0006 2081 工资卡
6225 7583 0093 6340 罗琳信用卡
 
RJ11接头为6 PIN,通常使用中间4针,即2345脚,普通电话接头只使用34脚;RJ45有两种标准接法:568A、568B
RJ11接头有两种(4金属接头和2金属接头)模拟信号只接34中间触点,数字信号接2345脚
RJ45有两种标准接法:568A、568B ,通常采用B 接法
RJ11接头有两种(4金属接头和2金属接头)模拟信号只接34中间触点,数字信号接2345脚
RJ45有两种标准接法:568A、568B ,通常采用B 接法
T568A 打线方式:
白-绿;绿;白-橙;蓝;白-蓝;橙;白-棕;棕;
1 2 3 4 5 6 7 8
T568B 打线方式:
白-橙;橙;白-绿;蓝;白-蓝;绿;白-棕;棕;
1 2 3 4 5 6 7 8
路由器、Modem、交换机和电脑T568B。
路由器与交换机用T568A。
 
 
 
AMSS/products/7x30/build/ms/AAABQMAZM.cmd
AMSS/products/7x30/build/ms/AABBQMLYM.cmd
AMSS/products/7x30/build/ms/AABBQCLYM.cmd
 
 
 
 
AMSS/products/7x30/build/ms/AABBQOLYM.cmd
AMSS/products/7x30/build/ms/bbkAABBQOLYM.cmd
 
 
 
AMSS/products/7x30/build/ms/AAABQOLYM.cmd
AMSS/products/7x30/build/ms/bbkAAABQOLYM.cmd
 
 
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AAABQMAZM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AABBQMAZM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AABBQOLYM.cmd
 
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AABBQDAZM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQOLYM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AABBQMLYM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQMLYM.cmd
 
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AAABQOAZM.cmd
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AAABQCAZM.cmd
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AABBQDAZM.cmd
 
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AAABQMAZM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQMLYM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQCLYM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQOLYM.cmd
 
 
 
80-N1665-1_B_M7630AAABQ_AZM1240.pdf
5.3.2.2 LPDDR1/LPDDR2 eMMC boot UMTS only AABBQOLYM.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。
 
UMTS LPDDR1/LPDDR2 eMMC 选择软件包 HY11-N1496-3_1.2.50 中的命令: AABBQOLYM.cmd
UMTS LPDDR1/LPDDR2 NAND 选择软件包 HY11-N1122-3_1.2.50 中的命令: AAABQOAZM.cmd
 
 
route add -host 10.0.0.1 gw 192.168.1.254 wlan0
 
route add 192.168.2.0 mask 255.255.255.0 172.20.124.8 -p
 
 
 
 
 
为深圳和长安之间的svn相互访问添加静态路由
route add -net 192.168.2.0 netmask 255.255.255.0 gw 172.20.124.8
添加到某台主机的路由
route add -host 192.168.2.201 netmask 255.255.255.0 gw 172.20.124.8
 
路由器在配好这个文件之后,还需要enable自身的ip转发,
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.default.ip_forward=1
sudo sysctl -p /etc/sysctl.conf
这就打开了ip转发。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
=======
文档评审:
===========
邹勇军:
-----------------
TD1002_联系人_收藏夹_概要设计.doc
2. 总体设计说明
2.6 系统占用资源与分配,确定有没有5k以上的内存分配情况
类图过于简单
类的说明中描述的类与类图中的类不一致
例如:
5.1.6 本进程监听的广播 有内容需要补充上
final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
6.1.4 本进程用到的provider 不完整需要补充上
如:
Contacts/src/com/android/contacts/DialtactsActivity.java:29:import android.provider.CallLog.Calls;
Contacts/src/com/android/contacts/CallDetailActivity.java:30:import android.provider.CallLog;
Contacts/src/com/android/contacts/TwelveKeyDialer.java:42:import android.provider.Settings;
Contacts/src/com/android/contacts/SpecialCharSequenceMgr.java:33:import android.provider.Telephony.Intents;
Contacts/src/com/android/contacts/ContactsLiveFolders.java:25:import android.provider.LiveFolders;
等。
6.1.8 本进程用到的设置值,和设置模块的接口 有内容需要补充上
mDTMFToneEnabled = Settings.System.getInt(getContentResolver(),
final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
-----------------
 
-----------------
BTLKF-TZ-000-30-20-SE3000-1-CMMI智能平台TD1002_联系人_收藏夹集成测试方案.doc
-----------------
高通平台通讯流程.doc
===========
 
 
===========
马冬梅
===========
设置模块概要设计NEW.doc
 
 
 
 
===========
叶振华
通话设置概要设计.doc
 
 
 
 
安全秘书概要设计.doc
安全秘书详细设计.doc
 
 
 
 
 
 
===========
 
 
 
 
 
 
 
 
>>>>>>> .r427
是不是有一个最小的系统能够做这些事情,如果有的话,我们应该怎样编译?
 
Our product development such needs:
In the system starts within 10 seconds, to be able to carry out a series of parameters of the RF calibration, we specifically do? Is there a minimum system, and if so, how should we build?
 
Thres are such needs in our product developent:
In the system starts within 10 seconds,we can begin to Calibrate parameters ,such as Radio frequency etc.
Is there a minimum system can do these, and if so, how should we build?
 
在modem源代码中我们可以
 
 
gphone@gphone-desktop:/home/shared/TD1002/trunk/modem-M7630AAABQMAZM1250$ greponly.sh Factory ./|grep Image |grep Tools
./AMSS/products/7x30/tools/qfit/QFIT.pl:991: #Factory Image Tools -> Make Factory Image
./AMSS/products/7x30/tools/qfit/QFIT.pl:994: #Factory Image Tools -> Program Factory Image
./AMSS/products/7x30/tools/qfit/QFIT.pl:1037:# FUNCTION ~~ Factory Image Tools
./AMSS/products/7x30/tools/qfit/QFIT.pl:1045:$tab2=$nb->add('tab2',-label=>"Factory\nImage Tools",
./AMSS/products/7x30/tools/qfit/QFIT.pl:1098:# FUNCTION ~~ Factory Image Tools -> Make Factory Image
./AMSS/products/7x30/tools/qfit/QFIT.pl:1133: Tools::print_log(50,"\nTab: Factory Image Tools \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1134: Tools::print_log(50,"Tab: Make Factory Image \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1147: Tools::print_log(4,"\nTab: Factory Image Tools \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1148: Tools::print_log(4,"Tab: Make Factory Image \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1149: Tools::print_log(4,"Button: Make Factory Image \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1152: #these controls used by Debug Tools Make Factory Image
./AMSS/products/7x30/tools/qfit/QFIT.pl:1193:# FUNCTION ~~ Factory Image Tools -> Program Image Verify
./AMSS/products/7x30/tools/qfit/QFIT.pl:1233: Tools::print_log(4,"\nTab: Factory Image Tools \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1234: Tools::print_log(4,"Tab: Program Factory Image into Phone \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1235: Tools::print_log(4,"Button: Program Factory Image into Phone \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1236: Tools::print_log(4,"Button: Select Factory Image Mbn File => $ImageProgramFileName \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1642: Tools::print_log(50,"\nTab: Factory Image Tools \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1643: Tools::print_log(50,"Tab: Explore Factory Image \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1644: Tools::print_log(50,"Button: Explore Factory Image \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1645: Tools::print_log(50,"Button: Select Factory Image Mbn File => $ExploreFactoryImageFile \n");
./AMSS/products/7x30/tools/qfit/QFIT.pl:1931:# FUNCTION ~~ Debug Tools -> Make Factory Image with selective partition inclusion
./AMSS/products/7x30/tools/qfit/QFIT.pl:1943:# note this block is redundant, since Make Factory Image non-Debug Tools sets lexical $abort_first_error = 1
./AMSS/products/7x30/tools/qfit/QFIT.pl:2755: #Debug Tools -> Make Factory Image
./AMSS/products/7x30/tools/qfit/Image_Difference.pm:41: Tools::print_log(0,"\n\n QFIT must be configured with JTAG CONNECTION or NO TARGET CONNECTION to compare Factory and Reference Images \n\n");
./AMSS/products/7x30/tools/qfit/Image_Difference.pm:46: Tools::print_log(0,"\n\n Compare Factory Image with Reference Image \n");
./AMSS/products/7x30/tools/qfit/Explore_Eng_Image.pm:46: Tools::print_log(0,"\n\n Preview Factory Image Layout \n");
./AMSS/products/7x30/tools/qfit/Make_Factory_Image.pm:129: Tools::print_log(0,"\n\n Make Factory Image\n");
./AMSS/products/7x30/tools/qfit/Make_Factory_Image.pm:606: #Tools::print_log(0, "\nFinished Writing Factory Image \n\n");
./AMSS/products/7x30/tools/qfit/Make_Factory_Image.pm:615: #Debug Tools -> Make Factory Image option allows user to skip this step
./AMSS/products/7x30/tools/qfit/Make_Factory_Image.pm:1509: Tools::print_log(0," Factory Partition Table \n");
 
 
 
 
 
 
 
 
 
 
 
 
 
./AMSS/products/7x30/core/storage/flash/tools/src/hostdl/config_v2/hostdl.min:81: include $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)/nand_tools.min
./AMSS/products/7x30/core/storage/flash/tools/src/hostdl/config_v1/hostdl.min:81: include $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)/nand_tools.min
./AMSS/products/7x30/core/storage/flash/tools/src/nand/nand_tools.mak:374:include $(FLASH_NAND_TOOLS_CFG)/nand_tools.min
./AMSS/products/7x30/core/storage/flash/tools/src/nand/nand_tools.mak:592: @echo "&NandConfigDir=\"$(FLASH_NAND_TOOLS_CFG)\" " >> $(NANDPARAM)
./AMSS/products/7x30/core/storage/flash/tools/src/nand/config_v1/xsr_tools/nand_xsr_tools.min:35:vpath %.c $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)/xsr_tools
./AMSS/products/7x30/core/storage/flash/tools/src/nand/config_v1/nand_tools.min:140: include $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)/xsr_tools/nand_xsr_tools.min
./AMSS/products/7x30/core/storage/flash/tools/src/nand/config_v1/nand_tools.min:208: -I$(FLASH_NAND_TOOLS_CFG)/xsr_tools
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:91: FLASH_NAND_TOOLS_CFG = config_v1
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:100: FLASH_NAND_TOOLS_CFG = config_v2
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:109: FLASH_NAND_TOOLS_CFG = config_v2
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:118: FLASH_NAND_TOOLS_CFG = config_v2
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:127: FLASH_NAND_TOOLS_CFG = config_v2
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:144: $(FLASH)/tools/src/nand/$(FLASH_NAND_TOOLS_CFG)
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:147: vpath %.c $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:155: $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG) \
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:162: vpath %.c $(FLASH_NAND_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:165: vpath %.c $(FLASH_NOR_TOOLS_SRC)/$(FLASH_NAND_TOOLS_CFG)
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:181: $(warning FLASH: nand_tools_cfg=$(FLASH_NAND_TOOLS_CFG))
./AMSS/products/7x30/core/storage/flash/src/flash_incpaths.min:185: $(warning FLASH: nand_tools_cfg=$(FLASH_NAND_TOOLS_CFG), nor_tools_cfg=$(FLASH_NOR_TOOLS_CFG))
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript:185: FLASH_NAND_TOOLS_CFG = "config_v1"
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript:194: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript:203: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript:212: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript:217: FLASH_NAND_TOOLS_CFG = "config_v1"
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript:226: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript:235: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript:244: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/SConscript:175: FLASH_NAND_TOOLS_CFG = "config_v1"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/SConscript:185: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/SConscript:195: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/SConscript:205: FLASH_NAND_TOOLS_CFG = "config_v2"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/SConscript:349: FLASH_NAND_TOOLS_CFG=FLASH_NAND_TOOLS_CFG,
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/nand_cmm_builder.py:93:&NandConfigDir="FLASH_NAND_TOOLS_CFG"
./AMSS/products/7x30/core/bsp/tools/flash/nand/build/nand_cmm_builder.py:110: nand_param_template = nand_param_template.replace('FLASH_NAND_TOOLS_CFG', env['FLASH_NAND_TOOLS_CFG'])
./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmazm.py:472: env.Replace(FLASH_NAND_TOOLS_CFG = "config_v2")
./AMSS/products/7x30/core/bsp/build/data/incpathsaabbqclym.py:467: env.Replace(FLASH_NAND_TOOLS_CFG = "config_v2")
./AMSS/products/7x30/core/bsp/build/data/incpathsaabbqolym.py:473: env.Replace(FLASH_NAND_TOOLS_CFG = "config_v2")
./AMSS/products/7x30/core/bsp/build/data/incpathsaabbqmlym.py:471: env.Replace(FLASH_NAND_TOOLS_CFG = "config_v2")
 
 
HAL HAL Hardware Abstract Layer 硬件抽象层
DAL Data Accesses Layer 数据访问层
 
 
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript
如果 MSM_ID 为 7630 或者 7x30 那么:
FLASH_CFG_ID = "FLASH_7K_DUAL_NAND_CFG"
FLASH_DAL_CFG = "config_v1"
FLASH_HAL_CFG = "config_v2"
FLASH_NAND_TOOLS_CFG = "config_v2"
FLASH_NOR_TOOLS_CFG = "config_v1"
FLASH_HOSTDL_CFG = "config_v1"
SRCROOT = "../../../../../.."
 
 
 
m.py:473: env.Replace(FLASH_NAND_TOOLS_CFG = "config_v2")
./AMSS/products/7x30/core/bsp/build/data/incpathsaabbqmlym.py:169: env.Replace(FLASH_HAL_CFG = "config_v2")
 
 
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript
-I../../core/storage/flash/src/dal/config_v1 -I../../core/storage/flash/src/hal/config_v2
 
 
bootable/recovery/updater/install.c:663:// partition is "radio" or "hboot"
bootable/recovery/install.c:146: // firmware <"hboot"|"radio"> <filename>
bootable/recovery/firmware.c:59: * else if command == "update-hboot" -> update hboot image (below)
bootable/recovery/recovery.c:97: * ** if the update contained radio/hboot firmware **:
bootable/recovery/recovery.c:101: * 8c. m_i_f_u() writes BCB with "update-radio/hboot" and "--wipe_cache"
bootable/recovery/bootloader.h:32: * completion of an "update-radio" or "update-hboot" command.
bootable/recovery/bootloader.h:50:/* Write an update to the cache partition for update-radio or update-hboot.
bootable/recovery/firmware.h:21: * The type should be one of "hboot" or "radio".
 
 
./AMSS/products/7x30/build/ms/dmss_rules.min:703: @echo Preprocessing XML file into quartz_cfg_$(BUILD)_cpp.xml...
./AMSS/products/7x30/build/ms/dmss_rules.min:705: @echo Preprocessing XML file into quartz_cfg_machine_$(BUILD)_cpp.xml...
./AMSS/products/7x30/build/ms/dmss_rules.min:711: @echo Preprocessing XML file into quartz_cfg_$(BUILD)_cpp.xml...
./AMSS/products/7x30/core/bsp/build/dmss_rules.min:430: @echo Preprocessing XML file into quartz_cfg_$(BUILD)_cpp.xml...
./AMSS/products/7x30/core/bsp/build/dmss_rules.min:432: @echo Preprocessing XML file into quartz_cfg_machine_$(BUILD)_cpp.xml...
./AMSS/products/7x30/core/bsp/build/dmss_rules.min:438: @echo Preprocessing XML file into quartz_cfg_$(BUILD)_cpp.xml...
 
 
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:915:include dmss_rules.min
./AMSS/products/7x30/core/bsp/build/msm7x30_modem.mak:364:include $(COREBSP_BUILD)/dmss_rules.min
 
 
 
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:968: #$(MAKE) -f $(COREBSP_BUILD)/msm7x30_modem.mak $(MAKEFLAGS)
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:970: $(MAKE) -f $(COREBSP_BUILD)/msm7x30_modem.mak
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:971: #$(MAKE) -f $(COREBSP_BUILD)/msm7x30_modem.mak -rk
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:995: $(MAKE) -f $(COREBSP_BUILD)/msm7x30_modem.mak corebsp_scons_clean
 
 
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
 
 
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
 
 
 
 
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AABBQDAZM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQOLYM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AABBQMLYM.cmd
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQMLYM.cmd
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AAABQOAZM.cmd
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AAABQCAZM.cmd
./HY11-N1122-3_1.2.50/AMSS/products/7x30/build/ms/AABBQDAZM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AAABQMAZM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQMLYM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQCLYM.cmd
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQOLYM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AAABQMAZM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AABBQMAZM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AABBQOLYM.cmd
 
 
我们使用 LPDDR2
 
./HY11-N0723-2_1.2.20/AMSS/products/7x30/build/ms/AAABQOLYM.cmd
 
 
 
 
gphone@gphone-desktop:/home/shared/TD1002/trunk/test$ ls ./AMSS/products/7x30/core/kernel/build_M/ -ls
总计 18100
4 drwxr-xr-x 5 gphone gphone 4096 2010-06-23 15:04 amss
18080 -rw-r--r-- 1 gphone gphone 18510381 2010-06-23 15:04 bootimg.pbn
4 drwxr-xr-x 4 gphone gphone 4096 2010-06-23 15:04 iguana
4 drwxr-xr-x 4 gphone gphone 4096 2010-06-23 15:04 iguana_server
4 drwxr-xr-x 3 gphone gphone 4096 2010-06-23 15:04 ms
4 drwxr-xr-x 4 gphone gphone 4096 2010-06-23 15:04 pistachio
 
gphone@gphone-desktop:/home/shared/TD1002/trunk/test$ ls ./AMSS/products/7x30/core/kernel/build_M/ms/ -ls
总计 16
4 -rw-r--r-- 1 gphone gphone 578 2010-06-23 15:04 iguana_libs_M.lf
4 -rw-r--r-- 1 gphone gphone 1109 2010-06-23 15:04 loadsyms_M.cmm
4 -rw-r--r-- 1 gphone gphone 296 2010-06-23 15:04 loadsyms_M.men
4 -rw-r--r-- 1 gphone gphone 146 2010-06-23 15:04 quartz_constants_M.cmm
 
 
------------------------------------------------------------------
COREBSP Creating include paths file
------------------------------------------------------------------
------------------------------------------------------------------
Creating include paths file
------------------------------------------------------------------
Generate AMSS Link Address file: cust_l4_scl_M.h.....
------------------------------------------------------------------
Determining AMSS link address from target XML file...
Preprocessing XML file into quartz_cfg_AABBQOLYM_cpp.xml...
Preprocessing XML file into quartz_cfg_machine_AABBQOLYM_cpp.xml...
Copying cleaned XML file to quartz_cfg_machine_AABBQOLYM.xml...
Preprocessing XML file into quartz_cfg_AABBQOLYM_cpp.xml...
Copying cleaned XML file to quartz_cfg_AABBQOLYM.xml...
Determining AMSS link address...
Done.
------------------------------------------------------------------
TARGET firmware
------------------------------------------------------------------------
TARGET firmware
------------------------------------------------------------------------
 
 
 
Q3 80-VH051-1 Factory Test Mode Features (FTM) for Modem Processor
Q6 80-VP610-1 Application Note: Linux/Android Sample FTM Application
 
 
./AMSS/products/7x30/build/ms/dmss7X30apps.mak:52:include dmss_objects.min
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:48:include dmss_objects.min
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:977: include $(COREBSP_BUILD)/dmss_objects.min
./AMSS/products/7x30/core/bsp/build/msm7x30_modem.mak:48:include $(COREBSP_BUILD)/dmss_objects.min
./AMSS/products/7x30/core/bsp/build/msm7x30_apps.mak:36:include $(COREBSP_BUILD)/dmss_objects.min
 
 
修改文件 vim ./AMSS/products/7x30/build/ms/dmss_flags.min
USES_COREBSP_BUILD_SYSTEM = false
 
 
./AMSS/products/7x30/build/ms/dmss_objects.min:56:
include $(SRCROOT)/build/ms/modem_objects.min
 
./AMSS/products/7x30/build/ms/modem_objects.min:242:
include $(RFA)/rf/build_cfg/msm7x30/objects_rf.min
 
./AMSS/products/7x30/modem/rfa/rf/build_cfg/msm7x30/objects_rf.min:127:
include $(RFA)/rf/gsm/rfgsm.min
 
./AMSS/products/7x30/modem/rfa/rf/gsm/rfgsm.min:57
RFGSM_FTM_SOURCES=\
ftm_gsm.c \
ftm_gsm_paprofile.c \
ftm_gsm_rfctl.c \
ftm_gsm_rndtxdata.c \
ftm_gsm_ctl.c \
ftm_gsm_dispatch.c \
ftm_gsm_ber.c \
ftm_egprs_ber.c \
ftm_se_ber.c
 
ifeq ($(USE_RF_GSM),yes)
RF_SOURCES += $(RFGSM_SOURCES)
RF_PATH += $(RFGSM_INC_PATH)
 
ifeq ($(USES_FTM),yes)
RF_FTM_SOURCES += $(RFGSM_FTM_SOURCES)
ifeq ($(USES_FTM_HWTC),yes)
RF_HWTC_SOURCES += $(RFGSM_HWTC_SOURCES)
endif
endif
endif
 
 
./AMSS/products/7x30/build/ms/dmss_7X30A_flags.min:69:USES_FTM = yes
./AMSS/products/7x30/build/ms/dmss_7X30A_flags.min:376: USES_FTM = no
./AMSS/products/7x30/build/ms/dmss_7X30A_flags.min:383:USES_FTM = yes
./AMSS/products/7x30/build/ms/dmss_7X30A_flags.min:386:# USES_FTM_HWTC = yes
./AMSS/products/7x30/build/ms/modem_incpaths.min:689:ifeq ($(USES_FTM_HWTC),yes)
./AMSS/products/7x30/build/ms/dmss_7X30_flags.min:71:USES_FTM = yes
./AMSS/products/7x30/build/ms/dmss_7X30_flags.min:363: USES_FTM = no
./AMSS/products/7x30/build/ms/dmss_7X30_flags.min:378:USES_FTM = yes
./AMSS/products/7x30/build/ms/dmss_7X30_flags.min:381:# USES_FTM_HWTC = yes
 
./AMSS/products/7x30/modem/rfa/rf/build_cfg/msm7x30/objects_rf.min:150:
RF_OBJS := $(addprefix $(TARGETDIR)/, $(RF_SOURCES:%.c=%.o) $(RFLOGS_CPP_SOURCES:%.cpp=%.o))
./AMSS/products/7x30/modem/rfa/rf/build_cfg/msm7x30/objects_rf.min:186:
$(TARGETDIR)/rf.lib : $(RF_SOURCES)
 
Fatal error: X0004U: Could not open via file 'corelibsAABBQOLYM.lf'.
./AMSS/products/7x30/build/ms/dmss_rules.min:992:COREBSP_MODEM_LIB_LISTFILE = corelibs$(BUILD).lf
./AMSS/products/7x30/build/ms/dmss_rules.min:993:COREBSP_APPS_LIB_LISTFILE = corelibs$(BUILD).lf
 
./AMSS/products/7x30/build/ms/dmss_rules.min:992:COREBSP_MODEM_LIB_LISTFILE = corelibs$(BUILD).lf
./AMSS/products/7x30/build/ms/dmss_rules.min:996: COREBSP_LIB_LISTFILE = $(COREBSP_MODEM_LIB_LISTFILE)
 
 
 
6232 -rw-r--r-- 1 gphone gphone 6378204 2010-06-23 15:06 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/AMSS_AABBQMLYM.mbn
6232 -rw-r--r-- 1 gphone gphone 6378204 2010-06-23 15:06 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/AMSS_AAABQMAZM.mbn
6232 -rw-r--r-- 1 gphone gphone 6378204 2010-06-23 15:06 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/AMSS_AABBQCLYM.mbn
6232 -rw-r--r-- 1 gphone gphone 6378164 2010-06-23 15:08 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/adsp.mbn
4 -rw-r--r-- 1 gphone gphone 121 2010-06-23 15:17 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/fsbl.mbn
4 -rw-r--r-- 1 gphone gphone 121 2010-06-23 15:17 ./AMSS/products/7x30/core/bsp/bootloaders/fsbl/build/fsbl_AABBQOLYM.mbn
4 -rw-r--r-- 1 gphone gphone 464 2010-06-23 15:17 ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AABBQOLYM.mbn
12 -rw-r--r-- 1 gphone gphone 10240 2010-06-23 15:18 ./AMSS/products/7x30/core/bsp/bootloaders/dbl/build/dbl_AABBQOLYM_preamble.mbn
196 -rw-r--r-- 1 gphone gphone 196936 2010-06-23 15:18 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/dbl.mbn
196 -rw-r--r-- 1 gphone gphone 196936 2010-06-23 15:18 ./AMSS/products/7x30/core/bsp/bootloaders/dbl/build/dbl_AABBQOLYM.mbn
6232 -rw-r--r-- 1 gphone gphone 6378204 2010-06-23 15:22 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/adsp.mbn
6232 -rw-r--r-- 1 gphone gphone 6378204 2010-06-23 15:22 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/AMSS_AABBQOLYM.mbn
764 -rw-r--r-- 1 gphone gphone 781244 2010-06-23 15:23 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/osbl.mbn
764 -rw-r--r-- 1 gphone gphone 781244 2010-06-23 15:23 ./AMSS/products/7x30/core/bsp/bootloaders/osbl/build/osbl_AABBQOLYM.mbn
200 -rw-r--r-- 1 gphone gphone 200864 2010-06-23 15:36 ./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/enandprg_AABBQOLYM.mbn
224 -rw-r--r-- 1 gphone gphone 226172 2010-06-23 15:37 ./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/nandprg_AABBQOLYM.mbn
144 -rw-r--r-- 1 gphone gphone 147112 2010-06-23 15:38 ./AMSS/products/7x30/core/bsp/tools/emmcbld/build/emmcbld.mbn
4 -rw-r--r-- 1 gphone gphone 200 2010-06-23 16:08 ./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQOLYM_combined_hash.mbn
14592 -rw-r--r-- 1 gphone gphone 14942208 2010-06-23 16:08 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/amss.mbn
14512 -rw-r--r-- 1 gphone gphone 14942208 2010-06-23 16:08 ./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQOLYM.mbn
4 -rw-r--r-- 1 gphone gphone 512 2010-06-23 17:01 ./AMSS/products/7x30/core/storage/tools/jsdcc/partition_load_pt/partition.mbn
4 -rw-r--r-- 1 gphone gphone 512 2010-06-23 17:01 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/partition.mbn
 
 
 
因为在 corebsp_build 阶段会生成 corelibsAABBQOLYM.lf 文件
所以执行文件 ./AMSS/products/7x30/build/ms/dmss_rules.min 中命令:
$(LD) --$(EXETYPE) $(LFLAGS) $(OBJ_CMD) $(TARGET_NAME).$(EXETYPE) $(ARMLIBS) $(QCTLIBS) --VIA $(OBJECT_LISTFILE) --VIA $(COREBSP_OBJ_LISTFILE) --VIA $(COREBSP_LIB_LISTFILE) --VIA $(COREBSP_AMSS_LIB_LISTFILE)
的时候不会出错
 
 
 
./HY11-N1496-3_1.2.50/HY11-N1496-3_1.2.50-20100619-tee-corebsp_build.log:2123:=== Generating corelibs/arm11/corelibsAABBQOLYM.lf
 
 
 
 
 
 
@/home/gphone/ARM//RVCT/Programs/2.2/593/linux-pentium/armlink --elf --map --info sizes,totals --list M7630AABBQOLYM1250.map --symbols --symdefs M7630AABBQOLYM1250.sym --scatter M7X30AAABBQOLYM____.scl --noremove -o M7630AABBQOLYM1250.elf /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/c_t__un.l /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/g_t_p.l /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/m_t_pu.l MAABBQOLYMlibs/dsprofile.lib MAABBQOLYMlibs/pdpreg.lib MAABBQOLYMlibs/dsprofile3gpp.lib MAABBQOLYMlibs/pdpreg.lib MAABBQOLYMlibs/DALAdieCodecDb.lib MAABBQOLYMlibs/DALAdieCodecUtils.lib MAABBQOLYMlibs/DALAdieCodec.lib MAABBQOLYMlibs/tcxomgr.lib MAABBQOLYMlibs/trm.lib ../../../../platform/libstd/lib/RVCT22arm11_Release/a1std.lib MAABBQOLYMlibs/pmic.lib MAABBQOLYMlibs/rfhal_lib_gsm.lib MAABBQOLYMlibs/rfhal_lib_wcdma.lib MAABBQOLYMlibs/rfhal_lib_gnss_notch.lib MAABBQOLYMlibs/rflib_mdsp.lib MAABBQOLYMlibs/rfdev_mgr.lib MAABBQOLYMlibs/rflib_common.lib MAABBQOLYMlibs/rflib_gnss.lib MAABBQOLYMlibs/rflib_gsm.lib MAABBQOLYMlibs/rflib_wcdma.lib MAABBQOLYMlibs/rflib_bbrx.lib MAABBQOLYMlibs/ftm_common.lib MAABBQOLYMlibs/ftm_gsm.lib MAABBQOLYMlibs/ftm_wcdma.lib MAABBQOLYMlibs/rflib_meas.lib MAABBQOLYMlibs/rfmeas_lib_wtow.lib MAABBQOLYMlibs/tcxomgr.lib MAABBQOLYMlibs/tty.lib MAABBQOLYMlibs/pdpreg.lib ../../modem/utils/oss/oss_asn1_rvds21/lib/libasn1lean.a MAABBQOLYMlibs/cgps.lib MAABBQOLYMlibs/cgps_loc_mw.lib MAABBQOLYMlibs/cgps_fs.lib MAABBQOLYMlibs/cgps_xtra.lib MAABBQOLYMlibs/cgps_sm.lib MAABBQOLYMlibs/cgps_oss.lib MAABBQOLYMlibs/cgps_sec.lib MAABBQOLYMlibs/cgps_pd_comms_wms.lib MAABBQOLYMlibs/cgps_pd_comms_tcp.lib MAABBQOLYMlibs/cgps_diag.lib MAABBQOLYMlibs/datacommon_hc.lib MAABBQOLYMlibs/datacommon_ifacectls.lib MAABBQOLYMlibs/datacommon_inet.lib MAABBQOLYMlibs/datacommon_linklayer.lib MAABBQOLYMlibs/datacommon_netiface.lib MAABBQOLYMlibs/datacommon_rmifacectls.lib --VIA AABBQOLYM.lf --VIA AABBQOLYM_corebsp.lf --VIA corelibsAABBQOLYM.lf --VIA AABBQOLYM_lib_corebsp.lf
 
 
 
@/home/gphone/ARM//RVCT/Programs/2.2/593/linux-pentium/armlink --elf --map --info sizes,totals --list M7630AABBQOLYM1240.map --symbols --symdefs M7630AABBQOLYM1240.sym --scatter M7X30AAABBQOLYM____.scl --noremove -o M7630AABBQOLYM1240.elf /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/c_t__un.l /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/g_t_p.l /home/gphone/ARM//RVCT/Data/2.2/349/lib/armlib/m_t_pu.l MAABBQOLYMlibs/dsprofile.lib MAABBQOLYMlibs/pdpreg.lib MAABBQOLYMlibs/dsprofile3gpp.lib MAABBQOLYMlibs/pdpreg.lib MAABBQOLYMlibs/DALAdieCodecDb.lib MAABBQOLYMlibs/DALAdieCodecUtils.lib MAABBQOLYMlibs/DALAdieCodec.lib MAABBQOLYMlibs/tcxomgr.lib MAABBQOLYMlibs/trm.lib ../../../../platform/libstd/lib/RVCT22arm11_Release/a1std.lib MAABBQOLYMlibs/pmic.lib MAABBQOLYMlibs/rfhal_lib_gsm.lib MAABBQOLYMlibs/rfhal_lib_wcdma.lib MAABBQOLYMlibs/rfhal_lib_gnss_notch.lib MAABBQOLYMlibs/rflib_mdsp.lib MAABBQOLYMlibs/rfdev_mgr.lib MAABBQOLYMlibs/rflib_common.lib MAABBQOLYMlibs/rflib_gnss.lib MAABBQOLYMlibs/rflib_gsm.lib MAABBQOLYMlibs/rflib_wcdma.lib MAABBQOLYMlibs/rflib_bbrx.lib MAABBQOLYMlibs/ftm_common.lib MAABBQOLYMlibs/ftm_gsm.lib MAABBQOLYMlibs/ftm_wcdma.lib MAABBQOLYMlibs/rflib_meas.lib MAABBQOLYMlibs/rfmeas_lib_wtow.lib MAABBQOLYMlibs/tcxomgr.lib MAABBQOLYMlibs/tty.lib MAABBQOLYMlibs/pdpreg.lib ../../modem/utils/oss/oss_asn1_rvds21/lib/libasn1lean.a MAABBQOLYMlibs/cgps.lib MAABBQOLYMlibs/cgps_loc_mw.lib MAABBQOLYMlibs/cgps_fs.lib MAABBQOLYMlibs/cgps_xtra.lib MAABBQOLYMlibs/cgps_sm.lib MAABBQOLYMlibs/cgps_oss.lib MAABBQOLYMlibs/cgps_sec.lib MAABBQOLYMlibs/cgps_pd_comms_wms.lib MAABBQOLYMlibs/cgps_pd_comms_tcp.lib MAABBQOLYMlibs/cgps_diag.lib MAABBQOLYMlibs/datacommon_hc.lib MAABBQOLYMlibs/datacommon_ifacectls.lib MAABBQOLYMlibs/datacommon_inet.lib MAABBQOLYMlibs/datacommon_linklayer.lib MAABBQOLYMlibs/datacommon_netiface.lib MAABBQOLYMlibs/datacommon_rmifacectls.lib --VIA AABBQOLYM.lf --VIA AABBQOLYM_corebsp.lf --VIA corelibsAABBQOLYM.lf --VIA AABBQOLYM_lib_corebsp.lf
 
build/tools/apriori/prelinkmap.c(100): build/core/prelink-linux-arm.map:13 base 0xaff00000 out of range.
 
 
 
 
gphone@gphone-desktop:~$ ifconfig
eth0 Link encap:以太网 硬件地址 00:1a:64:0a:ba:70
inet 地址:192.168.2.148 广播:192.168.2.255 掩码:255.255.255.0
inet6 地址: fe80::21a:64ff:fe0a:ba70/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:34941685 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:34140764 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:1168224662 (1.1 GB) 发送字节:1844158760 (1.8 GB)
中断:16 Memory:ce000000-ce012800
 
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:6008635 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:6008635 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:2976891464 (2.9 GB) 发送字节:2976891464 (2.9 GB)
 
 
 
 
 
最近用scons的收获
vim ./AMSS/products/7x30/core/kernel/tools/amss.py
def amss_build(self, package=None, buildname=None, system=None, **kargs):
 
Package OTA: out/target/product/msm7630_surf/update.zip
./build/core/Makefile:1031: @echo "Package OTA: $@"
 
 
.PHONY: droidcore
droidcore: files \
systemimage \
$(INSTALLED_BOOTIMAGE_TARGET) \
$(INSTALLED_RECOVERYIMAGE_TARGET) \
$(INSTALLED_USERDATAIMAGE_TARGET) \
$(INSTALLED_PERSISTIMAGE_TARGET) \
$(INSTALLED_FILES_FILE) \
$(INTERNAL_OTA_PACKAGE_TARGET)
 
./build/core/Makefile:1038:.PHONY: otapackage
./build/core/Makefile:1039:otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
 
./build/core/main.mk:693:INTERNAL_OTA_PACKAGE_TARGET :=
./build/core/main.mk:705: $(INTERNAL_OTA_PACKAGE_TARGET
 
make otapackage
M7630AABBQMLZA1240-20100610$ make out/target/product/msm7630_surf/update.zip
生成 update.zip 文件
 
 
 
 
 
 
 
芯片采用专利空间超效率回归滤波(SURF)spatial ultra-efficient recursive filtering 技术
 
QXDM Suite 在WCDMA系统中的应用
 
QXDM Suite 在WCDMA系统中的应用
 
subscriber Unit Reference platform
qsd8250_ffa qsd8250_surf
 
CDMA(码分多路)技术开发商QUALCOMM公司却仍在积极努力推进这项新技术的发展。本周一,该公司正式向市场推出了MSM5100移动
工作站芯片组,其中包括运用了QUALCOMM公司CDMA技术(QCT)的双模式用户软件(Dual-Mode Subscriber Software——DMSS)
技术、用户单元基准(Subscriber Unit Reference——SURF)开发平台以及gpsOne解决方案等,该解决方案是该公司创建基于
GPS(全球定位系统)的服务的基础。
 
 
混合型解决方案既可利用基于网络的信息也可利用基于GPS的信息,共同提供全方位的覆盖,包括室内、户外、城市以及乡村。GpsOne
技术就是混合型解决方案的样板。此外,运用QCT技术的gpsOne解决方案还使用了含专利的GPS辅助技术以提高接受者的灵敏性,从而
可以提供室内的GPS测量。它的缺点是对手提设备处理能力的要求更高并且增加了网络成本。
MSM5100设备还支持无线二元运行时间环境(Binary Runtime Environment for Wireless——BREW)的应用软件平台。
 
WCDMA
全称为Wideband CDMA,这是基于GSM网发展出来的3G技术规范,是欧洲提出的宽带CDMA技术。该标准提出了
GSM(2G)—GPRS—EDGE—WCDMA(3G)的演进策略。目前中国移动正在采用这一方案向3G过渡,并已将原有的GSM网络升级为GPRS网络。
 
CDMA2000
CDMA2000是由窄带CDMA(CDMA IS95)技术发展而来的宽带CDMA技术,由美国主推,该标准提出了从
CDMA IS95(2G)—CDMA20001x—CDMA20003x(3G)的演进策略。CDMA20001x被称为2.5代移动通信技术。CDMA20003x与
CDMA20001x的主要区别在于应用了多路载波技术,通过采用三载波使带宽提高。目前中国联通正在采用这一方案向3G过渡,并已建成
了CDMA IS95网络。
 
TD_SCDMA
全称为Time Division-Synchronous CDMA(时分同步CDMA),是由我国大唐电信公司提出的3G标准,该标准提出不经过2.5代的
中间环节,直接向3G过渡,非常适用于GSM系统向3G升级。
 
相同点:
WCDMA、CDMA2000与TD—SCDMA都属于宽带CDMA技术。WCDMA、CDMA2000与TD-SCDMA都能在静止状态下提供2Mbit/s的数据传输速率
 
双工模式
WCDMA 和 CDMA2000 采用FDD(频分数字双工)模式,
TD_SCDMA 采用TDD(时分数字双工)模式。
WCDMA与CDMA2000能够支持移动终端在时速500公里左右时的正常通信,而TD-SCDMA只能支持移动终端在时速120公里左右时的正
常通信。TD-SCDMA在高速公路及铁路等高速移动的环境中处于劣势。
 
码片速率与载波带宽
1. WCDMA(FDD-DS)采用直接序列扩频方式,其码片速率为3.84Mchip/s。,WCDMA在这方面最具优势。载波带宽方面,WCDMA采用了
直接序列扩谱技术,具有5MHz的载波带宽。WCDMA与CDMA2000要传送2Mbit/s的数据业务,均需要两个对称的带宽,分别作为上、下行
频段,因而TD-SCDMA对频率资源的利用率是最高的。
2. CDMA20001x与CDMA20003x的区别在于载波数量不同,CDMA20001x为单载波,码片速率为1.2288Mchip/s,CDMA20003x为三
载波,其码片速率为1.2288×3=3.6864Mchip/s。CDMA20001x采用了1.25MHz的载波带宽,CDMA20003x利用三个1.25MHz载波的
合并形成3.75MHz的载波带宽。
3. TD-SCDMA系统仅采用1.28Mchip/s的码片速率,采用TDD双工模式,因此只需占用单一的1.6M带宽,就可传送2Mbit/s的数据业
务。而TD-SCDMA的码片速率为1.28Mchip/s。码片速率高能有效地利用频率选择性分集以及空间的接收和发射分集,可以有效地解决多
径问题和衰落问题
 
越区切换技术
WCDMA与CDMA2000都采用了越区“软切换”技术。由于软切换在瞬间同时连接两个基站,对信道资源占用较大。而WCDMA无需基站间的同步,
通过两个基站间的定时差别报告来完成软切换。
TD-SCDMA则是采用了越区“接力切换”技术。
WCDMA的网络在许多环境下更易于部署,即使在地铁等GPS信号无法到达的地方也能安装基站,实现真正的无缝覆盖。
CDMA2000与TD-SCDMA都需要基站间的严格同步,因而必须借助GPS(Global Positioning System,全球定位系统)等设备来确定
手机的位置并计算出到达两个基站的距离。由于GPS依赖于卫星,CDMA2000与TD-SCDMA的网络布署将会受到一些限制。
 
与第二代系统的兼容性
1. 由GSM网络过渡而来,虽然可以保留GSM核心网络,但必须重新建立WCDMA的接入网,并且不可能重用GSM基站。WCDMA在升级的过程中耗资最大。
2. CDMA20003x从CDMA IS95、CDMA20001x过渡而来,可以保留原有的CDMA IS95设备。
3. TD-SCDMA系统的的建设只需在已有的GSM网络上增加TD-SCDMA设备即可。
 
专业术语介绍:
GPRS是General Packet Radio Service(通用分组无线业务)的简称。
EDGE是Enhanced Data rate for GSM Evolution(增强数据速率的GSM演进)的简称,这两种技术被称为2.5代移动通信技术。
宽带CDMA进一步拓展了标准的CDMA概念,在一个相对更宽的频带上扩展信号,从而减少由多径和衰减带来的传播问题,具有更大的容量,
可以根据不同的需要使用不同的带宽,具有较强的抗衰落能力与抗干扰能力,支持多路同步通话或数据传输,且兼容现有设备。
 
FDD是将上行(发送)和下行(接收)的传输使用分离的两个对称频带的双工模式,需要成对的频率,通过频率来区分上、下行,对于对称
业务(如语音)能充分利用上下行的频谱,但对于非对称的分组交换数据业务(如互联网)时,由于上行负载低,频谱利用率则大大降低。
 
TDD是将上行和下行的传输使用同一频带的双工模式,根据时间来区分上、下行并进行切换,物理层的时隙被分为上、下行两部分,不需要
成对的频率,上下行链路业务共享同一信道,可以不平均分配,特别适用于非对称的分组交换数据业务(如互联网)。TDD的频谱利用率高,
而且成本低廉,但由于采用多时隙的不连续传输方式,基站发射峰值功率与平均功率的比值较高,造成基站功耗较大,基站覆盖半径较小,
同时也造成抗衰落和抗多普勒频移的性能较差,当手机处于高速移动的状态下时通信能力较差。
 
软切换:即当手机发生移动或是目前与手机通信的基站话务繁忙使手机需要与一个新的基站通信时,并不先中断与原基站的联系,而是先
与新的基站连接后,再中断与原基站的联系,这是经典的CDMA技术
 
硬切换:FDMA和TDMA系统都采用“硬切换”技术,先中断与原基站的联系,再与新的基站进行连接,因而容易产生掉话。
 
接力切换:智能天线可大致定位用户的方位和距离,基站和基站控制器可根据用户的方位和距离信息,判断用户是否移动到应切换给另一
基站的临近区域,如果进入切换区,便由基站控制器通知另一基站做好切换准备,达到接力切换目的。接力切换是一种改进的硬切换技术,
可提高切换成功率,与软切换相比可以减少切换时对邻近基站信道资源的占用时间。在切换的过程中,需要两个基站间的协调操作。
 
UTMS系统就是WCDMA/GSM系统双制式手机,可以同时插入CDMA手机的UIM卡和GSM手机的SIM卡
 
PHS: “小灵通”无线市话(Personal Phone System)简称,是一种新型的个人无线接入系统。它采用先进的微蜂窝技术,通过微
蜂窝基站实现无线覆盖,将用户端(即无线市话手机)以无线的方式接入本地电话网,使传统意义上的固定电话不再固定在某个位置,可
在无线网络覆盖范围内自由移动使用,随时随地接听、拨打本地和国内、国际电话。
 
IPTV: I P T V(Internet Protocol Television),也叫网络电视,是指基于IP协议的电视广播服务。该业务将电视机或个人
计算机作为显示终端,通过宽带网络向用户提供数字广播电视、视频服务、信息服务、互动社区、互动休闲娱乐、电子商务等宽带业务。
IPTV的主要特点是交互性和实时性。它的系统结构主要包括流媒体服务、节目采编、存储及认证计费等子系统,主要存储及传送的内容
是流媒体文件,基于IP网络传输,通常要在边缘设置内容分配服务节点,配置流媒体服务及存储设备,用户终端可以是IP机顶盒+电视机,
也可以是PC。作为一个新兴产业,IPTV不但超出了传统的电信运营范围,更超越了传统的广电运营范畴。IPTV预示着一场由技术演变而
来的产业革命的到来,昭示着一个无限广阔的电子互动娱乐市场的启动。据2004年的一项调查显示,全球有29%的运营商已经提供了
IPTV服务,19%的运营商计划于当年推出IPTV服务,17%的运营商计划于2005年推出。通过IPTV,中国宽带用户,在PC上也能享受到
精彩纷呈的电视节目;通过IPTV,中国电视观众,在“IP机顶盒+电视机”上将告别单一被动的节目接受,走向集互联网内容、网络游戏、
电视节目在内的更为丰富多彩的互动数字娱乐生活。IPTV必将迅速而深刻地改变人们的生活。
IPTV业务应用领域主要为:
广电行业--互联网电台、电视台
宽带视频点播(VOD)
企业视频资讯平台--音视频信息发布平台
教育行业--音视频教学
政府机构—音视频电子政务
小区--点播电影、网上学习、医疗保健
军队、医疗、电力--现场演习、手术、调度等的音视频存储和同步监看
HSDPA高速下行分组接入技术是WCDMA的升级版,是为了满足上/下行数据业务不对称需求而提出的一种新技术,其目的是在不改
变现行WCDMA网络结构的情况下,把下行链路峰值速率提高到10.8M~14.4Mbps。作为WCDMA的演进技术,HSDPA将大大提高系统
网络的性能和容量。它不仅能有效地支持非实时业务,同时也可以用于许多实时业务,如流媒体等。
 
 
GSM信令系统
GSM信令系统在通信系统中,把协调不同实体所需的信息称为信令信息。信令负责通话的建立,GSM的信令包括传输(TX)、无线资源管理(RR)、移动管理(MM)、呼叫管理(CM)、以及操作、管理和维护(OAM)等功能部分。 GSM的信令系统的特点为: 统一的接口定义,可适应多厂商环境,特别是统一的A接口,可以使运营公司选用不同厂商生产的MSC和BSS组成系统;信令系统严格分层,支持业务开放和系统互连。在网络侧,即MSC、HLR、VLR、EIR之间均采用和OSI 7层结构一致的7号信令系统。在用户接入侧,即MSC和基站间及空中接口均采用和ISDN用户-网络接口(UNI)一致的三层结构;网络侧信令着眼于系统互连。由7号信令支持的统一的MAP信令使GSM系统可以容易地实现广域联网和国际漫游;灵活的智能网结构便于系统引入智能业务,实现快速增值; 用户侧信令着眼于业务综合接入,便于未来各类ISDN业务的引入,为向个人通信发展奠定基础。   1层次结构 GSM中采用了OSI的分层协议结构。其中下一层协议为上一层协议提供服务,上一层协议利用下一层所提供的功能,上下层之间通过原语进行通信。在建立连接之后,对等层之间形成逻辑上的通路。在信令系统中,可简单分为物理层、链路层、网络层和各种高层应用。物理层定义了信令数据链路的物理、电气和功能特性以及链路接入方法信令数据链路是由两个数据信道组成的信令传输双向通路。这两个信道传输方向相反,在数字环境下,通常采用64kbit/s的数字信道。原则上可利用PCM系统中的任一时隙作为信令数据链路。实际系统中,常常在PCM一次群中采用TS16,在二次群中,按优先级下降次序选用TS67-TS70。这些数字通路可以通过交换网络的半固定连接通路和信令终端相连接,这种方式易于实现数据链路和数据终端设备的自动重新分配。信令数据链路也可以采用模拟通路,其传输速率不低于4.8kbit/s.通常经过调制解调器和信令终端设备之间相连,不通过交换网络连接。物理层是是信令的载体,如前所述,它可以是多种多样的,如光纤、PCM传输线、数字微波等,但是第一级的功能规范并不涉及具体的传输媒体,它只是规定传输速率、接入方式等信令链路的一般特性要求。实际采用的传输媒体的电特性、误差特性、可利用度等指标要求仍由相应的CCITT G系列建议规定。另外必须注意的是,信令数据链路的一个十分重要的特性是链路应该是透明的,即在它上面传送的数据不能有任何的改变,因此,在信令链路中不能接入回声抑制器、数字衰减器、A/u律变换器等设备。链路层负责把约定的消息变成码流,并提供一定的纠错能力和流量控制。它定义信令消息沿信令数据链路传送的功能和过程。它和物理层一起为两信令点之间的消息传送提供了一条可靠的链路。链路层的功能包括: --信号单元的定界和定位 --信号单元的差错检测 --通过重发机制实现信号单元的差错校正 --通过信号单元差错率监视检测信令链路的故障 --故障信令链路的恢复过程 --信令链路流量控制网络层负责消息流的组织和路由,并行处理几个对话,保证提供多用户服务。 高层主要是指在在前三层所提供的可靠传输的基础上所进行的各种应用。在GSM各接口的分层协议结构可由图1来表示:   图1 各接口协议分层表达 GSM的信令功能分层模型包括5层:传输(TX)、无线资源管理(RR)、移动管理(MM)、呼叫管理(CM)、以及操作、管理和维护(OAM)等功能部分(见图2)。 图2 GSM 信令功能分层模型其中RR层指的是在无线电接口上的传输进行管理的规约,并提供MS和BSC之间的稳定链路。BSS实现RR的大部分功能,主要涉及无线接口、Abis接口和A接口,其它功能模块还涉及七号信令接口。MM层一是管理包括位置数据在内的用户数据库,二是管理鉴权操作,SIM,HLR和AUC。NSS(主要是 MSC)是CM层的一个重要要素。   2 网络结构 GSM的各个组成部分与相关的接口和协议如图3:     图3 GSM各部分组成和接口协议其中各个接口的协议见表1   链路层 网络层 高层协议 Um接口 LAPDm RR/MM/CM - Abis接口 LAPD Traffic Management RR/BTSM A接口 MTP2(SS No.7) MTP3+SCCP(SS No.7) DTAP/BSSMAP Map接口 MTP2(SS No.7) MTP3+SCCP(SS No.7) TUP/TCAP+MAP 表1 GSM各接口协议  这里需要特别声明一点的是接口是指两个相邻实体间的连接点,它可以承载与不同实体对有关的消息流,即几种协议。对于移动通信来说,大部分的信令都是和移动台(MS)相关。移动台虽然只和BTS有接口,但发往BTS和从BTS发往MS的信令消息中还包括了MS与 GSM网中其他设备之间的通信信息,即要在无线接口上传输各种不同的协议。因此在各接口上需要有专门的协议鉴别器(PD)和报文鉴别器(MD)来区分信令信息和哪个应用协议有关。这在信令的分析和处理时尤其要注意区分。   3 Um接口信令系统 Um接口是MS与BTS之间的接口。从表1可以得知,Um接口的链路层为LAPDm,它是在固定网ISDN的LAPD协议基础上作少量修改形成的。修改原则是尽量减少不必要的字段以节省信道资源。由于TDMA系统提供了定位和信道纠错编码,因此取消了帧定界标志和帧校验序列。另外,还定义了许多简短的帧格式用于各种特定的情况。 Um接口的网络层是收发和处理信令消息的实体。它包括了RR(无线资源管理)、MM(移动管理)、CM(呼叫管理)三个子层。  4 A接口信令系统 A接口是BSC与MSC之间的接口。物理层是数字传输2048KBIT/S的E1线路,具体标准见G.703,G.704。数据链路层基于7号信令系统 MTP2。网络层为MTP3和SCCP共同组成。提示使用SCCP的识别负责识别高层消息。网络层以上的高层协议为BSSMAP(BSS管理应用部分)和 DTAP(直接传送应用部分)。其信令系统结构模型见图4: 图4 A接口上的协议分层结构   5 Abis接口信令系统 Abis接口是NSS内BTS与BSC之间的接口。信令系统结构模型见图5: 图5 Abis 接口信令系统结构模型所用的各层协议(除物理层)分别为: LAPD Traffic Management(业务管理) DTAP   6 MAP接口信令系统 MAP是移动应用部分(Mobile Application Part)的意思,这里用来统称MAP接口是NSS内部的接口(见图3),每一接口上都有不同的协议堆成不同的层次,完成不同的功能。为了和现有的有线通信网很好的配合和过渡,MAP接口上均使用有线通信网上使用的7号信令系统,并根据GSM的特点,使用了TCAP和MAP来完成相应功能。MAP接口的分类和所使用的协议见表4: 接口 对应实体 所用协议 MAP/B接口 MSC-VLR MTP+SCCP+TCAP+MAP MAP/C接口 (G)MSC-HLR MTP+SCCP+TCAP+MAP MAP/D接口 HLR-VLR MTP+SCCP+TCAP+MAP MAP/E接口 MSC-MSC MTP+TUP/MTP+SCCP+TCAP+MAP MAP/F接口 MSC-EIR MTP+SCCP+TCAP+MAP MAP/G接口 VLR-VLR MTP+SCCP+TCAP+MAP   表2 MAP接口的分类和所使用的协议其中由于在实际运营中,MSC和VLR是集成在一起的,所以MAP/B接口对于外部一般不可见。 附录: 7号信令系统简介自70年代中期开始,基于程控交换机的大量应用和对通数字化及业务综合化的未来发展的预测,CCITT针对IDN(综合数字网)的应用,开始研究一种新的适合于数字通信网的共路信令系统(CCS Common Channel Signaling System),并于1980年提出了正式建议,这就是目前广泛使用的7号信令系统的MTP(消息传递部分)和TUP(电话用户部分)。1984年针对 ISDN的应用又补充了ISUP(ISDN用户部分)和SCCP(信令连接控制部分)建议。1988年针对电路无关消息的应用,进一步补充了TCAP(事务处理能力应用部分)的建议,从而使七号信令系统成为一个比较完备的、能支持各种业务应用的信令系统。随着通信和计算机两大领域的互相渗透以及各种电信新业务的问世,电信网需要和许多智能数据终端相连,需要传送大量与电路无关的数据,包括各种复杂的网络管理和业务控制信息。这就要求信令系统具有更大的灵活性和开放性,能够适应计算机通信和电信网智能化发展的需要,因此,自80年代中期开始,CCITT在扩充7号信令系统的过程中,充分考虑了7号信令与OSI模型的一致性。新增设的功能模块均注意与OSI层次结构的对应,并且参照OSI结构预留了未来功能模块的位置。 7号信令系统的总体目标是提供一个国际标准化的通用的信令系统。这就决定了整个系统必然包含许多不同应用的功能,而且结构上应该易于未来应用模块的灵活扩展。因此,7号信令系统区别于其它任何信令系统的一个重要特点就是采用了模块化的功能结构,实现在一个系统框架内多种应用并存的灵活性。对于一种应用来说,只用到系统的一个子集。 根据这一思想,CCITT于1980年首次提出的7号信令系统建议将系统划分成一个公共的消息传递部分(Message Transfer Part-MTP)和若干个用户部分(User Part-UP)。MTP的功能是提供一个可靠的传递系统,保证两个不同地点UP之间传递的信令消息无差错、不丢失、不错序、不重复。MTP只负责消息的传递,不负责消息内容的检查和解释,用户部分则是为各种不同电信业务应用设计的功能模块,负责信令的生成、语法检查、语义分析和信令过程控制。它们体现了 7号信令系统对不同应用的适应性和可扩充性。这里“用户”一词指的是任何UP都是公共的MTP用户,都要用到MTP传递功能的支持。具体模块及各模块之间的关系见图9。   MTP:消息传递部分 SCCP:信令¿ž接控制部分 ISP:中间服务部分 TCAP:事务处理能力部分 OMAP:操作维护应用部分 MAP:移动应用部分 ISUP:ISDN用户部分 TUP:电话应用部分 DUP:数据用户部分 TC:事务处理能力(ISP和TCAP的总称)   图9 7号信令分层协议模块 7号信令系统不但信令容量大、传输速度快,而且可以传递除电路接续信令以外的各种业务的控制信号和数据。使用7号信令的网络节点不但是程控交换的节点,还可以包括网管中心、业务控制点、网络数据库等各种智能节点,这正是通信网向智能化、综合化和个人化发展的要求。因此可以说,7号信令系统和数字传输、程控交换以及计算机智能控制构成了现代通信网的基石。 7号信令系统是以不等长消息的形式传送信令的。7号信令系统定义了三种基本的信号单元格式:信号消息单元(MSU-Message Signal Unit)、链路状态信号单元(LSSU-Link Status Signal Unit)、和填充信号单元(FISU-Fill-in Signal Unit)。其中MSU为真正携带消息的信号单元;LSSU为传送网络链路状态的信号单元;FISU不含任何消息,是在网络节点没有链路状态信息可以传送时,向对方发送的空信号,其作用是使信令链路保持通信状态,同时可以证实收到对方发送来的消息
 
 
GSM系统信令接续流程
GSM系统使用类似OSI协议模型的简化协议,包括物理层(L1)、数据链路层(L2)和应用层(L3)。L1是协议模型最底层,提供物理媒介传输比特流所需的全部功能。L2保证正确传递消息及识别单个呼叫。在GSM系统中,无线接口(Um)上的L1和L2分别是TDMA帧和LAPDm协议。在网络侧,Abis接口和A接口使用的L1均为E1传输方式,L2分别为LAPD和MTP协议。在Um接口,MS每次呼叫时都有一个L1和L2层的建立过程,在此基础上再与网络侧建立L3上的通信。在网络侧(A和Abis接口),其L1和L2(SCCP除外)始终处于连接状态。L3层的通信消息按阶段和功能的不同,分为无线资源管理(RR)、移动性管理(MM)和呼叫控制(CC)三部分。 1、建立RR连接 RR的功能包括物理信道管理和逻辑信道的数据链路层连接等。 在任何情况下, MS向系统发出的第一条消息都是CH-REQ(信道请求),要求系统提供一条通信信道,所提供的信道类型则由网络决定。CH-REQ有两个参数:建立原因和随机参考值(RAND)。建立原因是指MS发起这次请求的原因,本例的原因是MS发起呼叫,其它原因有紧急呼叫、呼叫重建和寻呼响应等。RAND是由 MS确定的一个随机值,使网络能区别不同MS所发起的请求。RAND有5位,最多可同时区分32个MS,但不保证两个同时发起呼叫的MS的RAND值一定不同。要进一步区别同时发起请求的MS,还要根据Um接口上的应答消息。 CH-REQ消息在BSS内部进行处理。BSC收到这一请求后,根据对现有系统中无线资源的判断,分配一条信道供MS使用。该信道是否能正常使用,还需BTS作应答证实,Abis接口上的一对应答消息CHACT(信道激活)和CHACK(信道激活证实)完成这一功能。CHACT指明激活信道工作所需的全部属性,包括信道类型、工作模式、物理特性和时间提前量等。 网络准备好合适的信道后,就通知MS,由IMMASS(立即指配)消息完成这一功能。在IM-MASS中,除包含CHACT中的信道相关信息外,还包括随机参考值RA、缩减帧号T、时间提前量TA等。RA值等于BSS系统收到的某个MS发送的随机值。T是根据收到CH-REQ时的TD-MA帧号计算出的一个取值范围较小的帧号。RA和T值都与请求信道的MS直接相关,用于减少MS之间的请求冲突。TA是根据 BTS收到RACH信道上的CH-REQ信息进行均衡时,计算出来的时间提前量。MS根据TA确定下一次发送消息的时间提前量。 IMMASS的目的是在Um接口建立MS与系统间的无线连接,即RR连接。MS收到IM-MASS后,如果RA值和T值都符合要求,就会在系统所指配的新信道上发送SABM帧,其中包含一个完整的L3消息(MP-L3-INF),这条消息在不同的接口有不同的作用。在Um接口,SABM帧是 LAPDm层上请求建立一个多帧应答操作方式连接的消息。系统收到SANM帧后,回送一个UA帧,作为对SABM帧的应答,表明在MS与系统之间已建立了一条LAPDm通路;另外,此UA帧的消息域包含同样一条L3消息,MS收到该消息后,与自己发送的SABM帧中相应的内容比较,只有当完全一样时,才认为被系统接受。L3消息中包含MS的IMSI,IMSI对每个 MS是唯一的,这可保证在该信道上只有一个MS可接入系统。在Abis接口,这条消息是ESTIND(建立指示),用来通知已建立LAPDm连接,作为对 IMMASS消息的应答。 在SANM帧中,透明传输到MSC的L3消息是A接口的第1条L3消息。尽管A接口的MTP连接在通话前已经建立,但对每个呼叫,在L2还要建立一个SCCP的连接。L3消息包含在A接口上SCCP的请求建链消息(CR)中传递。如请求被允许,A接口的第1条下行消息将包含在SCCP层的连接证实(CC)帧中。对SCCP层来说, CR与CC的交换是源参考地址与目的参考地址的交换。在同样的信令点码下,不同的呼叫具有不同的源地址和目的地址。 A接口上第1条消息传递完后,MS与系统之间就建立了RR连接,RR实体通知MM子层已进入专用模式。在专用模式下,MM子层和CC子层负责发送所有L2层上的消息。除了错误指示和释放本地链路以外,均由RR子层直接处理。
 
 
 
 
 
高通android笔记:
============
1. 文档部分
2. 源代码开发
3. 问题列表
 
============
1. 文档部分
文档建议用xpdf
 
高通平台开发引导:
在高通平台上从事软件开发,必须有高通公司支持。
1. 从高通网站下载相应的技术文档,工具和源代码
2. 开发过程遇到的问题通过提case反馈给高通。
高通公司提供两种级别权限的帐号,提交 case 和 下载资料,一般用户只有提交 case 的权限。
与高通签了协议的客户公司,高通才能为其开通帐号,需要开通帐号的发邮件给高通公司的:
Mr. Wang qiw@qualcomm.com
Magic Wang (王琦) QCT Technical Account Management
+86 755 3396 0733 +86 133 0290 6677
在平时,高通只通过case的方式与客户进行交互,所以,在学习使用高通平台之前,必须非常熟悉高通的case系统,具体
参考文档:
http://192.168.2.148/repositories/DocsAndTools/Docs/Critical/80-VM612-1_B_New_Case_Management_System.pdf
https://support.cdmatech.com/login/ 高通公司技术支持网站
用户名通常设置为公司邮箱
case的提交见:
如何争取的提交case?
https://support.cdmatech.com
https://support.cdmatech.com/login/
https://prodsso.cdmatech.com/sso/pages/login.jsp
周围帐号信息: zhouwei@bbktel.com.cn BBKzhou1
SURF-MSM7630 7X30A-AAABQMBZM-1090
 
正确提交case可能需要的信息:
Project Name:  TD1002
Current Software (such as Q6270BKPRZL1505):  M7630AABBQMLZA1150
Chipset (such as QSC6270): MSM7230
WCMDA Supported Bands (900,1900,2100…. if support WCDMA):  2100,1900,850,900
OS (Brew,BMP,Android,WM,ThinUI(no UI)…):  Android
OS version (Android Donuts…):  Elcair
 
 
文档阅读:
1. 了解高通公司产品,对我们使用的 cpu 架构进行学习
2. 搭建高通软件开发环境,编译他们提供的代码,学习他们的工具集(编译,下载,调试等)
3. 深入了解学习高通与android的结合部分
4. 学习android开发流程
 
80-VB551-1_D_AMSS_76xx_SW_Architect_Overview.pdf 76xx系列的软件框架
80-VM921-1_C_Android_SW_Arch.pdf android的框架介绍
 
 
############################开始######################
高通平台环境搭建,编译,系统引导流程分析
1. 在高通开发板上烧录文件系统
2. 建立高通平台开发环境
3. 高通平台,android和 modem 编译流程分析
4. 高通平台 7620 启动流程分析
5. qcril 流程分析,设置sim卡锁
6. python scons 语法学习
7. Python 语言之 scons 工具流程分析:
 
 
 
分步编译 modem 源代码,并且保存 log
. ./make-AAABQOLYM.sh xxx 的方式,分别对modem的各部分进行编译
=========================
make_cmd=make-AABBQMAZM.sh
make_cmd=make-AABBQOLYM.sh
ac_dir=`pwd`
ac_name=`basename $ac_dir`
logdir=/home/shared/logs/${ac_name}_${ac_date}/
mkdir $logdir -pv
ac_date="$(date +%Y%m%d)"
 
if [ "$ARMTOOLS" = "" ]; then
echo "please set env!!"
else
echo "ARMTOOLS=$ARMTOOLS"
fi
 
 
. ./$make_cmd setup |tee $logdir/modem-$ac_name-tee-setup.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-setup.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-setup.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-setup.log
. ./$make_cmd deps |tee $logdir/modem-$ac_name-tee-deps.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-deps.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-deps.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-deps.log
. ./$make_cmd corebsp_build |tee $logdir/$ac_name-tee-corebsp_build.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-corebsp_build.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-corebsp_build.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-corebsp_build.log
. ./$make_cmd libs |tee $logdir/modem-$ac_name-tee-libs.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-libs.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-libs.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-libs.log
. ./$make_cmd copybar |tee $logdir/modem-$ac_name-tee-copybar.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-copybar.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-copybar.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-copybar.log
. ./$make_cmd exe |tee $logdir/modem-$ac_name-tee-exe.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-exe.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-exe.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-exe.log
. ./$make_cmd bldprod |tee $logdir/modem-$ac_name-tee-bldprod.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-bldprod.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-bldprod.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-bldprod.log
. ./$make_cmd create_mem_feat_html |tee $logdir/modem-$ac_name-tee-create_mem_feat_html.log
. ./$make_cmd partition |tee $logdir/modem-$ac_name-tee-partition.log
ls -lstr `find ./ -name "*.elf"`>> $logdir/modem-$ac_name-tee-partition.log
ls -lstr `find ./ -name "*.bin"`>> $logdir/modem-$ac_name-tee-partition.log
ls -lstr `find ./ -name "*.mbn"`>> $logdir/modem-$ac_name-tee-partition.log
==========================
./HY11-N1496-3_1.2.50/AMSS/products/7x30/build/ms/AABBQMLYM.cmd
./HY11-N0216-4_1.2.20/AMSS/products/7x30/build/ms/AABBQMAZM.cmd
 
 
 
 
 
 
 
 
 
 
 
 
 
./AMSS/products/7x30/core/bsp/bootloaders/appsbl/build/SConscript:239:
env.Replace(IMAGE_TYPE = "appsbl")
env.Replace(FLASH_TYPE = "nand")
APPSBOOT_mbn = env.MbnBuilder(env.subst('${TARGET_NAME}'), APPSBOOT_bin)
 
 
 
./AMSS/products/7x30/core/bsp/bootloaders/partition/build/SConscript:186:
#target_mbn = env.MbnBuilder('${TARGET_NAME}', target_pbn)
./AMSS/products/7x30/core/bsp/bootloaders/fsbl/build/SConscript:203:
#FSBL_mbn = env.MbnBuilder('${TARGET_NAME}', FSBL_bin,
 
 
 
./AMSS/products/7x30/core/bsp/bootloaders/dbl/build/SConscript:230:
DBL_bin = env.BinBuilder('${TARGET_NAME}', DBL_elf)
DBL_mbn = env.MbnBuilder(env.subst('${TARGET_NAME}'), DBL_bin, IMAGE_TYPE="dbl", FLASH_TYPE="nand")
 
 
 
./AMSS/products/7x30/core/bsp/bootloaders/osbl/build/SConscript:246:
OSBL_bin = env.BinBuilder('${TARGET_NAME}', OSBL_elf)
OSBL_mbn = env.MbnBuilder('${TARGET_NAME}', OSBL_bin, IMAGE_TYPE="osbl", FLASH_TYPE="nand")
 
 
 
./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/SConscript:77:
ADSP_mbn = env.MbnBuilder(env.subst('${TARGET_NAME}'), adsp_mbn_path,
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/SConscript:252:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_pbn, IMAGE_TYPE="amss_mbn",
./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/SConscript:389:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_bin,
./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/SConscript:401:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_bin,
./AMSS/products/7x30/core/bsp/tools/emmcbld/build/SConscript:289:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_bin,
./AMSS/products/7x30/core/bsp/coreimg/build/arm11/CoreImage.py:237:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_pbn, IMAGE_TYPE="amss_mbn",
 
 
 
 
 
==》$(TARGETDIR)/exist 规则解析
==》setup 规则解析
==》deps 规则解析
==》corebsp_build 规则解析
==》libs copybar 规则解析
==》exe 规则解析
==》bldprod 规则解析
==》create_mem_feat_html 规则解析
==》partition 规则解析
 
 
 
==》corebsp_build 规则解析
. ./make-AAABQOLYM.sh corebsp_build |tee /home/shared/modem-$ac_name-$ac_date-tee-corebsp_build.log
144 -rw-r--r-- 1 gphone gphone 147172 2010-06-10 10:02 ./AMSS/products/7x30/core/bsp/tools/emmcbld/build/emmcbld.mbn
200 -rw-r--r-- 1 gphone gphone 200896 2010-06-10 10:04 ./AMSS/products/7x30/core/bsp/tools/flash/ehostdl/build/enandprg_AABBQOLYM.mbn
6228 -rw-r--r-- 1 gphone gphone 6376156 2010-06-10 10:05 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/adsp.mbn
6228 -rw-r--r-- 1 gphone gphone 6376156 2010-06-10 10:05 ./AMSS/products/7x30/core/bsp/amsslibs/build/qdsp5/AMSS_AABBQOLYM.mbn
224 -rw-r--r-- 1 gphone gphone 226248 2010-06-10 10:05 ./AMSS/products/7x30/core/bsp/tools/flash/hostdl/build/nandprg_AABBQOLYM.mbn
4 -rw-r--r-- 1 gphone gphone 464 2010-06-10 10:09 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/partition.mbn
4 -rw-r--r-- 1 gphone gphone 464 2010-06-10 10:09 ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AABBQOLYM.mbn
764 -rw-r--r-- 1 gphone gphone 780716 2010-06-10 10:13 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/osbl.mbn
764 -rw-r--r-- 1 gphone gphone 780716 2010-06-10 10:13 ./AMSS/products/7x30/core/bsp/bootloaders/osbl/build/osbl_AABBQOLYM.mbn
4 -rw-r--r-- 1 gphone gphone 141 2010-06-10 10:14 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/fsbl.mbn
4 -rw-r--r-- 1 gphone gphone 141 2010-06-10 10:14 ./AMSS/products/7x30/core/bsp/bootloaders/fsbl/build/fsbl_AABBQOLYM.mbn
196 -rw-r--r-- 1 gphone gphone 196792 2010-06-10 10:14 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/dbl.mbn
12 -rw-r--r-- 1 gphone gphone 10240 2010-06-10 10:14 ./AMSS/products/7x30/core/bsp/bootloaders/dbl/build/dbl_AABBQOLYM_preamble.mbn
196 -rw-r--r-- 1 gphone gphone 196792 2010-06-10 10:14 ./AMSS/products/7x30/core/bsp/bootloaders/dbl/build/dbl_AABBQOLYM.mbn
 
 
==》exe 规则解析:
此规则在文件 ./AMSS/products/7x30/build/ms/dmss_rules.min 中:
----------------------
exe : $(TARGET_NAME).$(EXETYPE) $(LINK)
$(TARGET_NAME).$(EXETYPE) : $(TARGETDIR)/exist sources $(OBJECTS) $(LIBOBJECTS) $(CUSTL4SCLFILE)
----------------------
$(TARGET_NAME).$(EXETYPE) 规则完成代码的编译
$(LINK) 规则完成链接过程
 
TARGET_NAME := $(IMAGE_TAG)7630$(BUILD)$(VERSION)
所以
TARGET_NAME=M7630AABBQOLYM1240
$(TARGET_NAME).$(EXETYPE) 为 M7630AABBQOLYM1240.elf
sources: 规则为空
$(OBJECTS)
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:92: 中:
USES_CORE_SERVICES_ONLY != yes ,所以:
OBJECTS = \
$(WMS_OBJS) \
$(A1PORT_OBJS) \
$(OEMFS_OBJS) \
$(OEMMEMGRP_OBJS) \
$(OEMSECURESYSCLOCK_OBJS) \
$(OEMSERIALPORT_OBJS) \
$(OEMSMD_OBJS) \
$(OEMGW_OBJS) \
$(CHG_OBJS) \
$(DSM_OBJS) \
$(CGPS_EXT_OBJS) \
$(CGPS_NV_OBJS) \
$(FC_OBJS) \
$(MDSP_OBJS) \
$(GMDSP_OBJS) \
$(GMDSP_PRIVATE_OBJS) \
$(MDSPSVC_OBJS) \
$(PMAPP_GEN_OBJS) \
$(PMAPP_OTG_OBJS) \
$(PM_FTM_OBJS) \
$(QDSP_OBJS) \
$(RF_MM_API_OBJS) \
$(RF_OBJS) \
$(SAM_OBJS) \
$(SAM_LIB_OBJS) \
$(SLEEPCTL_OBJS)\
$(TCXOMGR_LIB_OBJS) \
$(MODEM_MEM_OBJS) \
$(TCXOMGR_OBJS) \
$(THERM_OBJS) \
$(TOKENBUCKET_OBJS) \
$(VBATT_OBJS) \
$(DSMUTIL_OBJS) \
$(DSPDIAG_DIAG_OBJS)
 
CUSTL4SCLFILE = cust_l4_scl_$(BUILD_KCFG).h # ./AMSS/products/7x30/build/ms/dmss_flags.min:215:
./AMSS/products/7x30/build/ms/cust_l4_scl_M.h
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/cust_l4_scl_M.h
 
$(LINK) 规则解析
因为有:
ifeq ($(MEM_USAGE),yes)
LINK := mem_report
else
LINK := link_only
endif
MEM_USAGE!=yes
所以 LINK := link_only
 
link_only 规则解析
---------------------
。。。
link_only :
@echo ------------------------build------------------------------------------------
@echo TARGET $(TARGET_NAME).$(EXETYPE)
@if test -f $(OBJECT_LISTFILE); then rm -f $(OBJECT_LISTFILE); fi
#-------------------------------------------- New addition as suggested by Bin Liu-------------------------
@echo $(wordlist 1, 500, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' > $(OBJECT_LISTFILE)
@echo $(wordlist 501, 1000, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' >> $(OBJECT_LISTFILE)
@echo $(wordlist 1001, 1500, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' >> $(OBJECT_LISTFILE)
@echo $(wordlist 1501, 2000, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' >> $(OBJECT_LISTFILE)
@echo $(wordlist 2001, 2500, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' >> $(OBJECT_LISTFILE)
@echo $(wordlist 2501, 10000, $(OBJECTS_INCLUDING_ODM)) | perl -p -e 'y/ /\n/' >> $(OBJECT_LISTFILE)
@echo $(CC) -E $(CUSTH) -DCUST_L4_SCL_H=\"$(CUSTL4SCLFILE)\" $(TG) $(SCLFLAGS) -I. -I../cust -I$(CAMCORDER_CUST_INC) -I../../data/sta -I../../data/oncrpc -I../../modem/gps/inc -I../../services/utils --via $(COREBSP_INCPATHS_FILE) $(SCLFILE_IN) $(SCLFILE)
@$(CC) -E $(CUSTH) -DCUST_L4_SCL_H=\"$(CUSTL4SCLFILE)\" $(TG) $(SCLFLAGS) -I. -I../cust -I$(CAMCORDER_CUST_INC) -I../../data/sta -I../../data/oncrpc -I../../modem/gps/inc -I../../services/utils --via $(COREBSP_INCPATHS_FILE) $(SCLFILE_IN) > $(SCLFILE)
@echo $(LD) --$(EXETYPE) $(LFLAGS) $(OBJ_CMD) $(TARGET_NAME).$(EXETYPE) $(ARMLIBS) $(QCTLIBS) --VIA $(OBJECT_LISTFILE) --VIA $(COREBSP_OBJ_LISTFILE) --VIA $(COREBSP_LIB_LISTFILE) --VIA $(COREBSP_AMSS_LIB_LISTFILE)
$(LD) --$(EXETYPE) $(LFLAGS) $(OBJ_CMD) $(TARGET_NAME).$(EXETYPE) $(ARMLIBS) $(QCTLIBS) --VIA $(OBJECT_LISTFILE) --VIA $(COREBSP_OBJ_LISTFILE) --VIA $(COREBSP_LIB_LISTFILE) --VIA $(COREBSP_AMSS_LIB_LISTFILE)
#@if test -f $(OBJECT_LISTFILE); then rm -f $(OBJECT_LISTFILE); fi
@echo ------------------------------------------------------------------------
@echo Running AMSS MBN builder ......
$(amss_bin_gen)
@echo $(amss_bin_gen)
@echo Finished running AMSS MBN builder .....
@echo Patching quartz constants file...
@chmod 0777 quartz_constants_$(BUILD_KCFG).cmm
./patch_constants.pl -e $(L4_BASE_DIR)/build_$(BUILD_KCFG)/bootimg.pbn -i quartz_constants_$(BUILD_KCFG).cmm
。。。
-------------------
link_only 会对代码进行链接,生成 M7630AABBQOLYM1240.elf 然后在 通过 amss_bin_gen 由 M7630AABBQOLYM1240.elf
声场 amss.bin
amss_bin_gen 调用的是文件:
./AMSS/products/7x30/core/bsp/build/binary_gen.min:62: 中的函数:
define amss_bin_gen
@echo running 'amss_bin_gen' on $(TARGET_NAME).$(EXETYPE)
-chmod +x $(COREBSP_BUILD)/../tools/SCons/scons
cd $(COREBSP_BUILD); \
../tools/SCons/scons$(SCONS_EXT) $(PLATFORM) CHIPSET=$(CHIPSET) BUILD_ID=$(BUILDID) BUILD_VER=$(VERSION) \
MSM_ID=$(BUILD_MSM_ID) HAL_PLATFORM=$(HAL_PLAT) BUILD_ASIC=$(BUILD_ASIC) TARGET_FAMILY=$(TARGET_FAMILY) \
--verbose=$(VERBOSE) --frommake amss_elf=$(TARGET_NAME).$(EXETYPE) $(MAKE_FLAGS)
@echo Done running 'amss_bin_gen'
endef
amss_bin_gen 进入 ./AMSS/products/7x30/core/bsp/build 执行命令:
./AMSS/products/7x30/core/bsp/tools/SCons/scons amss_modem CHIPSET=msm7x30 BUILD_ID=AABBQOLY BUILD_VER=1240 MSM_ID=7x30 HAL_PLATFORM=7x30 BUILD_ASIC=7X30A TARGET_FAMILY=7630 --verbose=0 --frommake amss_elf=M7630AABBQOLYM1240.elf
此处用 scons 方式进行处理 ,scons 会到 ./AMSS/products/7x30/core/bsp/build 找 SConstruct 文件
 
./AMSS/products/7x30/core/bsp/build/SConstruct
====================================================
 
./AMSS/products/7x30/core/bsp/tools/boot/build/SConscript
 
 
 
 
./AMSS/products/7x30/core/dal/config/build/SConscript:77: dal_gen_xml = "${BUILDPATH}/dal_mod_boot_copy.xml"
 
# Add/process command line arguments
env.Tool('cmdline', toolpath = ['${BUILD_ROOT}/core/bsp/build/scripts'])
 
# Add command text formatting and utils to enviroment
env.Tool('formatting', toolpath = ['${BUILD_ROOT}/core/bsp/build/scripts'])
env.Tool('utils', toolpath = ['${BUILD_ROOT}/core/bsp/build/scripts'])
env.Tool('scons_mod', toolpath = ['${BUILD_ROOT}/core/bsp/build/scripts'])
env.Tool('config', toolpath = ['${BUILD_ROOT}/core/bsp/build/scripts'])
 
scons: done reading SConscript files.
scons: Building targets ...
 
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/SConscript:208: install_target_reloc = env.InstallAs(AMSS_RELOC, target_elf)
=======================================================
 
 
==》amss.mbn 生成过程解析
因为文件:
./AMSS/products/7x30/core/bsp/coreimg/build/arm11/CoreImage.py:237: 未被使用
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/SConscript:258: 使用
中有:
target_mbn = env.MbnBuilder('${TARGET_NAME}', target_pbn, IMAGE_TYPE="amss_mbn",FLASH_TYPE=env['TARGET_FLASH_TYPE'])
install_target_mbn = env.InstallAs("${MBN_ROOT}/amss.mbn", target_mbn)
 
 
 
如果 IMAGE_TYPE 等于 amss_mbn 那么:
image_header_cmd = "amsshash"
target_hash = target_base + ".hash"
target_hash_hd = target_base + ".hash.hd"
target_nonsec = target_base + ".hash_nonsec.mbn"
target_cert_chain = target_base + ".hash_cert_chain.mbn"
target_hash_full = target_base + ".hash_sec.mbn"
 
编译 amss 的时候实际上执行了下面的命令:
...
cmds = [
env.subst(PBOOT_GEN_ELF + " " + source_full + " " + target_hash),
env.subst(IMAGE_HEADER + " $FLASH_TYPE " + image_header_cmd + " " + \
target_hash + " " + target_hash_hd + " " + image_header_secflag + \
" " + source_full),
]
data, err, rv = env.ExecCmds(cmds, target=target_file)
...
 
因为 ./AMSS/products/7x30/core/bsp/build/scripts/utils.py:105: 中有:
env.AddMethod(exec_cmds, "ExecCmds")
所以 env.ExecCmds 执行的是文件:
./AMSS/products/7x30/core/bsp/build/scripts/utils.py:540: 中的函数:
def exec_cmds(env, cmds, dir=None, silent=None, target=None, shell=None)
 
source_base =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM
source_full =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.pbn
target_base =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM
target_full =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.mbn
target_hash =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash
target_hash_hd =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash.hd
target_nonsec =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash_nonsec.mbn
target_cert_chain =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash_cert_chain.mbn
target_hash_full =./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash_sec.mbn
 
 
 
文件:AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash_nonsec.mbn
来自函数:
concat_files (target_nonsec, files_to_cat_in_order) files_to_cat_in_order 的内容为:
['AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash.hd', 'AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.hash']
 
最终生成的结果为 target_mbn=./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.mbn
执行 install_target_mbn = env.InstallAs("${MBN_ROOT}/amss.mbn", target_mbn) 以后
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQMAZM.mbn
被安装到:
./AMSS/products/7x30/build/ms/bin/AABBQMAZ/amss.mbn 为最终生成的 modem 程序。
 
 
 
 
 
 
 
 
 
 
 
 
./AMSS/products/7x30/build/ms/armtools.min:58:EXETYPE = elf# # Target image file format
 
 
 
 
. ./make-AAABQOLYM.sh exe |tee /home/shared/modem-$ac_name-$ac_date-tee-exe.log
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQOLYM_combined_hash.mbn
./AMSS/products/7x30/build/ms/bin/AABBQOLY/amss.mbn
./AMSS/products/7x30/core/bsp/amsslibs/build/arm11/CORELIBS_AABBQOLYM.mbn
 
./AMSS/products/7x30/modem/wms/wms.min:16:vpath %.c $(WMS)/src/WMSE
./AMSS/products/7x30/modem/wms/wms.min:17:WMSE_SOURCES= wms.c \
./AMSS/products/7x30/modem/wms/wms.min:39:WMS_SOURCES = $(WMSE_SOURCES)
 
 
 
 
 
 
 
MODEM_OBJECTS = \
$(TC_OBJS) $(GSTK_OBJS) $(WMS_OBJS) $(MDSPSVC_OBJS) $(CM_OBJS) $(CM_GSM_OBJS) \
$(CNM_OBJS) $(DATA_OBJS) $(DATA_GSM_OBJS) $(DCP_OBJS) $(DH_OBJS) $(DIAG_GSM_OBJS) \
$(DSM_OBJS) $(FTM_RF_OBJS) $(RF_FTM_OBJS) $(RF_HWTC_OBJS) $(GPSSRCH_OBJS) $(RABM_OBJS) \
$(REG_OBJS) $(SM_OBJS) $(MMOC_OBJS) $(MUX_OBJS) $(SD_OBJS) $(1X_DIAG_OBJS) \
$(TCXOMGR_OBJS) $(MODEM_MEM_OBJS) $(UTILS_GSM_OBJS) $(MBMSM_OBJS) $(SRCH_OBJS) \
$(SRCH4_OBJS) $(TRM_OBJS) $(STM_OBJS) $(STM2_OBJS) $(1X_DRIVER_OBJS) \
$(SAMPLE_SERVER_OBJS) $(CB_OBJS) $(SRM_OBJS) $(GL1_HW_OBJS) $(MM_OBJS) $(MN_OBJS) \
$(RF_OBJS) $(MDSP_OBJS) $(PMAPP_GEN_OBJS) $(PMAPP_OTG_OBJS) $(PM_FTM_OBJS) \
$(CHG_OBJS) $(RF_MM_API_OBJS) $(VBATT_OBJS) $(GTMRS_OBJS) $(RRC_OBJS) \
$(PDCP_OBJS) $(MODEM_DATA_COMMON_COMMONATCOP_OBJS) $(MODEM_DATA_COMMON_UMTSATCOP_OBJS) \
$(MODEM_DATA_COMMON_DSMGR_OBJS) $(MODEM_DATACOMMON_OBJS) $(DS707_SO33_OBJS) \
$(DS707_EXTIF_SERVER_OBJS) $(DATA_MAIN_OBJS) $(DATA_MIP_OBJS) $(MODEM_DATA_1X_707_MAIN_OBJS) \
$(MODEM_DATA_1X_MIP_OBJS) $(DATA_JCDMA_OBJS) $(DATA_RLP_OBJS) $(MODEM_DATA_COMMON_1XATCOP_OBJS) \
$(UMTSCS_OBJS) $(UMTSPS_OBJS) $(GMDSP_OBJS) $(GMDSP_PRIVATE_OBJS) $(LIB_DATACOMMON_IFACECTLS_OBJS) \
$(COMPTASK_OBJS) $(GPRSPS_OBJS) $(WCDMAPS_OBJS) $(QMI_OBJS) $(RMNET_OBJS) $(L1_OBJS) \
$(L1SYS_OBJS) $(L2_OBJS) $(RR_OBJS) $(GCOMMON_OBJS) $(GLLC_OBJS) $(GMAC_OBJS) \
$(GPL1_OBJS) $(GRLC_OBJS) $(GRR_OBJS) $(GSNDCP_OBJS) $(OEMSMS_OBJS) $(PD_OBJS) \
$(DSMUTIL_OBJS) $(MODEM_DATA_COMMON_MUX_OBJS)
 
 
 
 
 
==>
. ./make-AAABQOLYM.sh partition |tee /home/shared/modem-$ac_name-$ac_date-tee-partition.log
./AMSS/products/7x30/core/storage/tools/jsdcc/partition_load_pt/partition.mbn
./AMSS/products/7x30/build/ms/bin/AABBQOLY/partition.mbn
如果有 partition 规则,那么将覆盖 corebsp_build 阶段生成的 partition.mbn 文件。
 
 
dmss 规则各部分简要说明如下:
--------------
$(TARGETDIR)/exist 创建相应的目录 ./AMSS/products/7x30/build/ms/M7X30AAABQMAZM
--------------
setup : corebsp_create_incpaths create_incpaths amsssetup amsslinkaddress firmware
corebsp_create_incpaths:
$(COREBSP_CREATE_INCPATHS_FILE)
create_incpaths:
$(CREATE_INCPATHS_FILE)
.PHONY: amsssetup
amsssetup : create_incpaths
...
ifeq ($(IMAGE), MODEM_PROC)
.PHONY: amsslinkaddress
amsslinkaddress : amsssetup
@echo Generate AMSS Link Address file: $(CUSTL4SCLFILE).....
@$(GEN_AMSS_LINK_ADDRESS)
endif
firmware :
...
-------------
#检测依赖关系,并且生成依赖文件
deps :
@echo ------------------------------------------------------------------------
@echo Checking dependency file...
@if test ! -f $(DEPFILE); then $(DEPGEN) $(DEPOPTS); fi
@echo ------------------------------------------------------------------------
-------------
#
corebsp_build : corebsp_build_action corebsp_create_incpaths corebsp_setup
corebsp_build_action :
@echo ================= COREBSP Build ==========================================
@echo COREBSP Build System and AMSS Objects
...
corebsp_create_incpaths:
$(COREBSP_CREATE_INCPATHS_FILE)
corebsp_setup : $(TARGETDIR)/exist
...
-------------
#生成库过程
ifneq ($(USES_OBJECT_ONLY), yes)
libs : $(LIBDIR)/exist copybar firmware prereqs $(LIBRARIES)
@if test -f dmss_lib.mak; then $(MAKE) --no-print-directory -f dmss_lib.mak; fi
else
libs : $(LIBDIR)/exist copybar $(LIBRARIES)
@if test -f dmss_lib.mak; then $(MAKE) --no-print-directory -f dmss_lib.mak; fi
endif
#以上内容在文件 ./AMSS/products/7x30/build/ms/dmss_rules.min 中
--------------
copybar: $(TARGETDIR)/exist
...
#LOADEFS Directory Construction
---------------
exe : $(TARGET_NAME).$(EXETYPE) $(LINK)
$(TARGET_NAME).$(EXETYPE) : $(TARGETDIR)/exist sources $(OBJECTS) $(LIBOBJECTS) $(CUSTL4SCLFILE)
#以上内容在文件 ./AMSS/products/7x30/build/ms/dmss_rules.min 中
因为
./AMSS/products/7x30/build/ms/AAABQMAZM.cmd BUILD=AAABQMAZM VERSION=1220 BUILDDIR=AAABQMAZM
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:37: IMAGE_TAG = M
./AMSS/products/7x30/build/ms/dmss7X30modem.mak:38: TARGET_NAME := $(IMAGE_TAG)7630$(BUILD)$(VERSION)
./AMSS/products/7x30/build/ms/armtools.min:58: EXETYPE = elf
./AMSS/products/7x30/build/ms/dmss_flags.min TARGETDIR = M7X30$(BUILDDIR)#
./AMSS/products/7x30/build/ms/dmss_flags.min:208: BUILD_KCFG=M
./AMSS/products/7x30/build/ms/dmss_flags.min:215: CUSTL4SCLFILE = cust_l4_scl_$(BUILD_KCFG).h
TARGETDIR = ./AMSS/products/7x30/build/ms/M7X30AAABQMAZM
./AMSS/products/7x30/build/ms/cust_l4_scl_M.h
LINK := link_only
所以有:
exe : M7630AAABQMAZM1220.elf link_only
M7630AAABQMAZM1220.elf : ./AMSS/products/7x30/build/ms/M7X30AAABQMAZM/exist sources $(OBJECTS) $(LIBOBJECTS) cust_l4_scl_$(BUILD_KCFG).h
生成的 M7630AAABQMAZM1220.elf 文件为: ./AMSS/products/7x30/build/ms/M7630AAABQMAZM1220.elf
---------------
bldprod: $(SRCROOT)/../../../BuildProducts.txt
$(SRCROOT)/../../../BuildProducts.txt:
@echo Creating build-product specification file
@if test -f $@; then chmod +rwx $@; fi
@touch $@
 
 
@echo ./AMSS/products/7X30/build/ms/bin/$(MBNDIR)/amss.mbn >> $@
@echo ./AMSS/products/7X30/build/ms/$(TARGET_NAME).elf >> $@
# ./BuildProducts.txt 文件在源代码顶层目录,内容为:
./AMSS/products/7X30/build/ms/bin/AAABQMAZ/amss.mbn
./AMSS/products/7X30/build/ms/M7630AAABQMAZM1220.elf
---------------
create_mem_feat_html: exe
...
---------------
partition :
@echo Generate partition.bin.....
@$(GENERATE_PARTITION)
---------------
 
下面分别对以上各部分进行分析:
==》$(TARGETDIR)/exist 过程解析
==》setup 过程解析
==》deps 过程解析
==》corebsp_build 过程解析
 
 
 
==》libs 过程解析
==》copybar 过程解析
==》exe 过程解析
==》bldprod 过程解析
==》create_mem_feat_html 过程解析
==》partition 过程解析
执行 . ./make-AAABQOLYM.sh partition
生成 ./AMSS/products/7x30/core/storage/tools/jsdcc/partition_load_pt/partition.mbn
覆盖 ./AMSS/products/7x30/build/ms/bin/AABBQOLY/partition.mbn 大小由 464 字节变为 512 字节
 
 
==》$(TARGETDIR)/exist 过程解析
此规则在文件 ./AMSS/products/7x30/build/ms/dmss_rules.min 中
ifeq ($(IMAGE), APPS_PROC)
$(TARGETDIR)/exist $(LIBDIR)/exist $(MBNPATH)/exist:
else
$(TARGETDIR)/exist $(LIBDIR)/exist:
endif
@echo ---------------------------------------------------------------
@echo Creating path for ${@D}
@echo
@if test ! -f $@ && test ! -d ${@D}; then mkdir -p ${@D}; mkdir -p ${@D}; fi
@echo Building ${@D} > $@
@echo ---------------------------------------------------------------
 
 
 
partition 阶段:
会对
./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AABBQOLYM.mbn
文件进行处理,生成的文件为:
./AMSS/products/7x30/core/storage/tools/jsdcc/partition_load_pt/partition.mbn
然后拷贝以上文件到
./AMSS/products/7x30/build/ms/bin/AABBQOLY/partition.mbn
 
 
AAABQMAZM 没有 SDCC_BOOT选项
ls -ls ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AAABQMAZM.mbn
ls -ls ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AAABQMAZM.bin
ls -ls ./AMSS/products/7x30/core/boot/secboot2/partition/partition_AAABQMAZM.bin
ls -ls ./AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn
ls -ls ./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.bin
 
464 2010-05-26 17:16 ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AAABQMAZM.mbn
464 2010-05-26 17:16 ./AMSS/products/7x30/core/bsp/bootloaders/partition/build/partition_AAABQMAZM.bin
464 2010-05-26 17:16 ./AMSS/products/7x30/core/boot/secboot2/partition/partition_AAABQMAZM.bin
464 2010-05-26 17:16 ./AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn
32768 2010-06-02 18:21 ./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.bin
 
 
AMSS/products/7x30/build/ms/AAABQMAZM.cmd NAND启动
AMSS/products/7x30/build/ms/AAABQOLYM.cmd eMCC启动
 
 
 
 
 
 
 
==》清空编译结果
. ./make-xxxx clean
. ./AMSS/products/7x30//build/ms/bbkAAABQOLYM.cmd clean
CLEAN APPSBL for target build AABBQOLYM
Cleaning BSP QUARTZ DISABLED.....
================= COREBSP Clean ==========================================
make -f ../../core/bsp/build/msm7x30_modem.mak corebsp_scons_clean
cd ../../core/bsp/build; ../tools/SCons/scons -c modem CHIPSET=msm7x30 BUILD_ID=AABBQOLY BUILD_VER=1240 MSM_ID=7x30 HAL_PLATFORM=7x30 BUILD_ASIC=7X30A TARGET_FAMILY=7630 --verbose=0 --frommake
 
 
 
 
 
 
bootable/bootloader/lk/target/msm7630_surf/init.c
static struct ptentry board_part_list[] = {
{
.start = 0,
.length = 20 /* 5MB */,
.name = "boot",
},
{
.start = 20,
.length = 380 /* 95MB */,
.name = "system",
},
{
.start = 400,
.length = 20 /* 5MB */,
.name = "cache",
},
{
.start = 420,
.length = VARIABLE_LENGTH,
.name = "userdata",
},
{
.start = DIFF_START_ADDR,
.length = 4 /* 1MB */,
.name = "persist",
},
{
.start = DIFF_START_ADDR,
.length = 20 /* 5MB */,
.name = "recovery",
},
};
 
 
 
高通 init.*.rc 启动脚本
init.rc
 
增加的内容:
on emmc
 
mkdir /system
mkdir /data 0771 system system
mount ext3 /dev/block/mmcblk0p12 /system ro
exec /system/bin/e2fsck -p /dev/block/mmcblk0p13
mount ext3 /dev/block/mmcblk0p13 /data nosuid nodev
 
on nand
 
mkdir /system
mkdir /data 0771 system system
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 mtd@system /system
#mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
 
mkdir /data/radio 0770 radio radio
 
chown system system /sys/devices/platform/msm_sdcc.1/polling
chown system system /sys/devices/platform/msm_sdcc.2/polling
chown system system /sys/devices/platform/msm_sdcc.3/polling
chown system system /sys/devices/platform/msm_sdcc.4/polling
chown system system /sys/devices/platform/msm_hsusb/gadget/wakeup
chown system system /sys/devices/platform/android_usb/composition
 
service qmuxd /system/bin/qmuxd &
 
group radio cache inet misc audio更改为:
group radio cache inet misc audio qcom_oncrpc diag
 
service port-bridge /system/bin/port-bridge /dev/smd0 /dev/ttyGS0 &
 
service cnd /system/bin/cnd
socket cnd stream 660 root radio
socket cne stream 660 root radio
service dhcp-service /system/bin/netcfg eth0 dhcp
oneshot
 
on property:dev.bootcomplete=1
stop dhcp-service
start dhcp-service
 
减去的内容:
mkdir /system
mkdir /data 0771 system system
 
mount yaffs2 mtd@system /system
mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
 
# Collect ramconsole data
copy /proc/last_kmsg /data/dontpanic/last_kmsg
chown root log /data/dontpanic/last_kmsg
chmod 0640 /data/dontpanic/last_kmsg
 
 
system/core/rootdir/etc/init.qcom.rc
service qcom-sh /system/bin/sh /init.qcom.sh
user root
oneshot
 
system/core/rootdir/etc/init.qcom.sh 内容:
target=`getprop ro.product.device`
case "$target" in
"msm7630_surf")
insmod /system/lib/modules/ss_mfcinit.ko
insmod /system/lib/modules/ss_vencoder.ko
insmod /system/lib/modules/ss_vdecoder.ko
chmod 0666 /dev/ss_mfc_reg
chmod 0666 /dev/ss_vdec
chmod 0666 /dev/ss_venc
;;
esac
 
 
5. qcril 流程分析,设置sim卡锁
/* 43 - RIL_REQUEST_SET_FACILITY_LOCK */
{ QCRIL_REG_ALL_ACTIVE_STATES( RIL_REQUEST_SET_FACILITY_LOCK, qcril_cm_supsvc_request_set_facility_lock ) },
 
 
Qcril_cm.c (vendor\qcom-proprietary\qcril):void qcril_cm_supsvc_request_set_facility_lock
void qcril_cm_supsvc_request_set_facility_lock
(
const qcril_request_params_type *const params_ptr,
qcril_request_return_type *const ret_ptr /*!< Output parameter */
)
const char **in_data = (const char **)params_ptr->data;
facility = qcril_cm_ss_get_facility_value(in_data[0], &facility_name[0]);
if( facility == (int)QCRIL_CM_SS_LOCK_SC )
err_no = qcril_process_event( QCRIL_EVT_INTERNAL_MMGSDI_SET_PIN1_STATUS,
params_ptr->data, params_ptr->datalen, params_ptr->t);
 
 
static qcril_dispatch_table_entry_type qcril_event_table[]
{ QCRIL_REG_ALL_STATES( QCRIL_EVT_INTERNAL_MMGSDI_SET_PIN1_STATUS, qcril_mmgsdi_request_set_pin_status ) },
查询时间哈希表,QCRIL_EVT_INTERNAL_MMGSDI_SET_PIN1_STATUS 的处理函数为:
Qcril_mmgsdi_sec.c (vendor\qcom-proprietary\qcril):void qcril_mmgsdi_request_set_pin_status
void qcril_mmgsdi_request_set_pin_status
(
const qcril_request_params_type *const params_ptr,
qcril_request_return_type *const ret_ptr /*!< Output parameter */
)
 
开启pin:
mmgsdi_status = mmgsdi_enable_pin (qcril_mmgsdi.client_id,
MMGSDI_SLOT_1,
pin_id,
pin_data,
qcril_mmgsdi_command_callback,
(mmgsdi_client_data_type)params_ptr->t);
关闭pin:
mmgsdi_status = mmgsdi_disable_pin (qcril_mmgsdi.client_id,
MMGSDI_SLOT_1,
pin_id,
pin_data,
qcril_mmgsdi_command_callback,
(mmgsdi_client_data_type)params_ptr->t);
 
 
Mmgsdilib_clnt.c (vendor\qcom-proprietary\modem-apis\msm7630_surf\api\libs\remote_apis\mmgsdilib\src)
mmgsdi_return_enum_type mmgsdi_enable_pin(
mmgsdi_client_id_type client_id,
mmgsdi_slot_id_enum_type card_slot,
mmgsdi_pin_enum_type pin_id,
mmgsdi_data_type pin_data,
mmgsdi_callback_type response_cb_ptr,
mmgsdi_client_data_type client_ref
)
此函数
cb_id = rpc_clnt_callback_register( (void *) response_cb_ptr );
(void) XDR_SEND_UINT32( clnt, &cb_id );
 
Mmgsdilib_svc.c (z:\opt\workspace\gphone\qualcomm\modem-hy11-n0723-1_1.2.00\amss\products\7x30\modem\api\rapi\uim\src):
case ONCRPC_MMGSDI_ENABLE_PIN_PROC:
mmgsdi_enable_pin_0x00020001( srv );
break;
 
xdr_status = XDR_RECV_UINT32( srv, &cb_id1 );
cb1 = (mmgsdi_callback_type) rpc_svc_callback_register( (void *) mmgsdi_callback_type_clnt_0x00020001, srv, cb_id1 );
mmgsdi_enable_pin_result = mmgsdi_enable_pin(client_id, card_slot, pin_id, pin_data, cb1, client_ref);
 
 
调用的是:
Mmgsdilib.c (z:\opt\workspace\gphone\qualcomm\modem-hy11-n0723-1_1.2.00\amss\products\7x30\modem\uim\mmgsdi\src)
中的函数
 
Mmgsdilib.c (z:\opt\workspace\gphone\qualcomm\modem-hy11-n0723-1_1.2.00\amss\products\7x30\modem\uim\mmgsdi\src)
mmgsdi_status = mmgsdi_pin_operation(client_id,
card_slot,
pin_id,
response_cb_ptr,
client_ref,
&msg_ptr,
&task_cmd_ptr,
MMGSDI_PIN_OP_ENABLE);
(*task_cmd_ptr)->cmd.cmd_enum = MMGSDI_PIN_OPERATION_REQ;
(*msg_ptr)->request_header.client_id = client_id;
(*msg_ptr)->request_header.request_type = MMGSDI_PIN_OPERATION_REQ;
(*msg_ptr)->request_header.orig_request_type = MMGSDI_PIN_OPERATION_REQ;
 
 
MMGSDI_PIN_OPERATION_REQ 的处理函数在:
Mmgsdi.c (z:\opt\workspace\gphone\qualcomm\modem-hy11-n0723-1_1.2.00\amss\products\7x30\modem\uim\mmgsdi\src)
case MMGSDI_PIN_OPERATION_REQ:
MSG_HIGH("Received MMGSDI_PIN_OPERATION_REQ",0,0,0);
mmgsdi_status = mmgsdi_process_pin_op_cmd(&task_cmd_ptr->cmd.cmd.pin_operation_req);
break; /* end case - MMGSDI_PIN_OPERATION_REQ */
 
static mmgsdi_return_enum_type mmgsdi_process_pin_op_cmd (
const mmgsdi_pin_operation_req_type *pin_op_req_ptr
)
mmgsdi_status = mmgsdi_util_determine_protocol(&protocol);
mmgsdi_status = mmgsdi_uicc_pin_operation(pin_op_req_ptr);
或者
mmgsdi_status = mmgsdi_icc_pin_operation(pin_op_req_ptr);
 
 
 
 
 
 
6. python scons 语法学习
http://bigwhite.blogbus.com/logs/32477272.html
发现或者说知道SCons是缘于Google的comp.lang.c group上的一则名为"Best Build Tool for large C projects "的帖子,帖子的作者列出了11条他认为"Best Build Tool"应该具备的特点,并欲找到这样的Build Tool。在该帖子的回复中,有人提到了Scons,说来惭愧,这是我第一次听说到有这样一个工具。一直在Unix下编写C程序,习惯了Make,也对Make的复杂度和较为陡峭的学习曲线有所了解,曾经尝试使用Autoconf和Automake,但是都因上手困难而放弃。自己心底也一直想找到一个更简单一些的但又不失功能的适合C的Build Tool,Scons是否能满足的需要的呢?好奇心驱使着我去发掘一下Scons。
 
工具的进化一直在持续着。高手能把Make玩弄于股掌之中,但是大多数人水平还是一般的,在经历了"Make hell"后他们要寻求更简单、更人性的工具,这也是工具进化的动力之一。Scons是用Python实现的一款跨平台的开源Build Tool,用Python实现意味着Scons比Make所使用的类Shell语言更贴近于自然语言,更易于理解和控制;用Python实现的另一个好处也是Make所不具备的就是很好的跨平台能力,一次编写Build脚本,在多种平台上无需修改即可运行无误,特别是从Unix->Windows这样的移植,如果使用Make则势必要修改。
 
先简单说说Scons的安装,要运行Scons势必你的机器上要有Python,虽然Python 3.0已经Release,但目前主流Python开源项目仍然在用2.x版本。我的机器上安装的就是Python 2.5。下载Scon-1.10稳定版,unzip,进入unzip后的目录,执行安装命令:python setup.py install即可。Scons会被安装到默认目录下,如果你想指定安装目标目录的话,可以使用--prefix=YOUR_INSTALL_DIR参数。
 
 
参考资料:
http://edu.cnzz.cn/NewsInfo/18491.aspx
http://dipplum.com/2009/11/13/scons-tips/
 
python 语言 os 模块使用帮助
http://blog.591by.com/python_os_help.html
在线教材,Python 基础篇
http://www.kuqin.com/docs/pythonbasic.html#id2878241
SCons命令 之 从入门到精通
http://blog.csdn.net/sharpljc/archive/2010/04/25/5526261.aspx
Python学习笔记 (常用模块)
http://hi.baidu.com/winexec/blog/item/65234fdfba450badcd116610.html
Python基础篇
http://www.kuqin.com/docs/pythonbasic.html#id2878241
 
 
 
 
2. 搭建高通软件开发环境,编译他们提供的代码,学习他们的工具集(编译,下载,调试等)
在熟悉了相关文档以后,我们要做的工作就是,怎样编译,烧写,使用高通的
1. 拿高通的样机,进行试用,
2. 用高通的
参考文档:
80-N0216-2_A_M7630AABBQMAZM1170.pdf
80-VR881-7_B_M7630AABBQMLZA1200.pdf
80-N0216-4_A_M7630AABBQMAZM1220.pdf AMSS 7x30 Release 1.2.20 (Modem,Multi-Platform) for AndroidTM Platform Enabled Devices
Release Notes for M7630AABBQMAZM1220,M7630AABBQMLYM1220
80-VR881-8_A_M7630AABBQMLZA1220.pdf AMSS 7x30 Linux Release 1.2.20 (Applications, AndroidTM Platform-Enabled)
Release Notes for M7630AABBQMLZA1220
 
 
80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf
80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf
 
如果使用 Ubuntu 9.10 64位的系统,参考文档:
80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf -》2.2.1.2 Ubuntu 9.10 (64 bit)
编译主机所需要的软件版本,参考文档:
80-N0216-2_A_M7630AABBQMAZM1170.pdf -》5.2.3 Required software for build host
GNU bash version 3.00.15 or later
GNU make version 3.8.1 or later
GNU Wget version 1.10.2 or later
GNU sed version 4.1.2 or later
GNU ldconfig version 2.4 or later
GNU Perl version 5.8.5 or later
Python 2.6.2
对于 AMSS 7630 软件, Python Ver 必须使用 2.6.2 来替代 2.4.5
 
/home/shared/qualcommon/RVDS-2.2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
文档:
80-N0216-4_A_M7630AABBQMAZM1220 RELEASE NOTES: AMSS 7X30 RELEASE 1.2.20 (MODEM, MULTI-PLATFORM) FOR ANDROID PLATFORM-ENABLED DEVICES
80-VR881-8_A_M7630AABBQMLZA1220 RELEASE NOTES: AMSS 7X30 LINUX RELEASE 1.2.20 (APPS, ANDROID PLATFORM-ENABLED) (M7630AABBQMLZA1220)
 
注意事项:
80-N0216-4_A_M7630AABBQMAZM1220.pdf
AMSS 7x30 Release 1.2.20 (Modem,Multi-Platform) for AndroidTM Platform Enabled Devices
Release Notes for M7630AABBQMAZM1220,M7630AABBQMLYM1220
80-VR881-8_A_M7630AABBQMLZA1220.pdf
AMSS 7x30 Linux Release 1.2.20 (Applications, AndroidTM Platform-Enabled)
Release Notes for M7630AABBQMLZA1220
 
5.3.4 Program eMMC
cd <Modem_Build>\AMSS\products\7x30\tools\jsdcc
Do mjsload.cmm
Initialize the SDCC card with CMM scripts
Select option 9
For use of slot SDC2, select slot 1. For use of slot SDC4, select slot 3.
Select option 7 to program the partition table.
A pop-up window opens; select the file partition.bin from the partition_load_pt directory.
Select option 10 to program all the binary data files.
Enter the build id, such as AABBQMLS or AAABQMLS, depending on the DDR configuration.
On the pop-up window, select <Apps_Build>\out\target\product\msm7630_surf.
 
 
存储器分布情况总结:
参考文档:
Memory configuration requirements for MSM7630 builds using LPDDR1
==================================================================
Configuration Memory type Memory contents Memory part requirements
AABBQMAZM NAND on EBI2 Boot loaders (OSBL+DBL) = 815 K 16-bit, 4K NAND Flash device
Modem + const data = 34 MB
APPS images (appsboot.mbn + boot.img
+ ramdisk.img + system.img +
userdata.img) = 97 MB
------------------------------------------------------------------
AABBQMAZM DDR SDRAM on EBI0 Apps code + MM + read-only data + 32-bit, 256 MB DDR
read-write data + stack + ZI data = 140MB
Apps Boot loader = 1 MB Modem code = 43 MB
ADSP = 7 MB OSBL = 2 MB
===================================================================
Memory configuration requirements for MSM7630 builds using LPDDR2
Configuration Memory type Memory contents Memory part requirements
AABBQMAZM NAND on EBI2 Boot loaders (OSBL+DBL) = 815 K 16-bit, 4 K NAND Flash device
Modem + const data = 34 MB
APPS images (appsboot.mbn + boot.img +
ramdisk.img + system.img +
userdata.img) = 97 MB
--------------------------------------------------------------------
DDR SDRAM Apps code + MM + read-only data + 128 MB for EBI0
on EBI0 and read-write data + stack + ZI data = 140MB and 128 MB for EBI1
EBI1 Apps Boot loader = 1 MB
Modem code = 43 MB
ADSP = 7 MB
OSBL = 2 MB
=====================================================================
MSM7630 Linux memory map for LPDDR1 NAND
==========================================================
0x0000 0000 ~ 0x0010 0000 Apps Boot 1MB
0x0010 0000 ~ 0x0020 0000 Shared Memory 1MB
0x0020 0000 ~ 0x03E0 0000 HLOS_EBI_2 60M
0x03E0 0000 ~ 0x0450 0000 ADSP 7MB
0x0450 0000 ~ 0x0470 0000 OSBL 2MB
0x0470 0000 ~ 0x0720 0000 Modem Code 43MB
0x0780 0000 ~ 0x0800 0000 HLOS_EBI_3 14MB
0x0800 0000 ~ 0x1000 0000 HLOS_EBI_O_CS0_Configurable 128M
==========================================================
MSM7630 Linux memory map for LPDDR1 eMMC
0x0000 0000 ~ 0x0010 0000 Apps Boot 1MB
0x0010 0000 ~ 0x0020 0000 Shared Memory 1MB
0x0020 0000 ~ 0x03E0 0000 HLOS_EBI_2 60M
0x03E0 0000 ~ 0x0450 0000 ADSP 7MB
0x0450 0000 ~ 0x0470 0000 OSBL 2MB
0x0470 0000 ~ 0x0720 0000 Modem Code 43MB
0x0720 0000 ~ 0x0750 0000 Modem EFS RAM 3MB
0x0720 0000 ~ 0x0780 0000 Shared RAM EFS 3MB
0x0780 0000 ~ 0x0800 0000 HLOS_EBI_3 8MB
0x0800 0000 ~ 0x1000 0000 HLOS_EBI_0_CS0_Configurable 128M
============================================================
MSM7630 Linux memory map diagram for LPDDR2 NAND
0x0000 0000 ~ 0x0010 0000 Apps Boot 1MB
0x0010 0000 ~ 0x0020 0000 Shared Memory 1MB
0x0020 0000 ~ 0x03E0 0000 HLOS_EBI_2 60M
0x03E0 0000 ~ 0x0450 0000 ADSP 7MB
0x0450 0000 ~ 0x0470 0000 OSBL 2MB
0x0470 0000 ~ 0x0720 0000 Modem Code 43MB
0x0720 0000 ~ 0x0800 0000 HLOS_EBI_3 14MB
0x4000 0000 ~ 0x4800 0000 HLOS_EBI_1_CS0_Configurable 128M
=============================================================
MSM7630 Linux memory map diagram for LPDDR2 eMMC
0x0000 0000 ~ 0x0010 0000 Apps Boot 1MB
0x0010 0000 ~ 0x0020 0000 Shared Memory 1MB
0x0020 0000 ~ 0x03E0 0000 HLOS_EBI_2 60M
0x03E0 0000 ~ 0x0450 0000 ADSP 7MB
0x0450 0000 ~ 0x0470 0000 OSBL 2MB
0x0470 0000 ~ 0x0720 0000 Modem Code 43MB
0x0720 0000 ~ 0x0750 0000 Modem EFS RAM 3MB
0x0750 0000 ~ 0x0780 0000 Shared RAM EFS 3MB
0x0780 0000 ~ 0x0800 0000 HLOS_EBI_3 8MB
0x0800 0000 ~ 0x1000 0000 HLOS_EBI_1_CS0_Configurable 128M
=============================================================
 
 
eMMC 启动相关:
2 eMMC Boot Concept Overview
2.1 eMMC overview
eMMC 由使用MMC接口的MMC 控制器 和 NAND flash 组成
2.2 主引导记录(MBR)
主引导记录,分区扇区(partition sector),是512字节的引导扇区,它是存储设备(如:SD card)的第一个扇区。
主引导记录记录磁盘的主分区表。
主引导记录由三部分组成:(1)主引导程序;(2)四个分区表;(3)主引导记录有效标志字。详见表1。
0000H-00D9H 主引导记录代码区
00DAH-01BDH 空闲区
01BEH-01CDH 分区1结构信息
01CEH-01DDH 分区2结构信息
01DEH-01EDH 分区3结构信息
01EEH-01FDH 分区4结构信息
01FEH-01FFH 55AAH主引导记录有效标志
分区表自偏移1BEH处开始,分区表共64个字节,表中可填入四个分区信息,每十六个字节为一个分区说明项,这16个字节含义详见表
1 Type– Partition type
2 Size – Partition size
3 Bootable – Whether the partition is a bootable partition
4 Link – Link to the EBR partition
 
flash分区表信息:
entry type size Bootable link
CFG_DATA 0x4D 40 true
QCSBL 0x45 300 false
OEMSBL 0x46 1000 false
EBR 0x47 0x1F5000 false
分区表的信息通常在文件:
./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.xml
<?xml version="1.0"?>
<!DOCTYPE image SYSTEM "weaver-1.0.dtd">
<image>
<physical_partition number="0">
<primary order="1" type="c" bootable="false" label="FAT" size="819200" readonly="false">
</primary>
<primary order="2" type="4d" bootable="true" label="CFG_DATA" size="1000" readonly="true">
<file name="dbl.mbn" offset="0"/>
</primary>
<primary order="3" type="46" bootable="false" label="OEMSBL" size="3000" readonly="false">
<file name="osbl.mbn" offset="0"/>
</primary>
<primary order="4" type="5" bootable="false" label="EXT" size="1000000">
<extended order="1" type="4e" label="EFS2" size="130048" readonly="false">
</extended>
<extended order="2" type="4c" label="FOTA" size="64000" readonly="false">
</extended>
<extended order="3" type="FF" label="PAD" size="6144" readonly="false">
</extended>
<extended order="4" type="FF" label="PAD" size="6144" readonly="false">
</extended>
<extended order="5" type="50" label="ADSP" size="14000" readonly="false">
<file name="adsp.mbn" offset="0" />
</extended>
<extended order="6" type="4a" label="MODEM_ST1" size="6144" readonly="false">
</extended>
<extended order="7" type="4b" label="MODEM_ST2" size="6144" readonly="false">
</extended>
<extended order="8" type="83" label="SYSTEM" size="409600" readonly="false">
<file name="system.img.ext3" offset="0" appsbin="true"/>
</extended>
<extended order="9" type="83" label="USERDATA" size="181920" readonly="false">
<file name="userdata.img.ext3" offset="0" appsbin="true"/>
</extended>
</primary>
</physical_partition>
</image>
gphon
 
 
==============
MSM7x27 系列芯片,只有 SDC1 支持 eMMC 启动
在 PBL 阶段 SDCC 数据传输被配置成 FIFO 模式,在 QCSBL 阶段切换到 DMA 模式
MSM7x30 系列芯片,只有 SDC2 支持 eMMC 启动 7X30 推荐使用 SDC2 进行启动
PBL 检测外部媒介的过程如下: NAND→ONENAND→eSD→NOR→eMMC.
The eSD 探测顺序是 端口: 4, 2, and 1.
The eMMC 探测顺序是 端口: 2, 1, and 4.
所以 SDC端口的GPIO口: 1, 2, and 4 不能作为普通的 GPIOs
QSD8650ATM 芯片, 只有 SDC3 支持 eMMC 启动
3.2 eMMC detection in PBL (PBL 探测设备过程流程图)
 
eMMC boot procedure in secure boot 1.0
eMMC boot procedure in secure boot 2.0
他们的启动过程是不一样的,这里介绍 boot 2.0
1. DBL loads OSBL from eMMC
2. OSBL increases clock speed
3. OSBL uses hotplug APIs to read modem AMSS, APPSBL, and application AMSS images into RAM primarily
4. OSBL creates RAM EFS file system in shared memory and copies contents of modem
storage partition into RAM EFS file system
5. OSBL takes application processor out of reset
6. APPSBL transfers control to APPS AMSS
7. OSBL transfers control to modem AMSS code
 
 
 
 
PBL 和 OSBL 都支持 HS-USB 下载,OSBL 中 HS-USB 的下载速度比 PBL 中的要快。
PBL 运行在 ROM 中 当运行在 HS-USB 模式的时候,运行 Level3 PPL1 384MHZ
 
 
数据线,时钟线,控制线,通过 SDC 与高通相连
第一个分区存储的是 DBL
总共支持 18 个磁盘分区
eMMC 的检测在 PBL 中进行
7X30 推荐使用 SDC2 进行启动
QPST 紧急加载,JTAG 三种下载方式,紧急加载目前的版本还没有支持,在测试中
配置 xml 文件 ,生成 parttion.bin 和 load**.chm
 
 
 
 
 
 
Product Definition
=================================================================
Target System: SURF 1.0.00 1.2.20
Chipset: MSM7630 1.0.00 1.2.20
RF: QTR8600 1.0.00 1.2.20
PMIC: PM8058 1.0.00 1.2.20
RAM Size - External: 256 MB 1.0.00 1.2.20
Flash Memory Type: NAND 1.0.00 1.2.20
Flash Memory Size: 256 MB 1.0.00 1.2.20
Flash Memory Page Size: 4 kB 1.0.00 1.2.20
Bluetooth mfg & part #: QTR8600 1.1.00 1.2.20
WLAN mfg & part #: WCN1312 1.0.70 1.2.20
Camera Sensor Mfg Part #, Type & Resolution: Aptina 1.0.70 1.2.20
MT9P012, Bayer, 5MP
Build System - Modem: Linux 1.0.00 1.2.20
Build System - Apps Processor: Linux 1.0.00 1.2.20
GCF: 3.37
PTCRB: 5.3
CDG: C.S0043/TIA-1035
C.S0060/TIA-1044
C.S0061/TIA-1045
C.S0062/TIA-1046
C.S0073/TIA-1084
C.S0044/TIA-1036
Modem Interface
Multimode Software Build Configurability
Multimode Operation
HSDPA Support: 14.4 Mbps
...
Telephony - GSM/UMTS supplementary services 1.1.00 1.2.20
Telephony - CDMA Supplementary Services 1.1.00 1.2.20
Telephony - Packet data support 1.0.70 1.2.20
Telephony - USB Tethered mode - Dial-up networking 1.0.70 1.2.20
Telephony - Separate connected vs. dormant state 1.0.70 1.2.20
indication
Telephony - SMS support 1.1.00 1.2.20
Telephony - CDMA broadcast SMS support 1.1.00 1.2.20
Telephony - SIM card support 1.0.50 1.2.20
Telephony - CDMA subscription in NV 1.1.00 1.2.20
Telephony - R-UIM support 1.1.00 1.2.20
Telephony - SIM Application Toolkit 1.0 1.1.00 1.2.20
Telephony - SIM/USIM/R-UIM phonebook (partial Android 1.1.00 1.2.20
support)
Telephony - CDMA Voice Privacy Selection 1.1.00 1.2.20
Telephony - Preferred Network Selection 1.1.00 1.2.20
Telephony - CDMA Roam Preference Selection 1.1.00 1.2.20
Telephony - Multimode Mode Switching 1.1.00 1.2.20
Telephony - ERI (Enhanced Roam Indicator): Partially 1.1.00 1.2.20
supported (no Android support for carrier specific ERI files)
====================================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
How to enable/disable LPDDR2
By default, LPDDR2 support is enabled. To disable LPDDR2, in the AAABQMAZ[M|A].CMD,
set USES_LPDDR2=no and make a clean build.
 
 
 
 
 
 
 
 
 
ls ./AMSS/products/7x30/build/ms/bin/AABBQMAZ/ -sl
=======================================================================
6184 -rw-r--r-- 1 gphone gphone 6330588 2010-05-17 18:02 adsp.mbn
18952 -rw-r--r-- 1 gphone gphone 19406848 2010-05-17 18:54 amss.mbn
96 -rw-r--r-- 1 gphone gphone 98076 2010-05-17 18:09 dbl.mbn
536 -rw-r--r-- 1 gphone gphone 546324 2010-05-17 18:00 ENPRG7x30.hex
4 -rw-r--r-- 1 gphone gphone 141 2010-05-17 18:09 fsbl.mbn
624 -rw-r--r-- 1 gphone gphone 636828 2010-05-17 18:02 NPRG7x30.hex
720 -rw-r--r-- 1 gphone gphone 736868 2010-05-17 18:08 osbl.mbn
4 -rw-r--r-- 1 gphone gphone 464 2010-05-17 18:06 partition.mbn
=======================================================================
以上文件的说明参考文档:
80-N0216-4_A_M7630AABBQMAZM1220.pdf
5.5 Multistage boot loader and JNAND for memory configurations
amss.mbn AMSS modem binary image
dbl.mbn Device boot loader binary image
NPRG7x30.hex QPST host downloader (QPST download not yet validated)
fsbl.mbn Fail-safe boot loader binary image (only used by download tools)
osbl.mbn OS boot loader binary image
partition.mbn Partition table binary
Appsboot.mbn Application boot loader binary image (emmc_appsboot.mbn for eMMC boot)
boot.img Android boot image (application processor)
system.img (system.img.ext3 for eMMC boot) Android system image (application processor)
userdata.img (userdata.img.ext3 for eMMC boot) Android user data
 
镜像文件烧写:
This list of files must be placed into a single directory before the programming process is started.
amss.mbn ­ Main AMSS binary
dbl.mbn ­ Device boot loader ./AMSS/products/7x30/core/boot/secboot2/dbl/shared/src/dbl_rules.min
eNPRG7500.hex ­ EMMCBLD HEX binary, renamed from MPROG7x30.hex
emmc_appsboot.mbn ­ Apps boot loader
loadpt.cmm ­ Used by MSP.exe
msp.exe ­ Mass Storage Programmer
osbl.mbn ­ OS boot loader
partition.bin ­ Partition table, used by msp.exe
partition.mbn ­ Dummy file to coincide with QPST, copy of partition.bin file is fine
system.img.ext3 ­ Linux system image file
userdata.img.ext3 ­ Linux user partition
 
dbl.mbn 生成规则文件
 
Osbl_mc.c (
amss\products\7x30\core\boot\secboot2\osbl\shared\src):
osbl_main_ctl
 
 
 
 
ifeq ($(USES_L4), yes)
$(L4BINPATH)/bootimg.pbn:
endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
====================
软件下载
====================
QPST,QXDM 使用介绍
QPST (QUALCOMM Product Support Tool的缩写)一个针对高通芯片开发的传输件。简单的说就是用高通处理芯片
的手机理论上都可以用QPST传输文件。下载:http://link.52lg.com/52lg/CDM/qita/QPST2_7.rar
QXDM(The QUALCOMM Extensible Diagnostic Monitor)是高通公司(Qualcomm)公司发布的可以对手机终端
所发数据进行跟踪有效工具,通过对数据的分析可以诊断信令流程、分析数据包的正确与否等。QXDM同时适用于1x或DO的
空口诊断,在测试中有重要作用,正确合理的使用可以为我们测试提供便捷的定位手段。
 
美国高通的软件,可以用在GSM,CDMA,WCDMA,UMTS等。一般的我们用QPST和QXDM,QPST现在crack的最高版本基本是2.7的,QXDM的是3.09.10。
附件中的版本是现在发现的最新的crack版本 ,版本为3.09.16.
希望更新的版本快点出来。
顺便赚点RDb币,谢谢大家
 
 
QPST(高通开发的手机操作工具)、QXDM(高通开发的诊断软件,搜罗手机和剖析实时数据采集工具)
 
 
无意见发现QPST可以读出UIM卡通讯录
 
酷派S60修改电信定制快捷按钮成功了!
http://www.xcar.com.cn/bbs/viewthread.php?tid=11117939&page=1#pid239670347
 
【原创】高通平台NV恢复备份机制小结
http://www.cnblogs.com/hengfeng/archive/2009/10/07/1578632.html
 
【原创】WCDMA新平台BOOT的开发调试总结
http://www.cnblogs.com/hengfeng/archive/2010/01/13/1646554.html
 
【原创】高通平台音频调试心得
http://www.cnblogs.com/hengfeng/archive/2009/07/19/1526489.html
 
# •什么是QPST
# •QPST文件传输
# •QPST修改手机内部参数
http://baike.soso.com/h4096717.htm?sp=l4096718
 
 
1。程序放在nand中的情况,以高通平台举例
 
handset 中bootloader启动,init ebi bus,mem,then uart or usb,
 
pc 端qpst send package to handset,验证通过后,循环发数据写到nand flash 中,这样就实现下载程序到手机。
 
当然这里头bootloader 也很复杂,一般放在nand flash中的第0块,不会超过8k。是通过JTAG事先写进去的。
 
2。当然还有boot code是放在rom或者nor flash 中的。同样该boot code会init mem,uart口。然后与pc机建立通讯,下载程序到flash中。
 
1 和2的区别是nand 不是可执行的,它必须把代码考到内部ram中执行,但nor 可以直接执行boot代码
 
 
 
 
 
在工程模式里设置6800音量
http://www.12540.org/?p=1192#more-1192
1、安装6800的QPST驱动,下载地址:QPST驱动Install_MSI_Sprint.exe
2、安装QPST 版本2.7 BUILD 264,下载地址:改卡程序qpst-2.7 build 264.rar
3、安装QPST端口驱动MODEN.rar(手机连QPST的端口驱动)
安装的时候一定要选上UTstarcom驱动
 
烧录文件的压缩包:
./doc/library/sw/renew/HK11-N0216-3.zip
./doc/library/sw/renew/HK11-VU533-4.zip
参考文档:
数据线和QPST的使用方法
http://www.wangchao.net.cn/bbsdetail_1902757.html
 
QPST 使用笔记:
设备管理器-> 调制解调器 -> Qualcomm HS-USB Modem 9004 ->双击(或者右键属性) -> 调制解调器 -> 记下该端口(com4)
User Name: Yulong
Password: uplink
Admin Key: 1116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
QPST包括七个小软件和一个用户手册,用户手册先懒得看了,使用QPST前要先用它的QPST configuration注册一下端口,打开这个软件后,在界面上的PORTS页有一个COM端口列表,默认应该有COM1,COM2二个,我们需要手工把装上数据线驱动以后电脑所使用的那个COM口加上,ADD的时候输入的PORT和LABEL都和电脑里显示的一致就行,比如COM3或COM4(具体根据电脑确定),完成以后在PORTS列表就包括手机所用的这个COM口了,这是第一步
 
接下来就可以复制铃声(当然,请先用数据线连接手机),这是要用EFS explorer了,启动它时首先它会要求你选择一个可用的手机,正常情况下会有一条记录显示在选择列表里,不管它什么内容肯定是你的手机了,选择并确定,它就会与手机连接,成功以后会列出手机上的所有目录以及文件,我们通过彩E发送的附件就存放在imap/att目录下,可能目录有记错(因为现在没有连接手机所以不能核对目录名,可以根据曾经用彩E发过什么附件来找一下),在该目录下点击鼠标右键,选择new菜单,然后再选择一下你要复制的文件在电脑上的位置并确定就行了,它就开始传送。
 
这里有个问题,在传送完成以后我们在手机上却看不到该附件,因此在传送目的文件以前我们可以先用彩E发一个小文件到手机,小文件的文件名要和我们真正要传的文件的文件名一致,这样当传送完成以后在彩E目录打开那个小文件时实际就是打开了我们的目的文件,再然后要如何处理就和彩E附件一模一样随你便了:)
 
据首先透露QPST这回事的论坛XD说,这样最大可以传260K,不过直接放到铃声目录下却不行,我都没有核实过,本来做了个三百多K的铃声想传一下,终因为心痛这个空间而作罢,传了一首150K的歌片断上去,听着还挺不错:)
 
只是我在传送文件时会碰到一个错误,说有其他程序正在运行,操作无法完成,我关闭了其他程序包括病毒防火墙还是不行,不知什么原因,但文件已传送成功。
 
如果打开EFS explorer时没有可用手机让你选择,可以重启手机试试,应该可以了,在这个软件里还可以连接或断开手机,以及重启手机等,一般传文件时手机会脱离移动网络,传完后需要重启一下以恢复网络。
 
从此以后有了这个软件,再配合一个做铃声的工具,就可以把自己喜欢的歌都做到手机上了,何其爽哉:P),至于QPST中除了以上二个以外的其他软件,暂还没有试过也不知其用途,知道的朋友请补充:)BTW:购机以后本想写一个使用感受,但却一直拖着,没想到还是先写了篇QPST的基本使用呵呵
 
如果有谁想听听我的这首150K的铃声可以在我的个人网站下载:http://huhuan.3322.org/lg6660/TakeMeToYourHeart.mmf
网站开放时间为我在线时,一般为晚上:)
 
 
 
 
 
 
 
 
ONC远程过程调用协议。ONC为“开放网络计算机”。
 
 
 
编译bsp
qualcomm/doc/library/sw/MSM7x30 linux/release/M7630AABBQMAZM1170/HY11-N0216-2_2/HY11-N0216-2_1.1.70/AMSS/products/7x30/core/bsp
从下面的文件类型和尝试情况来看,编译 boot loader 等用到了新的编译工具,所以进行相应的安装。
sudo apt-get install mono-debugger
sudo apt-get install scons
错误: scons: *** No SConstruct file found 解决方法:
sudo apt-get install libicu-dev libreadline5-dev
SCons是一个与GNU make, qmake, CMake以及Ant类似的软件构建管理工具。SCons is a next-generation software
construction tool, or make tool--that is, a software utility for building software (or other
files) and keeping built software up-to-date whenever the underlying input files change.
Scons 可以完全替代GNU Automake/Autoconf。Automake/Autoconf脚本configure的作用有两个:一是平台环境(头文件、
数据类型、库等)检测(交叉编译时这部分很重要),二是定制软件特性(例如Minigui的configure皿-enable-clipboard选
项表示支持剪切板)。
安装Scons 之 技术内幕
http://hi.baidu.com/xstar2008/blog/item/cda8e75293ca70090df3e32b.html
The SConscript in the build folders are the makefiles for each boot loader
对于新的工具 scons, build 目录下的 SConscript 就类似 makefiles的角色
 
 
 
 
关于 RVDS 工具的信息:
RVDS——ARM系统开发的首选工具
RVDS是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,目前最高版本是3.0。它由RealView编译器(RVCT)、
RealView汇编器(armasm)、RealView链接器(armlinker),以及RealView调试器(RVDebugger)组成。
RVCT是RVDS的编译工具,它可以提供多种优化级别,帮助开发人员完成代码密度与代码执行速度上的不同层次优化。
此外,RVCT的很多编译特性还可以帮助开发人员进一步提升代码效率。
RVCT的优化级别与优化方向
提到RVCT就不能不提armcc的4个优化级别和2个编译选项,分别是-O1、-O2、-O3、-O4,以及-Otime、-Ospace。
-Ospace和-Otime负责提供代码优化的大方向,告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码
性能(-Otime);而 -O1、-O2、-O3、-O4则分别代表4种逐次递进的不同优化级别。
RealView Development Suite Version 4.0 中文用户手册
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.rvds/index.html
31 以后的版本的编译器armcc,tcc,armcpp,tcpp 已经整合成一个编译器armcc
 
 
 
 
 
M7X30AAABQOLYM//M7X30AAABQOLYM.dep
Checking dependency file...
Can't stat ../../multimedia/audio/audpp/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audpp/mbadrc/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/adsprtossvc/remote_apis: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/auddec/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audpp/audqconcert/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audenc/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audfmt/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audbt/src: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../multimedia/audio/audtp/inc: 没有该文件或目录
...
省略...
...Can't stat ../../core/securemsm/akaalgo/inc: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
Can't stat ../../wconnect/api/rapi/wlanhs/inc: 没有该文件或目录
at ../../tools/build/depgen.pl line 776
------------------------------------------------------------------------
dmss7X30modem.mak:964: COREBSP Build System Enabled
 
 
 
 
 
设备无法切换到下载模式
http://life-devanxu.blogspot.com/2009/03/blog-post_31.html
==========
COULDN'T CHANGE PHONE TO DOWNLOAD MODE
This error can have multiple causes.
One cause is the phone has one or more problems switching from DIAG mode to DLOAD
(Downloader) mode after successfully receiving the command to do so. Specifically,
this is CMD_CODE 58 (Switch to Downloader). QPST has to switch the phone offline
(CMD_CODE 68) and then into downloader mode using CMD_CODE 58. The target may not
be processing one of those mode change commands properly. To verify, go to the
QPST Bin directory, which is typically in "C:\Program Files\QPST\Bin" and search
for a file named "Dload_COMx.dbg", where x = the COM port number QPST was using
for the previous download attempt. Once you find that file, attach it to your
Case for analysis.
 
If you have QXDM, you can manually command the phone to switch to DLOAD mode by
sending the following command:
SendRawRequest "0x3A"
 
The target should switch to DLOAD mode and indicate that on the UI as well as on
the COM port QPST is monitoring. In this state, you can disable the "Auto
Backup/Restore" option on QPST and proceed to flash upgrade the target without
backing up NV. However, before you do this, it is necessary that you have already
created or received a QCN backup file for your particular target. QCN backup files
contain target-specific calibration data and can be created manually by using QPST
Software Download's BACKUP tab. If you need the QCN for your target, create a Case
and include the serial number. Qualcomm can provide the latest QCN backup file from
when the device was last calibrated at our factory. Once an upgrade from DLOAD mode
completes, the QCN will need to be restored to the device manaully using QPST
Software Download's RESTORE tab.
 
Another possible cause is that once the phone is told to switch to DLOAD mode by
QPST, the USB virtual COM port changes to a new port. In this situation, it is
helpful to observe the Windows Device Manager on the Ports branch to see if the
target re-enumerates on a different port. If it does, QPST will allow you some
time to manually browse and reselect the correct COM port before it displays this
message. A future version of QPST will automatically follow the ports and select
the correct one in these conditions. However, for now, you must always manually
connect QPST to the COM port.
 
 
The Hardware Watchdog is disabled
QPST needs the Hardware WatchDog enabled for reset and entering into download mode.
 
 
COM error 80004005 during SetPhoneMode
When you get this error (captured in the debug file of the COM port to which you're
trying to download the software, see example below) generally it is because of one
of these reasons:
 
 
The phone won't switch to offline mode because some phone task is voting against
the change.
The phone switches offline, but won't switch to download mode.
The request to switch to offline or download mode causes the phone to crash or reset.
The user is trying to download to a WinMobile phone over TCP/IP. They would have to
reconfigure the phone's USB to use composite mode (use the switchUSB application on
the phone).
The change to download mode was successful but the phone re-enumerated on a different
COM port.
 
Example of debug file with this error:
 
 
QPST Software Download 2.7.0.312 DEADD00D SURF1000-800 M6290A-KPRZL-1.2.0070
Modem file (and path for flash programmer): D:\Um\build\ms\bin\KPRZL\amss.mbn
Flash Programmer file: D:\Um\build\ms\bin\KPRZL\NPRG6280.HEX
Sending Diag Ping Command
Jumping to Download Mode
COM error 80004005 during SetPhoneMode
Download end, status 103, error 115
Exit multi-image download with status 0x00000000
==========
 
 
 
 
 
 
./HY11-N0216-2_2/HY11-N0216-2_1.1.70/AMSS/products/7x30/build/ms/AAABQMAZM.cmd
====
BUILD=AAABQMAZM VERSION=1170 BUILDDIR=AAABQMAZM
ASIC=7X30A
USES_HSU_CHG_BOOT=yes
USES_HSU_FAST_CHARGE=yes
USES_DATA_ON_MODEM=yes
USES_AKA=yes
USES_GPSONE_GEN8=yes
USES_DATACOMMON_2H09_1_DUAL_PROC_MODEM=yes
USES_FTM_AUDIO=yes
USES_LINUX_BT=yes
USES_SMEM_SW_SPINLOCK=yes
USES_BT_FTM_MODEM=yes
USES_FMRDS=yes
USES_SMD_BRIDGE=yes
USES_PMIC_ON_APPS=yes
USES_LPDDR2=yes
====
./HY11-N0216-2_2/HY11-N0216-2_1.1.70/AMSS/products/7x30/build/ms/AABBQMAZM.cmd
====
BUILD=AABBQMAZM VERSION=1170 BUILDDIR=AABBQMAZM
ASIC=7X30A
USES_HSU_CHG_BOOT=yes
USES_HSU_FAST_CHARGE=yes
USES_DATA_ON_MODEM=yes
USES_AKA=yes
USES_GPSONE_GEN8=yes
USES_DATACOMMON_2H09_1_DUAL_PROC_MODEM=yes
USES_FTM_AUDIO=yes
USES_LINUX_BT=yes
USES_SMEM_SW_SPINLOCK=yes
USES_BT_FTM_MODEM=yes
USES_FMRDS=yes
USES_SMD_BRIDGE=yes
USES_PMIC_ON_APPS=yes
 
====
./HY11-N0216-2_2/HY11-N0216-2_1.1.70/AMSS/products/7x30/build/ms/AAABQMLZM.cmd
====
BUILD=AAABQMLZM VERSION=1010 BUILDDIR=AAABQMLZM USES_GPSONE_GEN7=yes
ASIC=7X30A
USES_CRYPTOMINCS=yes
USES_MIP=yes
USES_RMNET=yes
USES_QMI=yes
USES_LPDDR2=yes
====
 
 
 
 
 
 
 
 
 
 
 
目前的问题
怎样编译 Boot Loader 软件是否需要重新配置开发环境,pythone Scons ,安装 RVDS 等,从那里获取这些工具?
相应的安装配置文档?
=====================================================
 
AMSS/products/7x30/apps/dialer/dialer.mif
MIF文件,这个大家都知道了。原则上来说,每个module都需要有标识自身的MIF文件
一个UNIX环境下编译动态brew app的万能Makefile
http://blog.sina.com.cn/s/blog_54b5ea250100ax83.html
Brew ARM makefile 经验
http://blog.csdn.net/lusonglin3g/archive/2009/08/31/4501972.aspx
brew v11
 
BREW 系列教材====================================
brew 开发之入门必读
http://www.chinaeda.cn/show.aspx?id=16313&cid=10
REW SDK入门
http://www.chinaeda.cn/show.aspx?id=16312&cid=10
BREW SDK入门篇(一)
http://www.chinaeda.cn/show.aspx?id=16313&cid=10
BREW SDK入门篇(二)
http://www.chinaeda.cn/show.aspx?id=16314&cid=10
关于 BREW API Hook 的实现方法及用途的探讨
http://www.chinaeda.cn/show.aspx?id=16315&cid=10
深入BREW消息处理机制
http://www.chinaeda.cn/show.aspx?id=16316&cid=10
BREW高手之路-解析BREW学习过程
http://www.chinaeda.cn/show.aspx?id=16317&cid=10
BREW究竟是什么-BREW本质之我见
http://www.chinaeda.cn/show.aspx?id=16318&cid=10
CDMA增值业务平台BREW的研究与应用
http://www.chinaeda.cn/show.aspx?id=16319&cid=10
深入BREW模块加载机制
http://www.chinaeda.cn/show.aspx?id=16320&cid=10
深入Brew编程之——接口函数替换技术及其应用
http://www.chinaeda.cn/show.aspx?id=16321&cid=10
 
 
 
 
 
莫会富
./doc/library/sw/AMSS 7X30/Development-SoftwareBuildDebugTest/80-N0647-1_A_Elfweaver_Compiling.pdf
文档介绍怎样重编译 Elfweaver.ext 工具,怎样直接用 python 编程语言执行 Elfweaver
文档适合给予 L4的软件版本
Elfweaver 是用户用来操作 elf 的一种工具,可以参考文档:
http://wiki.ok-labs.com/downloads/release-2.1.1-patch.9/elfweaver-user-manual_2.1.1.pdf
 
 
./doc/library/sw/AMSS 7X30/Development-SoftwareBuildDebugTest/80-V8218-1_E_AMSS_Debugging_Overview.pdf
概述: 主要介绍 AMSS 架构的软件调试方法
AMSS - 高级的移动用户软件(Advanced Mobile Subscriber Software)技术
DMSS: 双模式用户软件(Dual-Mode Subscriber Software——DMSS)技术
AMSS 是基础的软件构架,在高通体系中,原来的软件构架叫DMSS,现在升级了叫AMSS
在高通7系列的架构中,一个IC内部集成有两个ARM处理器,一个ARM9,专门负责处理通信协议,射频以及GPIO等,另外一个是ARM11,
用来处理多媒体,以及其他的一些任务。在ARM9端,有一个自己的操作系统,我们称之为 AMSS (Advanced Mobile Subscriber
Software),在ARM11端,可以执行我们熟知的一些操作一些,例如linux。这两个处理器之间通过shared memory的硬件方式来沟通,
操作系统之间通过RPC - remote procedure call的方式交互数据。
AMSS 调试概述
怎样保存log
QPST 内存调试
QPMD 对高通 MSM6XXX MSM7XXX 系列的 L4 软件进行log分析
QXDM 获取 NV log 信息
查找问题的常规步骤:
运行32位的模拟器
装载 ELF 和 ramdump 到 T32 模拟器
恢复相应的寄存器值和MMU(memory mangenet unit)配置
JTAG 工具无法正常工作原因分析:
1. 没有正确连接 -- 正确连接 jtag
2. 使用在 ARM11/QDSP6 中保存的脚本 -- 在 ARM9 中运行脚本
3. 硬件没有工作 --检测硬件
4. 在操作过程中出错--减产usb和硬件连接
 
 
./doc/library/sw/AMSS 7X30/Development-SoftwareBuildDebugTest/80-VN752-2_B_Stability_Debugging_Guide.pdf
 
 
./doc/library/sw/AMSS 7X30/Development-SoftwareBuildDebugTest/80-VN752-2_B_Stability_Debugging_Guide-2.pdf
一 . 保存log的方式:
1. 通过 jtag 导出
2. 通过 usb 导出,QPST内存debug程序通过usb与手机相连(比较有效导出储存器内容的方式)
3. EFS log
4. 保存在flash等存储器中的log,保存致命的错误信息,仅记录文件名和行号
5. Memory compression log ­
二. 怎样查看 log?
三. 调试工具
四. 怎样调试
 
 
当硬件复位的时候,通过 JTAG 导出(转存)ram的内容
 
./doc/library/sw/AMSS 7X30/Development-SoftwareBuildDebugTest/80-VR561-2_A_AMSS_7x30_Memory_Estimate.pdf
内存预算
MDSP,SMD,猫的堆,RAM文件系统 消耗 35M
Gfx 720p HD, WVGA显示 8MP camera 支持 80M
QTC preliminary estimate for Microsoft Android TM 70M
Android 平台消耗 70M
总共的内存消耗大概是: 185M
 
 
莫,周,叶
./doc/library/sw/AMSS 7X30/FactoryTestMode/80-V9051-1_B_Symbol_Error_Rate_Metric_Receiver.pdf
./doc/library/sw/AMSS 7X30/FactoryTestMode/80-VB075-1_C_Method_Predicting_CDMA_Rx_Sensitivity_Symbol_Error_Rate.pdf
./doc/library/sw/AMSS 7X30/FactoryTestMode/CL93-V5368-1_K_FTM_WCDMA_Cmds.pdf
 
 
 
gps相关
GPS卫星定位:
定位原理:
传统的GPS卫星定位技术是利用围绕地球的24颗卫星进行定位的.其实现的原理是通过GPS接收机直接接收不少于3颗卫星
的信号,并通过自身的计划完成定位,并通过GPRS/CDMA 1*无线通道完成数据的传输.
*定位精度
在空旷地带且无阻挡的前提下,传统的GPS定位技术的定位精度可达5米左右.但是,在很多的情况下,GPS卫星接收机不能够
捕获到足够多的卫星信号,定位精度将会大大的降低(高楼林立的城区或高层建筑附近),甚至不能定位(如室内或地下室.
 
 
AGPS——Assisted GPS,网络辅助GPS定位系统。AGPS是在以往通过卫星接受定位信号的同时结合移动运营的GSM或者
CDMA网络机站的定位信息,由具有AGPS的手机获取来自卫星的定位信息,同时靠该手机透过中国移动的GPRS网络下载辅助
的定位信息,两者相结合来完成定位。与传统GPS(Global Positioning System全球定位系统)首次定位要2、3分钟相
比AGPS的首次定位时间最快仅需几秒钟,同时AGPS也彻底解决了普通GPS设备在室内无法获取定位信息的缺陷。
 
GPS one将接收到的GPS卫星信号与CDMA手机基站信号,通过无线通信网络系统运算而得出精确定位信息,再将定位信息
发送至接收终端,然后由电子地图显示出来。主要优势是:1、卫星与基站复合定位,精度更高,覆盖更广(室内、汽车尾
箱、电梯、地下室等CDMA信号覆盖的地方均可轻松实现定位)。2、体积纤小,易于隐藏,便于携带。3、具有远程监听功
能。4、自备长达160小时待机时间电源。5、价格优势。6、不需要互联网支持,自主移动定位和监听,操作方便.
 
 
GPSONE定位
*定位原理:
混合定位技术也就是GPSONE定位技术.GPSONE定位技术融合了cell id,aflt,gps三种定位技术的优势,实现了全功能
的定位.其实现的原理是:当卫星信号齐全(同是接收到3颗以上的卫星信号)时,手机就采用紧缺的GPS卫星定位技术,定位
精度高达5~50米;当卫星信号不全时,就利用手机基站信号代替卫星信号或全部利用基站信号采取三角定位技术,定位精度
仍然可达50~100米左右;最差的情况下也可以实现CELL ID定位.
*定位特点
定位精度高,覆盖范围广,精确的手机定位,可以全国漫游,定位时间长,室内受基站数据的影响大,通话时不能定位,需要终端
的支持,传统GPS与GPSONE优劣分析 传统GPS技术由于过于依赖终端性能,即将卫星扫描、捕获、伪距信号接收及定位运算
等工作集于终端一身,从而造成定位灵敏度低及终端耗电量大等方面缺陷。GPSONE技术将终端的工作简化,将卫星扫描及定位
运算等最为繁重的工作从终端一侧转移到网络一侧的定位服务器完成。提高了终端的定位精度、灵敏度和冷启动速度、降低终
端耗电。 在GPS卫星信号和无线网络信号都无法单独完成定位的情形下,GPSONE系统会组合这两种信息源,只要有一颗卫星
和一个小区站点就可以完成定位,解决了传统GPS无法解决的问题。GPSONE系统的基础设施辅助设备还提供了比常规GPS定位
高出20dB的灵敏度,性能的改善使GPSONE混合式定位方式可以在现代建筑物的内部深处或市区的楼群间正常工作,而两种传
统方案在这些地方通常是无法正常工作的。 GPSONE结合了无线网络辅助GPS定位和CDMA三角运算定位,改善了室内定位效果。
CDMA三角运算定位弥补无卫星信号下也能完成定位,其他蜂窝电话网络如GSM/GPRS也有类似自定位技术,但由于CDMA是惟一
全网同步(通过GPS)网络,因此定位精度更高。
普 通GPS在室内都是无法应用的,但是GPSone对导航手机由于是通过手机信号实现的,因此只要有手机信号的地方,就能定位。
 
DGPS知识详解
DGPS(Difference Global Positioning System英文单词的缩写),即差分全球定位系统。由于当前GPS全球卫星
定位系统精度不能满足人们定位导航的需要,因此,研究人员提出了差分定位系统的概念。其方法是在已精确测定坐标的参照
物上设置GPS接收机,并和移动台上的GPS接收机同步观测不少于四颗的同一组卫星,求得该时刻的差分修正数(位置差分、伪
距差分、相位平滑伪距差分和相位差分等修正数),通过无线电数据链把这些改正数实时播发给在附近工作的移动台(用户)或事
后传送给移动台(用户),由移动台(用户)用所收到的差分改正数对其GPS定位数据进行实时修正,其目的是消除公共误差项,
有效地减弱相关误差的影响,进而获得更精确的定位结果,提高定位精度。DGPS相对于GPS能为用户的导航定位精度带来数量
级的提高,在飞机精密进场着陆、无人机、弹道轨迹测量、车辆定位导航等航空、航天、航海及车载领域得到应用。
 
GPS发展史、和手机定位 关系
http://hi.baidu.com/makeusamoney/blog/item/7423a91cef243d8a86d6b67b.html
 
我们使用的是什么定位方式?
硬件上有什么区别?
选择怎样的硬件?
 
 
gps软件
./doc/library/_General Documents/SW/General/General SW User Guide/Air Protocols-gpsOne/80-VJ539-1_A_gpsOne_Operation_FTS_HDR.pdf
./doc/library/_General Documents/SW/General/General SW User Guide/Security/80-VU329-1_C_EFS_File_Access_GPS_API_CR194212.pdf
./doc/library/sw/AMSS 7X30/Air Protocols-gpsOne/80-N0074-1_A_Test_Results_gpsOne_Gen7_Ver_42.pdf
./doc/library/sw/AMSS 7X30/Air Protocols-gpsOne/80-VF936-1_A_gpsOneXTRA_Client_Test_App_BREW.pdf
./doc/library/sw/AMSS 7X30/Air Protocols-gpsOne/80-VR679-1_B_CN0_Meas_Method_GPS_Test_Production_Line.pdf
./doc/library/sw/AMSS 7X30/Air Protocols-gpsOne/80-VU656-1_A_LBS_Test_Setup_SHDR_Devices.pdf
./doc/library/sw/AMSS 7X30/gpsOneSpecifications/80-VU905-1_A_gpsOne_Gen8_Engine_1X_UMTS_NV_Items.pdf
 
./doc/library/sw/AMSS 7X30/gpsOneArchitecture/80-VU919-1_A_DM_Command_Obtain_CN0_gpsOne8_Testing.pdf
./doc/library/sw/AMSS 7X30/gpsOneSpecifications/80-VT766-1_A_WifFi_Positioning_Integration_Guide.pdf
gps硬件
./doc/library/hw/hw/QTR8X00/80-V7106-1 RADIOONE CHIPSET GPS RX SPREADSHEET.xls
./doc/library/hw/hw/QTR8X00/80-VM522-2 GPSONE GEN 8 ENGINE RF DEVELOPMENT AND MOBILE STATION TIME CALIBRATION TEST PROCEDURES.pdf
 
qualcomm/doc/library/sw/AMSS 7X30
Air Protocals-WCDMA Development-SoftwareBuildDebugTest gpsOneArchitecture
Air Protocols-gpsOne Drivers-BoardSupportPackage gpsOneSpecifications
Air Protocols-GSM Drivers-Boot LaunchpadApplications
APIs and Services-Bluetooth Drivers-Flash Multimedia-Audio
APIs and Services-Call Manager Drivers-General Multimedia-Graphics
APIs and Services-DataServices Drivers-PMIC Multimedia-QCamera
APIs and Services-Qcamera Drivers-RF Security
APIs and Services-WLAN Drivers-Searcher Wireless Connect-Bluetooth
CDMA Drivers-USB WirelessConnect-WLAN
Certification-IOT Drivers-VocoderQDSPSound
Common Software FactoryTestMode
 
qualcomm/doc/library/_General Documents/SW/General/General SW User Guide
Air Protocols-1xEV-DO/ Common Software/ Multimedia-Audio/
Air Protocols-gpsOne/ Development-SoftwareBuildDebugTest/ Release Overview/
Air Protocols-GSM/ Drivers-EFSandNV/ Security/
Air Protocols-Standards/ Drivers-RF/ .svn/
Air Protocols-UMTS/ Drivers-UIM/
APIs and Services-Applications/ Drivers-USB/
 
 
1.1 通信名词解释
TD-HSDPA和HSPA概念及区别?
http://wenda.tianya.cn/wenda/thread?tid=572741562e045cdd&clk=wttpcts
高通将展示HSPA+多载波和LTE等新技术
http://www.telecom365.com.cn/public_content.jsp?newsid=1252990673390&typeid=0301
1.2 硬件架构
传统手机(feature phone mtk 系列) 硬件架构
手机硬件平台主要有两个部分,一部分是基带芯片组,一部分是射频芯片组,基带芯片组在gsm制式下面主要有两个芯片,一个是主芯片,主芯片的物理结构典型结构是ARM内核加DSP,ARM内核的作用就是运行手机操作系统协议栈之类,DSP主要对语音进行语音编解码,语音处理之类,DSP的各种动作都处于 ARM的控制之下,可以看作是一种非典型的双CPU结构,基带芯片的另外一个部分是AD转换,因为基带主芯片是数字信号,在通过射频发射之前需要转换成模拟信号,而从射频接受的模拟信号在送到数字基带芯片处理之前,也要转换为数字信号,射频芯片组就是用来发送,接受,调制,解调无线信号的芯片组。
1.3 智能手机硬件架构
 
 
CDMA手机单芯片平台介绍 QSC6010简介
http://www.zte.com.cn/main/include/showemagazinearticle.jsp?articleId=27597&catalogId=12166
单芯片指的是将基带、射频、电源管理及数字安全等多个系统组合至一个芯片中。QSC6010芯片是高通公司推出的针对
cdma2000 1x手机的低成本方案芯片,它实现了多个子系统的集成,包括:信道编解码子系统、控制处理器子系统、
DSP子系统、射频子系统及电源。
 
高通拨打电话流程:
returnValue = ISUPPSVC_StartSS(pMe->m_pISUPPSVC, pszNumber,&requestId,TRUE);
 
static int OEMCM_OriginateCall(ICM *pMe, AEECMCallType call_type,
AECHAR const *wszNum, AECHAR const *wszAlpha,
ICallOpts * options, AEECMCallID *pcallID)
 
 
ret = OEMCM_CMCallCmdOrig(pMe, OEMCM_CallTypeToDMSS(call_type),
srv_type,
&calling_number,
&called_number,
&cm_alpha,
cdma_orig_ptr,
gw_orig_ptr,
&call_id);
 
cm_mm_call_cmd_orig(OEMCM_DMSSCallErrCB, event_cb, gCMID,
call_type,
srv_type,
calling_number,
called_number,
alpha_buf,
cdma_orig_params_ptr,
gw_cs_orig_params_ptr,
NULL,
(cm_call_id_type *)&(err_cb_pkt->call_id)))
 
调用的是AMSS/products/7x30/modem/mmode/cm/src/cm.c 文件中的函数
cm_mm_call_cmd_orig_exten
调用:
static boolean cm_mm_call_cmd_orig_internal(...)
/** Queue the command to CM.
*/
cm_cmd_queue( cmd_ptr );
调用:
cm_client_cmd_q_put( cmd_ptr ) 放入相应的队列中
 
void cm_client_cmd_handle( void )
从队列中获取相应的事件
/*------------------------------------*/
/* Client phone command */
/*------------------------------------*/
case CM_CMD_TYPE_PH:
cmd_ptr->cmd.ph.client_ptr =
cmclient_get_client_ptr( cmd_ptr->cmd.ph.client_id );
cmph_client_cmd_proc( cmd_ptr );
break;
 
/*------------------------------------*/
/* Client call command */
/*------------------------------------*/
case CM_CMD_TYPE_CALL:
cmd_ptr->cmd.call.client_ptr =
cmclient_get_client_ptr( cmd_ptr->cmd.call.client_id );
cmcall_client_cmd_proc( cmd_ptr );
break;
 
调用:./AMSS/products/7x30/modem/mmode/cm/src/cmcall.c
cmcall_orig_start (call_ptr);
cmph_call_start( call_ptr );
cmcall_orig_proc( call_ptr );
 
调用:
cmcall_send_wlan_orig(call_ptr);
cmcall_send_ipcall_orig (call_ptr);
cmxcall_send_orig( call_ptr );
 
调用 文件 ./AMSS/products/7x30/modem/mmode/cm/src/cmxcall.c
调用:
cmcall_send_hdrmc_orig( call_ptr );
或者
cmcall_send_mc_orig( call_ptr );
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
/* Send the origination command to MC and set orig_sent_on_mode to TRUE
*/
cm_mc_send_cmd( mc_ptr );
/* Log MC origination */
cmlog_call_orig_send_mc_orig();
 
发送命令到 MC 任务
void cm_mc_send_cmd
(
mc_msg_type *mc_cmd_ptr /* Pointer to mc command */
)
{
CMDBG_PRINT_MC_CMD_FUNC( mc_cmd_ptr );
 
 
CM_MSG_LOW( "========= FORWARD CMD TO MC ========",0,0,0 );
CM_MSG_HIGH( "Send cmd %d to MC",mc_cmd_ptr->hdr.cmd,0,0 );
CM_MSG_LOW( "====================================",0,0,0 );
 
mc_cmd( mc_cmd_ptr );
 
} /* cm_mc_send_cmd() */
 
调用 ./AMSS/products/7x30/modem/1x/cp/src/mc.c
mc任务的处理函数
/* Process the CDMA phone status command. */
mc_process_cdma_ph_stat_cmd( &cmd_ptr->ph_stat_cmd.info );
/* Process the AMPS phone status command. */
mc_process_amps_ph_stat_cmd( &cmd_ptr->ph_stat_cmd.info );
 
 
 
UMTS与WCDMA之间的关系与区别
http://www.cnii.com.cn/20030526/ca164826.htm
 
 
 
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
 
3G时代的SmartPhone BP部分软件系统
http://www.tektalk.org/category/专题分析/移动和设备/
 
AP和BP区别,释义
http://blog.chinaunix.net/u3/90973/showart_2109449.html
 
Android 平台上SDCard的自动mount的解决方法
http://blog.chinaunix.net/u3/90973/showart_2207580.html
 
 
网络类型:GSM、CDMA、GSM/CDMA、WCDMA、UMTS、是什么意思?
 
http://www.cww.net.cn/tech/TD-SCDMA
TD-SCDMA
http://zh.wikipedia.org/wiki/TD-SCDMA
打出3G、4G组合拳,高通全线出击意欲提升竞争力
http://www.eet-china.com/ARTP_8800514959_675277.HTM
什么是TD-SCDMA?TD-SCDMA解释
分時-同步分碼多工存取(英文:Time Division - Synchronous Code Division Multiple Access,缩写为:TD-SCDMA)
TD-SCDMA全称为Time Division - Synchronous CDMA(时分同步CDMA),该标准是由中国大陆独自制定的3G标准,1999年6月29日,中国原邮电部电信科学技术研究院(大唐电信)向ITU提出。该标准将智能无线、同步CDMA和软件无线电等当今国际领先技术融于其中,在频谱利用率、对业务支持具有灵活性、频率灵活性及成本等方面的独特优势。另外,由于中国内的庞大的市场,该标准受到各大主要电信设备厂商的重视,全球一半以上的设备厂商都宣布可以支持TD—SCDMA标准。该标准提出不经过2.5代的中间环节,直接向3G过渡,非常适用于GSM系统向3G升级。
TD-SCDMA网络模拟仪核心网模拟功能分析
http://www.eet-china.com/ART_8800591658_675277_TA_fe7c7767.HTM
 
 
多种3G空中接口已经标准化,包括频分双工(FDD)和时分双工(TDD)技术。例如,FDD系统包括宽带CDMA(W-CDMA)和CDMA2000,而时分同步码分多址接入(TD-SCDMA) 是一种典型的TDD系统。这些系统的配置按地理位置划分,WCDMA用于日本、欧洲和北美;CDMA2000用于韩国、日本和北美;TD-SCDMA(主要在中国开发)预期至少被一家运营商用于中国,它适合用于不成对的频谱分配,这存在于许多国家。如果撇开商业考虑,当采用一项技术时每个系统都有其自身独特的优点和缺点。
 
 
 
G1 的相关库
/system/lib/hw/
/system/lib/libgps.so
sensors.trout.so
sensors.sapphire.so
sensors.goldfish.so
lights.msm7k.so
lights.goldfish.so
copybit.msm7k.so
 
G2 的相关库
/system/lib/hw/
copybit.msm7k.so lights.trout.so sensors.trout.so
copybit.trout.so sensors.hero.so
lights.msm7k.so sensors.sapphire.so
/system/lib/libgps.so
 
nexu one
/opt/shared/nexunone/system/lib/libloc_api.so
/opt/shared/nexunone/system/lib/libgps.so
ls /opt/shared/nexunone/system/lib/hw/
copybit.qsd8k.so gralloc.default.so gralloc.qsd8k.so
lights.mahimahi.so lights.qsd8k.so sensors.mahimahi.so
 
 
 
处理器(CPU)G1、G2、G3、G4、G5(nexus)相对比较
http://www.hiapk.com/bbs/archiver/?tid-99307.html
 
 
http://bbs.iorgane.com/redirect.php?tid=1156&goto=lastpost&sid=XRCKjZ
WVGA/QVGA/VGA/HVGA 分辨率解说
QVGA "Quarter VGA"。顾名思义即VGA的四分之一尺寸,亦即在液晶屏幕(LCD)上输
出的分辨率是240×320像素。QVGA支持屏幕旋转,可以开发出相应的程序,以显示旋转90°、180°、270°屏幕位置。由HandEra公司发布。多用于手持/移动设备...
WVGA
数码产品屏幕材质的一种,VGA的另一种形式,比VGA分辨率高,别名 : Wide VGA, ,其分辩率为800×480象素。是扩大了VGA(640×480)的分辨率。应用于PDA和手机等,因为很多网页的宽度都是800,所以WVGA的屏幕会更加适和于浏览网页,可以说是未来手持设备的分辨率的大趋势...3 }2 s" I. x* _1 Z- L/ y1 A
KHVGA: k- e(Half-size VGA)即VGA(640*480)的一半,分辨率为(480*320),(3:2宽高比)它是用于各种各样的移动设备,首先是2002年的索尼Clie PEG - NR70,苹果iPhone手机和Ciphone C6是这个屏幕材质的代表性产品...
6 g& q' a# V9 b0 Y& l- [6 o7 E2 I. g7 _& v( w2 [! ]4 `2 O2 I( o
VGA; }* F; C4 |) }. P& k
英文全称是Video Graphic Array,VGA支持在640X480的较高分辨率下同时显示16种色彩或256种灰度,在通常情况下,我们可以把VGA看作是640X480像素这种固定分辨率的英文缩写。如果一部手机上标明为VGA镜头则代表该机能够输入最大分辨率为640×480像素,而这个最大分辨率(640×480)的乘积为 307200像素
 
LCD接口
1. cpu接口
2. RGB接口
楼说的对,现在很多LCD都支持RGB接口,尤其是QVGA以上的屏。
主要区别是加了vsync,hsync同步信号,为了防止在高分辨率LCD上播放动画时发生抖动。
但这种接口也是过渡,未来可能要以串行为主。
CPU屏:/RES , /CS , RS , /WR , /RD , DB0 ~ DB17 (18bit)
RGB屏:/E , VSYNC , HSYNC , CLK , R0~R5 , G0~G5 , B0~B5 (18bit)
 
 
 
 
 
DVD的1080i代表分辨率为1920×1080的隔行扫描,1080p代表分辨率为1920×1080的逐行扫描。
1080i 1080P 简单的说就是30帧和60帧的区别~!
帧越多越清晰越不会闪屏幕~!
帧就是视频帧 每秒显示的动态图像数~!
“I”表示“Intelace”,隔行扫描
“P”表示“Interlace”,逐行扫描
详细的解释
1080i和1080p每帧视频图像有1080条扫描线,720p每帧视频图像有720条扫描线。但1080i采用的是隔行扫描模式,每一帧
都是通过两次扫描来完成的,每次实际扫描线数只有一半即1080/2=540线,分为奇数线和偶数线。1080p和720p采用的是逐行
扫描方式,每帧图像的实际扫描线就是1080线和720线。逐行扫描方式可以解决在隔行扫描中带来的闪烁现象。所以在欣赏一些
充满大量快速动作的节目如足球等体育比赛时,720p将比1080i更合适,它可以提供更清晰、更稳定的图像画面。相反,如果欣
赏的节目没有太强的动作性,那么1080i可提供更细腻的图像。
===========简单来说就是1028p 720p适合图像多变的影片,而1028i适合播放图像没较大变化的影片可提供更细致的画面。
 
什么是 480i、576i、480p、1080i、720p?什么是 HDTV?
都是电视的标准显示模式,i 表示隔行扫描,p 表示逐行扫描。
480i 是标准的NTSC电视显示模式,60hz频率,525条垂直扫描线,483条可见垂直扫描线,4:3 或 16:9,记为480i或525i。
576i 是标准的PAL电视显示模式,50hz频率,625条垂直扫描线,576条可见垂直扫描线,4:3或16:9,记为576i或625i。
480p 是D2标准数字电视显示模式,60hz频率,525条垂直扫描线,480条可见垂直扫描线,4:3 或 16:9,记为480p或525p。Xbox 内部实际图像分辨率 640 * 480。
1080i 是D3标准数字电视显示模式,60hz频率,1125条垂直扫描线,1080条可见垂直扫描线,16:9,记为1080i或1125i。Xbox 内部实际图像分辨率 1920 * 1080。
720p 是D4标准数字电视显示模式,60hz频率,750条垂直扫描线,720条可见垂直扫描线,16:9,记为720p或750p。Xbox 内部实际图像分辨率 1280 * 720。
HDTV 标准是高品质视频信号标准,720p、1080i、1080p,但目前支持480p也大概称为支持HDTV。要注意的是,虽然对于游戏图像精细度的处理难度来说是 480i < 480p < 720p < 1080i,但是对于电视机处理能力(例如带宽)的要求则是 480i < 480p < 1080i < 720p。所以目前很少支持色差输入的 720p 电视机,但是支持 1080i 或者 1080i Ready 的就不少。
 
 
 
 
 
 
 
 
 
 
 
 
修改 build/core/main.mk
================
-subdir_makefiles := \
- $(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs) Android.mk)
==>
# add a Android.mk file cache
ifneq ($(test -e build/tools/Android.mk.cache && echo $$?),0)
$(shell touch build/tools/Android.mk.cache)
endif
 
subdir_makefiles=$(shell cat build/tools/Android.mk.cache)