appboot-7227

来源:互联网 发布:阿里云iis 一键安装包 编辑:程序博客网 时间:2024/05/16 15:15

http://mohuifu.googlecode.com/svn-history/r756/document/works/temp

 

7227源代码信息:M76XXTSNCJNLYA7015 msm7627_7x froyo M76XXTSNCJNLYA7015.xml 2010年08月31 M76xxTSNCJNLYA7015 HY11-N2101-2 S-SRC, AMSS 7X27 LINUX REL 7.0.15 (APPS, ANDROID PLATFORM-ENABLED) MSM7X27 DEVICES W/ENC NoneM76XXTSNCJNLYM7015 HY11-N2100-2 S-SRC, AMSS 7X27 LINUX REL 7.0.15 (MODEM, ANDROID PLATFORM-ENABLED) MSM7X27 DEVICES W/ENC None7227 modem 的编译命令参考文档:80-VR192-1_E_AMSS_Linux_Software_Users_Manual.pdf./AMSS/products/<asic>/build/ms/MSNCJNLYM.cmd – For SURF multimode build./AMSS/products/<asic>/build/ms/MSNCJOLYM.cmd – For SURF UMTS only build编译:sudo apt-get install gawkfind ./ -name "*.pl" |xargs chmod 755必须安装 Python v2.4.5gphone@smartphone:~/workspace/gphone/qualcomm/HY11-N2100-2_7.0.15$ ls -ls `find ./ -name "*.mbn"`./AMSS/products/76XX/build/ms/bin/TSNCJOLY/amsshash/amss_hashhd.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/amsshash/amss_hash.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/amsshd.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/amss.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/oemsblhd.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/oemsbl.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/partition.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/qcsblhd_cfgdata.mbn./AMSS/products/76XX/build/ms/bin/TSNCJOLY/qcsbl.mbn./AMSS/products/76XX/secboot/cfg_data/cfg_data_SNCJOLYMT.mbn./AMSS/products/76XX/secboot/oemsbl/oemsbl_TSNCJOLYM.mbn./AMSS/products/76XX/secboot/qcsbl/qcsbl.mbn./AMSS/products/76XX/tools/headergen/partition.mbnMSM_NOTPAGED (An error occurred: Bad magic number in /opt/workspace/gphone/qualcomm/HY11-N2100-2_7.0.15/AMSS/platform/l4/tools/pyelf/weaver/__init__ . pyc) (0x2700000){ 7230源代码信息:Documents and Downloads/Library/7x30/SW/MSM7x30 Linux/Release=============================================================M7630AABBQMLZA2020 msm7630 froyo M7630AABBQMLZA2020.xml 2010年09月01 M7630AABBQMLZA2020 HY11-N1627-3 S-SRC, AMSS 7X30 LINUX RELEASE 2.0.20 (APPLICATIONS, ANDROID PLATFORM-ENABLED) W/ENC NoneM7630AAABQCAZM1290HY11-N1122-6 S-SRC,AMSS7X30 REL 1.2.90 (MODEM,CDMA,MULTIPLATFORM,LPDDR2)FOR ANDROID PLATFORM-ENABLD DEVICES W/ENC NoneM7630AABBQCAZM2011HY11-N0255-1 S-SRC,AMSS7X30 REL 2.0.11(CDMA MODEM MULTIPLATFORM LPDDR2)FOR ANDROID PLATFORM-ENABLED DEVICE W/ENC NoneM7630AABBQMAZM2020HY11-N2280-2 S-SRC, AMSS 7X30 LINUX RELEASE 2.0.20 (MODEM, MULTI-PLATFORM ) FOR ANDROID-ENABLED DEVICES W/ENC None 2.0.20M7630AABBQMLYM2015HY11-N2414-1 S-SRC, AMSS 7X30 REL 2.0.15 (MODEM MULTIMODE) FOR ANDROID PLATFORM-ENABLED DEVICE W/ENC NoneM7630AABBQMLZM1100HY11-VR880-4 S-SRC, AMSS 7X30 LINUX RELEASE 1.1.00 (MODEM, ANDROID PLATFORM-ENABLED) W/ENC None==============================================================ac_root=/home/shared/qualcommac_date=20100910ac_branch=froyobuild_id=M76XXTSNCJNLYA7015ac_xml=M76XXTSNCJNLYA7015.xmlmkdir -pv $ac_root/$ac_branch-$build_id-$ac_datecd $ac_root/$ac_branch-$build_id-$ac_daterepo init -u git://codeaurora.org/platform/manifest.git -b $ac_branch -m $ac_xmlnohup repo sync&ac_root=/home/shared/qualcommac_date=20100910ac_branch=froyobuild_id=M7630AABBQMLZA2020ac_xml=M7630AABBQMLZA2020.xmlmkdir -pv $ac_root/$ac_branch-$build_id-$ac_datecd $ac_root/$ac_branch-$build_id-$ac_daterepo init -u git://codeaurora.org/platform/manifest.git -b $ac_branch -m $ac_xmlnohup repo sync&导入 7230 modem源代码到仓库svn import modem-M7630AAABQCAZM1290 http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AAABQCAZM1290 -m "HY11-N1122-6.zip" --no-ignorebootable/bootloader/lk/include/lib/ptable.h:47:struct ptablestruct ptentry{char name[MAX_PTENTRY_NAME];unsigned start;unsigned length;unsigned flags;};appboot 传递参数给 kernel 过程解析======================================bootable/bootloader/lk/target/msm7630_surf/rules.mk:12:BASE_ADDR := 0x00200000TAGS_ADDR := BASE_ADDR+0x00000100bootable/bootloader/lk/arch/arm/crt0.S:63:ldreq pc, =BASE_ADDR引导linuxboot_linux((void*) KERNEL_ADDR, (void*) TAGS_ADDR, (const char*) hdr.cmdline, board_machtype(), (void*) RAMDISK_ADDR, hdr.ramdisk_size);bootable/bootloader/lk/target/msm7630_surf/init.c:40:#define LINUX_MACHTYPE_7x30_SURF 1007016kernel/arch/arm/tools/mach-types:2135:msm7x30_surf MACH_MSM7X30_SURF MSM7X30_SURF 1007016./kernel/arch/arm/tools/Makefile:7:include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types文件 include/asm-arm/mach-types.h 依赖:./kernel/arch/sh/tools/gen-mach-types./kernel/arch/sh/tools/mach-typesinclude/asm-arm/mach-types.h#define MACH_TYPE_MSM7X30_SURF 1007016#ifdef CONFIG_MACH_MSM7X30_SURF# ifdef machine_arch_type# undef machine_arch_type# define machine_arch_type __machine_arch_type# else# define machine_arch_type MACH_TYPE_MSM7X30_SURF# endif# define machine_is_msm7x30_surf() (machine_arch_type == MACH_TYPE_MSM7X30_SURF)#else# define machine_is_msm7x30_surf() (0)#endifkernel/arch/arm/kernel/setup.c:751:mdesc = setup_machine(machine_arch_type);./kernel/arch/arm/boot/bootp/init.S:23:_start:add lr, pc, #-0x8 @ lr = current load addrkernel/arch/arm/mm/init.c:308:initrd_end = initrd_start + phys_initrd_size;kernel/arch/arm/mm/init.c:307:initrd_start = __phys_to_virt(phys_initrd_start);内核在 setup_arch 中处理在 appboot 阶段传递给他的参数(命令行,分区信息等)void __init setup_arch(char **cmdline_p) struct tag *tags = (struct tag *)&init_tags; ... if (tags->hdr.tag == ATAG_CORE) {if (meminfo.nr_banks != 0)squash_mem_tags(tags);save_atags(tags);parse_tags(tags); } ...parse_tags 函数会对tag结构的内容进行解析。struct tag_header {__u32 size;__u32 tag;};struct tag_core {__u32 flags; /* bit 0 = read-only */__u32 pagesize;__u32 rootdev;};struct tag {struct tag_header hdr;union {struct tag_core core;...struct tag_ramdisk ramdisk;struct tag_initrd initrd;...struct tag_cmdline cmdline;...struct tag_memclk memclk;} u;};等结构体的定义都在文件:./kernel/arch/arm/include/asm/setup.h 中kernel/arch/arm/mach-msm/nand_partitions.c__tagtable(ATAG_MSM_PARTITION, parse_tag_msm_partition); 从 appboot 传递给内核的 tag 结构中取出分区信息,让后放在 msm_nand_partitions 中kernel/arch/arm/kernel/setup.c:682:__tagtable(ATAG_CMDLINE, parse_tag_cmdline); 从 tag 结构中取出__tagtable(ATAG_RAMDISK, parse_tag_ramdisk); 从 tag 结构中取出===================================================static struct mtd_partition msm_nand_partitions[MSM_MAX_PARTITIONS];device_initcall(get_nand_partitions);kernel/arch/arm/kernel/setup.c:657:bootable/recovery/recovery.c: 从 SD 卡,或者系统升级,都是调用函数 install_package int status = install_package(SDCARD_PACKAGE_FILE); status = install_package(update_package);首先调用 translate_root_path(root_path, path, sizeof(path) 来转换升级包路径如果路径有误,返回安装出错RSAPublicKey* loadedKeys = load_keys(PUBLIC_KEYS_FILE, &numKeys);#define PUBLIC_KEYS_FILE "/res/keys"从 recovdry 分区的根目录下读取 keys 文件,编译环境中该文件为:out/target/product/msm7630_surf/recovery/root/res/keyscp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keysRECOVERY_INSTALL_OTA_KEYS := \$(call intermediates-dir-for,PACKAGING,ota_keys)/keysDUMPKEY_JAR := $(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar$(RECOVERY_INSTALL_OTA_KEYS): PRIVATE_OTA_PUBLIC_KEYS := $(OTA_PUBLIC_KEYS)$(RECOVERY_INSTALL_OTA_KEYS): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR)err = verify_file(path, loadedKeys, numKeys);用读取的 keys 文件参数对升级包进行认证,如果失败,安装出错,退出ZipArchive zip;err = mzOpenZipArchive(path, &zip);打开升级包文件,保存在 zip 中int status = handle_update_package(path, &zip); int result = try_update_binary(path, zip);#define ASSUMED_UPDATE_BINARY_NAME "META-INF/com/google/android/update-binary"const ZipEntry* binary_entry = mzFindZipEntry(zip, ASSUMED_UPDATE_BINARY_NAME);从压缩包中找到 update-binary 入口char* binary = "/tmp/update_binary";unlink(binary);int fd = creat(binary, 0755);...bool ok = mzExtractZipEntryToFile(zip, binary_entry, fd);创建文件 /tmp/update_binary 从 zip 压缩包中把 update-binary 释放到创建的文件创建一个进程,运行命令 /tmp/update_binary char** args = malloc(sizeof(char*) * 5); args[0] = binary; args[1] = EXPAND(RECOVERY_API_VERSION); // defined in Android.mk args[2] = malloc(10); sprintf(args[2], "%d", pipefd[1]); args[3] = (char*)path; args[4] = NULL; pid_t pid = fork(); if (pid == 0) { close(pipefd[0]); execv(binary, args); fprintf(stderr, "E:Can't run %s (%s)\n", binary, strerror(errno)); _exit(-1); } close(pipefd[1]);利用命令 update_binary 去解析待升级的zip文件 if (firmware_type != NULL) { return handle_firmware_update(firmware_type, firmware_filename, zip); } else { return INSTALL_SUCCESS; }static int handle_firmware_update(char* type, char* filename, ZipArchive* zip) remember_firmware_update(type, data, data_size)int remember_firmware_update(const char *type, const char *data, int length) { if (update_type != NULL || update_data != NULL) { LOGE("Multiple firmware images\n"); return -1; } update_type = type; update_data = data; update_length = length; return 0;}对保存的 firware 包进行升级maybe_install_firmware_update(send_intent);bootable/recovery/install.c:90: write_update_for_bootloader(update_data,update_length,width,height,bpp, busy_image, fail_image) format_root_device("CACHE:"); //更新成功后清除 cache 分区内容write_hboot_image PACKAGE:hboot.imgwrite_firmware_image("PACKAGE:firmware.zip", "zip");unmount("/system");手机能否详细类出:音乐,视频,软件,其他 所暂用磁盘空间大小步步高i9 信息,定义在软件什么地方?手机升级处是先下载到特定位置保存 -> 是否升级 -> 如果是 -> 系统重启,进入升级模式 -> 完成下载 -> 重启手机不是先升级再重启如果更新到是系统内置的应用程序,升级过程与系统升级一样pro2的android(安卓)终于有声音了,激动啊。9月5日更新主系统http://diyucenter.diypda.com/viewthread.php?tid=133531如何製作一個屬於自己的Update更新包http://www.mobile01.com/topicdetail.php?f=568&t=1656146&p=1&img=0 delete的用法delete 目录名:目标文件路径delete_ DATA:data/com.android.vending这个很好明白 就是删除 DATA目录下的data\com.android.vendingdelete SYSTEM:app/RomUpdater.apk这个也好懂 就是删除 SYSTEM目录下app/RomUpdater.apk由此我们总结出delete的用法delete 目录名:目标文件路径再来看看这句copy_dir PACKAGE:system SYSTEM:应该是把压缩包内的system考到手机的SYSTEM由于字体文件时在system\fonts下的所以我们刷字体的update-script 就有了copy_dir PACKAGE:system SYSTEM:这句copy_dir用法copy_dir PACKAGE:目录 目标目录:这两句delete_recursive DATA:dalvik-cachedelete_recursive DATA:data/com.android.vending我查看了一下目录 是两个目录所以我假设 delete_recursive命令是用来删除文件夹得猜测用法如下delete_recursive 目录:子目录路径run_program PACKAGE:vu 2.55 2.56由于看的是2.56的升级包VU这个文件以及这条命令我们就暂时不做深入的研究了可能大家看的还是一头雾水那通过这篇文章 我们的得到什么呢?1 批量删除文件2 批量增加文件比如刷写字体 我们通过copy_dir PACKAGE:system SYSTEM:命令可以将压缩包内的字体 刷到SYSTEM下再比如 我是德版机器 YZ倒置问题已经解决我可以把我的system\usr\keylarout文件夹备份下来然后做好UPDATE.ZIP发帖 德版的同学只要下载附件当中的UPDATE.ZIP并像刷机那样刷写进去再开机就解决的YZ倒置不需要繁琐的步骤 对于新人苦手 是种莫大的解脱比如删除手机中并不常用的软件 如GMAIL GTALK 语音拨号等等再比如reloa发的修改主题 可以把APP文件夹构建进UPDATE.ZIP然后可以很便捷的弄进去(7)为做好的刷机包签名在上面提到的链接中,有一个叫做AutoSign的工具,打开一看是一个jar格式的工具包。 /Files/shenhaocn/autosign.zip运行如下命令对刷机包进行签名:$ java -jar autosign.jar update.zip update_signed.zip文件来源:http://files.cnblogs.com/shenhaocn/autosign.zip签名要使用 java 6 用下面的命令进行设置sudo update-java-alternatives -s java-1.5.0-sunsudo update-java-alternatives -s java-6-sunAndroid平台刷机包 修改制作方法http://www.cnblogs.com/shenhaocn/archive/2010/05/25/1743685.htmlAndroid中的签名机制--转http://www.eoeandroid.com/archiver/tid-23010.htmlAndroid中的签名验证(1)http://blog.chinaunix.net/u3/117620/showart_2309963.htmlAndroid中的签名机制http://www.limodev.cn/blog/archives/1271[教程] Android 签名机制:Key的产生方法和签名原理http://www.inandroid.cn/forum.php?mod=viewthread&tid=1214用Android模拟器运行FTKsvn checkout http://ftke.googlecode.com/svn/trunk/android-ftk-emu android-ftk-emuhttp://www.limodev.cn/blog/archives/1537FTK移植指南(初稿)http://www.limodev.cn/blog/archives/1529获取手机的 root 权限ui_print("Rooting your phone...");package_extract_file("system/bin/su", "/system/bin/su");set_perm(0, 0, 04755, "/system/bin/su");我看到F大的updater-script里面有这么一句话。是不是可以理解为如果要ROOT只要把SU复制到SYSTEM/BIN/目录下并且设置属性为04755就行了?http://code.google.com/p/superuser/source/checkout4) 获取root权限:在recovery模式下,在cmd.exe下输入:adb shell mount /systemadb shell rm /system/bin/suadb push su /system/bin/adb shell chmod 4755 /system/bin/suadb shell rm /system/app/Superuser.*adb push Superuser.apk /system/app/adb shell rebootpackage_extract_file("su", "/system/bin/su");set_perm(0, 0, 06755, "/system/bin/su");package_extract_file("Superuser.apk", "/system/app/Superuser.apk");set_perm(0, 0, 0644, "/system/app/Superuser.apk");run_program("/system/bin/toolbox", "dd", "if=/sdcard/busybox", "of=/system/bin/busybox");run_program("/system/bin/toolbox", "dd", "if=/sdcard/busybox", "of=/sbin/busybox");set_perm(0, 0, 0755, "/system/bin/busybox");set_perm(0, 0, 0755, "/sbin/busybox");run_program("/sbin/busybox", "--install", "/sbin/");生成密钥ac_PATH=/mnt/gphone/qualcomm/eclair_caramel-M7630AABBQMLZA1250-tiny/build/target/product/security/sh $ac_PATH/mkkey.sh key依次生成:key.pemkey.x509.pemkey.pk8重新生成 update.zip 文件进入 update 目录,不要在 update 目录外面cd updatezip update.unsigned.zip -r *对 update.unsigned.zip 进行签名,生成 update.zipjava -Xmx512m -jar signapk.jar -w key.x509.pem key.pk8 update.unsigned.zip update.zip注意:-Xmx512m 参数对签名后的文件有影响,暂时未知道原因3.签名java -Xmx512m -jar signapk.jar -w key.x509.pem key.pk8 update.unsigned.zip update.zip生成签过名的update.zip包,其中signapk.jar,key.x509.pem,key.pk8与具体手机系统相关,所以这些文件必须来自源代码signapk.jar 为Android提供的,为jar/zip 文件签名的程序:out/host/linux-x86/framework/signapk.jarkey.x509.pem key.pk8 由以下命令生成:build/target/product/security/mkkey.sh keysignapk.jar 的用法如下:Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar第一个参数是公钥,即前面第二步产生的testkey.x509.pem。第二个参数是私钥,即前面第三步产生的testkey.pk8。第三个参数是要签名的文件。第四个参数是输出的文件(即签名后的文件)。如:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update-signed.zipMD5校验概述md5sum 要校验的iso文件名对文件 update.zip updates.zip 进行 md5 校验,生成相应的校验码md5sum update.zip updates.zip > md5.txtmd5.txt 校验码内容240eefc4aea7cfbed5f6437722f6a16c update.zip48a0c41edb5bbbcc9a9aafa0fd3689b0 updates.zip对操作(从网上下载,或者拷贝) 过的文件进行 md5 验证如果正确:md5sum -c md5.txt update.zip: 确定updates.zip: 确定如果出错:update.zip: 确定updates.zip: 失败md5sum: 警告:1/2 生成的校验和不匹配你检查一下update.zip文件,估计是这个文件有问题,从哪里下载的?做过md5校验没?http://vpn.tenacy.com/pptp-public# D/aob_nm ( 391): ----- statistics -----D/VpnManager( 506): succeeded to connect to VPN serviceD/com.android.settings.vpn.AuthenticationActor( 506): ~~~~~~ connect() succeeded!D/VpnSettings( 506): received connectivity: Tenacy: connected? CONNECTING err=0I/SProxy_mtpd( 486): Stop VPN daemon: mtpdD/SProxy_mtpd( 486): mtpd is stopped after 0 msecD/SProxy_mtpd( 486): stopping mtpd, success? trueI/SProxy_racoon( 486): Stop VPN daemon: racoonD/SProxy_racoon( 486): racoon is stopped after 0 msecD/SProxy_racoon( 486): stopping racoon, success? trueD/VpnService( 486): Local IP: 192.168.3.8, if: tiwlan0D/VpnService( 486): VPN UP: downI/SProxy_mtpd( 486): Start VPN daemon: mtpdD/mtpd ( 626): Waiting for control socketD/SProxy_mtpd( 486): mtpd is running after 0 msecD/mtpd ( 626): Received 19 argumentsI/mtpd ( 626): Using protocol pptpI/mtpd ( 626): Connecting to 204.152.221.26 port 1723I/SProxy_mtpd( 486): got data from control socket: 19I/mtpd ( 626): Connection established (socket = 9)D/mtpd ( 626): Sending SCCRQD/mtpd ( 626): Received SCCRP -> Sending OCRQ (local = 48474)I/mtpd ( 626): Tunnel establishedD/mtpd ( 626): Received OCRQ (remote = 232)I/mtpd ( 626): Session establishedI/mtpd ( 626): Creating PPPoX socketI/mtpd ( 626): Starting pppd (pppox = 11)I/mtpd ( 626): Pppd started (pid = 627)I/pppd ( 627): Using PPPoX (socket = 11)D/pppd ( 627): using channel 4I/pppd ( 627): Using interface ppp0I/pppd ( 627): Connect: ppp0 <--> D/aob_nm ( 391): mobile_device-rx|tx:0|0D/aob_nm ( 391): mobile_last-rx|tx:0|0D/aob_nm ( 391): mobile_result-rx|tx:0|0D/aob_nm ( 391): wifi_device-rx|tx:36633|18143D/aob_nm ( 391): wifi_last-rx|tx:36379|17845D/aob_nm ( 391): wifi_result-rx|tx:254|298D/aob_nm ( 391): mobile_warn:0.0D/aob_nm ( 391): wifi_warn:0.0E/pppd ( 627): MS-CHAP authentication failed: Access deniedI/pppd ( 627): Connection terminated.I/mtpd ( 626): Received signal 17I/mtpd ( 626): Pppd is terminated (status = 19)I/mtpd ( 626): Mtpd is terminated (status = 51)I/SProxy_mtpd( 486): got data from control socket: 51E/VpnService( 486): onError()E/VpnService( 486): com.android.server.vpn.VpnConnectingError: Connecting error: 51E/VpnService( 486): at com.android.server.vpn.VpnService.onError(VpnService.java:183)E/VpnService( 486): at com.android.server.vpn.VpnService.waitUntilConnectedOrTimedout(VpnService.java:210)E/VpnService( 486): at com.android.server.vpn.VpnService.onConnect(VpnService.java:148)E/VpnService( 486): at com.android.server.vpn.VpnServiceBinder$2.run(VpnServiceBinder.java:109)E/VpnService( 486): at java.lang.Thread.run(Thread.java:1096)I/VpnService( 486): disconnecting VPN...D/VpnSettings( 506): received connectivity: Tenacy: connected? DISCONNECTING err=0I/SProxy_mtpd( 486): Stop VPN daemon: mtpdD/SProxy_mtpd( 486): mtpd is stopped after 0 msecD/SProxy_mtpd( 486): stopping mtpd, success? trueI/SProxy_racoon( 486): Stop VPN daemon: racoonD/SProxy_racoon( 486): racoon is stopped after 0 msecD/SProxy_racoon( 486): stopping racoon, success? trueD/VpnService( 486): onFinalCleanUp()I/VpnService( 486): restore original suffices --> nullD/VpnSettings( 506): received connectivity: Tenacy: connected? IDLE err=51D/VpnSettings( 506): create reconnect dialog for event 51I/DumpStateReceiver( 124): Added state dump to 1 crashesD/dalvikvm( 381): GC freed 11 objects / 384 bytes in 105msstart_pppdstatic int pptp_process()static int l2tp_process()都会调用 start_pppdexternal/mtpd/pptp.c:222: log_print(DEBUG, "Sending SCCRQ");external/mtpd/l2tp.c:322: log_print(DEBUG, "Sending SCCRQ (local_tunnel = %d)", local_tunnel);static int pptp_process()... case OCRP: if (state == OCRQ && incoming.ocrp.peer == local) { if (ESTABLISHED(incoming.ocrp.result)) { remote = incoming.ocrp.call; log_print(DEBUG, "Received OCRQ (remote = %d)", remote); log_print(INFO, "Session established"); state = OCRP; start_pppd(create_pppox()); return 0; } log_print(DEBUG, "Received OCRP (result = %d)", incoming.ocrp.result); log_print(INFO, "Remote server hung up"); return -REMOTE_REQUESTED; } break;收到 OCRQ 后会启动 pppd deamo 程序./external/wget-1.11.4/src/mswindows.c:631: case WSAEAFNOSUPPORT: return "Address family not supported by protocol family";bionic/libc/netbsd/gethnamaddr.c:544: errno = EAFNOSUPPORT;bionic/libc/netbsd/gethnamaddr.c:677: errno = EAFNOSUPPORT;bionic/libc/netbsd/resolv/res_send.c:721: case EAFNOSUPPORT:bionic/libc/netbsd/resolv/res_send.c:891: case EAFNOSUPPORT:bionic/libc/kernel/common/asm-generic/errno.h:81:#define EAFNOSUPPORT 97 bionic/libc/include/sys/_errdefs.h:133:__BIONIC_ERRDEF( EAFNOSUPPORT , 97, "Address family not supported by protocol" )bionic/libc/inet/inet_ntop.c:54: errno = EAFNOSUPPORT;bionic/libc/inet/inet_pton.c:56: errno = EAFNOSUPPORT;external/mtpd/l2tp.c:352: pppox = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OLAC);external/mtpd/l2tp.c:360: .sa_protocol = PX_PROTO_OLAC,external/mtpd/pptp.c:238: pppox = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OPNS);external/mtpd/pptp.c:246: .sa_protocol = PX_PROTO_OPNS,external/kernel-headers/original/linux/if_pppolac.h:24:#define PX_PROTO_OLAC 2external/kernel-headers/original/linux/if_pppolac.h:28: unsigned int sa_protocol; /* PX_PROTO_OLAC */external/kernel-headers/original/linux/if_pppopns.h:24:#define PX_PROTO_OPNS 3external/kernel-headers/original/linux/if_pppopns.h:28: unsigned int sa_protocol; /* PX_PROTO_OPNS */ls kernel/include/linuxif_ppp.h if_pppol2tp.h if_pppox.hls kernel/drivers/net/pppppp_async.c ppp_deflate.c ppp_generic.c ppp_mppe.c ppp_mppe.h pppoe.c pppol2tp.c pppox.c ppp_synctty.cexternal/kernel-headers/original/linux/if_ppp.h if_pppolac.h if_pppopns.h ls kernel/drivers/net/ppp_async.c ppp_deflate.c ppp_generic.c ppp_mppe.c ppp_mppe.h pppoe.c pppol2tp.c pppox.c ppp_synctty.cppp_async.c ppp_deflate.c ppp_generic.c ppp_mppe.c ppp_mppe.h pppoe.c pppol2tp.c pppox.c ppp_synctty.c pppolac.c pppopns.c kernel/drivers/net/pppol2tp.c:2616: err = register_pppox_proto(PX_PROTO_OL2TP, &pppol2tp_proto);kernel/drivers/net/pppoe.c:1100: err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);register_pppox_proto(PX_PROTO_OPNS新来同事的svn帐号已经添加,安全起见,通过以下网址修改自己的svn密码http://smartphone/pwdhttp://172.20.127.15/pwdlinux系统如果不支持域名访问,修改文件:/etc/hosts172.20.127.15 smartphone172.20.127.3 mainsoft172.20.125.19 mtksvn加以上内容目前的svn仓库http://smartphone/repositories/DocsAndTools/http://smartphone/repositories/TD1002/http://smartphone/repositories/TD1014/http://smartphone/repositories/TD0901/svn 的操作指南可以参考文档:http://smartphone/repositories/TD0901/linux下svn操作指南及规范.doc./AMSS/products/7x30/core/api/services/nv_items.h:23514: uint32 cust_uqcn_c2k_version;./AMSS/products/7x30/core/api/services/nv_items.h:23516: uint32 cust_uqcn_umts_version;./AMSS/products/7x30/core/api/services/nv_items.h:27832: uint8 gobi_boot_uqcn_filename[64];./AMSS/products/7x30/services/nv/nvim_items.h:438: nvi_uint32_type cust_uqcn_c2k_version;./AMSS/products/7x30/services/nv/nvim_items.h:439: nvi_uint32_type cust_uqcn_umts_version;./AMSS/products/7x30/services/nv/nvim_items.h:488: nvi_gobi_boot_uqcn_filename_type gobi_boot_uqcn_filename;如何製作一個屬於自己的Update更新包全国上下都在学习科学发展观,经过深入学习后我深刻体会到吃饭的科学发展观是:吃自家以素为主;吃朋友以鲜为主;吃老板以精为主;吃公家以贵为主;吃小蜜以奶为主;常与领导吃饭,升官是迟早的事;常与大款吃饭,发财是迟早的事;常与老婆吃饭,厌倦是迟早的事;常与情人吃饭,肾虚是迟早的事;常与异性吃饭,:上床是早晚的事;由此得出结论,想干什么的时候,先吃饭ActivityManager( 124): Starting activity: Intent { cmp=com.android.spare_parts/.SparePartsadb-eclair2.2 shell rm /data/bin/menus-conf.xmladb-eclair2.2 uninstall com.android.androidtestadb-eclair2.2 install out/target/product/generic/system/app/AndroidTest.apkadb-eclair2.2 install out/target/product/generic/system/app/Updater.apkadb-eclair2.2 -s HT849GZ58999 pull /system/app/SpareParts.apk ./adb-eclair2.2 -s emulator-5554 uninstall com.android.spare_partsadb-eclair2.2 uninstall com.android.updateradb-eclair2.2 install out/target/product/generic/system/app/Updater.apk private void initViews() { setContentView(R.layout.choose_lock_pattern_tutorial); mNextButton = findViewById(R.id.next_button); mNextButton.setOnClickListener(this); mSkipButton = findViewById(R.id.skip_button); mSkipButton.setOnClickListener(this); } public void onClick(View v) { if (v == mSkipButton) { // Canceling, so finish all setResult(ChooseLockPattern.RESULT_FINISHED); finish(); } else if (v == mNextButton) { startActivityForResult(new Intent(this, ChooseLockPatternExample.class), REQUESTCODE_EXAMPLE); } } radioPowerButton = (Button) findViewById(R.id.radio_power); //update button radioPowerButton.setOnClickListener(mPowerButtonHandler);OnClickListener mPowerButtonHandler = new OnClickListener() { public void onClick(View v) { //log("toggle radio power: currently " + (isRadioOn()?"on":"off")); phone.setRadioPower(!isRadioOn()); } };getInputStreamHttpclient如果需要访问外部网络,则需要在AndroidManifest.xml文件中加入如下代码申请权限许可:<!-- Permissions --><uses-permission Android:name="Android.permission.INTERNET" />(2)以HTTP POST的方式发送(注意:SERVER_URL并不是指WSDL的URL,而是服务本身的URL)。实现的代码如下所示:private static final String SERVER_URL = "http://www.webservicex.net/WeatherForecast. asmx/GetWeatherByZipCode"; //定义需要获取的内容来源地址HttpPost request = new HttpPost(SERVER_URL); //根据内容来源地址创建一个Http请求// 添加一个变量List <NameValuePair> params = new ArrayList <NameValuePair>();// 设置一个华盛顿区号params.add(new BasicNameValuePair("ZipCode", "200120")); //添加必须的参数request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //设置参数的编码try {HttpResponse httpResponse = new DefaultHttpClient().execute(request); //发送请求并获取反馈// 解析返回的内容if(httpResponse.getStatusLine().getStatusCode() != 404){String result = EntityUtils.toString(httpResponse.getEntity());Log.d(LOG_TAG, result);}} catch (Exception e) {Log.e(LOG_TAG, e.getMessage());}代码解释:如上代码使用Http从webservicex获取ZipCode为“200120”(美国WASHINGTON D.C)的内容,其返回的内容如下:<WeatherForecasts xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns="http://www.webservicex.net"><Latitude>38.97571</Latitude><Longitude>77.02825</Longitude><AllocationFactor>0.024849</AllocationFactor><FipsCode>11</FipsCode><PlaceName>WASHINGTON</PlaceName><StateCode>DC</StateCode><Details><WeatherData><Day>Saturday, April 25, 2009</Day> <WeatherImage>http://forecast.weather.gov/images/wtf/sct.jpg</WeatherImage><MaxTemperatureF>88</MaxTemperatureF><MinTemperatureF>57</MinTemperatureF><MaxTemperatureC>31</MaxTemperatureC><MinTemperatureC>14</MinTemperatureC></WeatherData><WeatherData><Day>Sunday, April 26, 2009</Day> <WeatherImage>http://forecast.weather.gov/images/wtf/few.jpg</WeatherImage><MaxTemperatureF>89</MaxTemperatureF><MinTemperatureF>60</MinTemperatureF><MaxTemperatureC>32</MaxTemperatureC><MinTemperatureC>16</MinTemperatureC></WeatherData>…</Details></WeatherForecasts>这个例子演示了如何在Android中通过网络获取数据,掌握该类内容,开发者需要熟悉java.net.*,Android.net.*这两个包的内容[color=#CC99FF][/color]我这里有一段下载歌曲的HTTP代码 ,给LZ分享一下吧try {//读取链接地址歌曲文件流URL url = new URL(uriStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.connect();InputStream is = conn.getInputStream();//创建本地保存流的文件File musicFile = new File("/sdcard/", decode);FileOutputStream fos = new FileOutputStream(musicFile);byte[] bt = new byte[1024];int i = 0;while ( (i = is.read(bt)) > 0 ) {fos.write(bt, 0, i);}Log.d(TAG, "stop write");fos.close();is.close();} catch(IOException e) { }

原创粉丝点击