转载ramdisk.img system.img userdata.img介绍及解包、打包方法
转载ramdisk.imgsystem.imguserdata.img介绍与解包、打包方法
ramdisk.img system.img userdata.img介绍及解包、打包方法2011-11-25 11:37:24分类:ramdisk.img system.img userdata.img介绍及解包、打包方法Android 源码编译后,在out/target/product/generic下生成的三个镜像文件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。
ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载这3个映像文件后,会把system和userdata分别加载到ramdisk文件系统中的system和data目录下。
三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。
Ramdisk镜像是采用cpio打包,gzip压缩的。
用file验证:# file ramdisk.img输出: # ramdisk.img: gzip compressed data, from Unix为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:# mv ramdisk.img ramdisk.img.gz# gunzip ramdisk.img.gz# mkdir ramdisk#cd ramdisk#mkdir temp#cd temp# cpio –i –F ../ramdisk.img这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。
通过执行以下的操作,我们可由目录树再生成ramdisk镜像# cd temp# find . | cpio -o -H newc | gzip > ../ramdisk-new.img 这两个镜像都属于yaffs2文件格式,生成方式是一样的。
内存盘放系统IMG,重起不掉数据设置教程
内存盘放系统IMG,重起不掉数据设置教程
做的锐起无盘,服务器内存用到了8G,用2G做SC2超级缓存,再用4G做内存盘,还有2G
给系统用,也够了。
如果你的系统IMG是稀疏文件,那4G内存盘也足够放了
内存盘放锐起的客户机系统IMG文件,那效果自然不要我说,谁都知道4G的内存盘的速度,那可不是普通硬盘可以比的,就是现在最牛B的固态SSD硬盘也无法可比。
这些我不多说,下面主要详细写写图文教程:怎么安装和设置SuperSpeed RamDisk
安装基本是“下一步”没什么可说的。
到了下面这个图意思要注册信息。
下面我已经提供了文件和注册机下载。
所以我们选择YES,再运行keygen.exe注册,把注册信息复制到注册窗
这样就安装了,然后我们开设置:
我们可以到控制面板里找:看下图
也可以右键我的电脑,找到RamDisk,进入下面设置。
Ubuntu下Android源码修改、编译及运行、launcher定制
环境Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统GCC版本:gcc version 4.5.2Java版本:java version "1.6.0_26"下载android源码前注意:1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。
2、保证Ubuntu系统进行Internet访问。
联网方法:采用拨号进行连接。
相关操作步骤如下所示:1、虚拟机→设置→硬件→网络适配器→网络连接→桥接2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下:$ pppoeconf //打开后输入上网账号跟密码,确认保存$ sudo pon dsl-provider //上网连接命令经过这两个步骤后就可以进行上网了。
Android源码编译所依赖的tools01.$ sudo apt-get update02.$ sudo apt-get -y install git-core03.$ sudo apt-get -y install gnupg04.$ sudo apt-get -y install sun-java6-jdk flex05.$ sudo apt-get -y install bison06.$ sudo apt-get -y install gperf07.$ sudo apt-get -y install libsdl-dev08.$ sudo apt-get -y install libesd0-dev09.$ sudo apt-get -y install libwxgtk2.6-dev10.$ sudo apt-get -y install build-essential11.$ sudo apt-get -y install zip12.$ sudo apt-get -y install curl13.$ sudo apt-get -y install libncurses5-dev14.$ sudo apt-get -y install zlib1g-dev15.$ sudo apt-get -y install valgrind注意:(如果是32bit的系统的话,则要更改几个Android.mk文件)01./external/clearsilver/cgi/Android.mk02./external/clearsilver/java-jni/Android.mk03./external/clearsilver/util/Android.mk04./external/clearsilver/cs/Android.mk用gedit打开,修改m64为m32即可另外将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为:ifneq (i686,$(findstring i686,$(build_arch)))对于32位系统所出现的问题,解决方法:Error1:make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1在terminal中输入$ gedit frameworks/base/libs/utils/Android.mk将LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)修改为:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissiveError2:make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的修改源码目录下/build/core/combo/HOST_linux-x86.mk并将以下语句:HOST_GLOBAL_CFLAGS+= -D_FORTIFY_SOURCE=0修改为:HOST_GLOBAL_CFLAGS+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0Android源码下载1、安装repo安装过程步骤如下所示:Repo下载安装1、$ mkdir ~/bin //在home目录下创建bin文件夹2、$ PATH=~/bin:$PA TH //环境变量设置3、$ curl https:///dl/googlesource/git-repo/repo > ~/bin/repo //repo下载4、$ chmod a+x ~/bin/repo //权限设置,保证repo可执行Repo client初始化1、$ mkdir Android //创建Android目录,用于存放下载的android源码2、$ cd Android //进入到Android目录3、$ repo init -u https:///platform/manifest //指定URL清单,指定包含在Android源代码的各种存储库将被安置在工作目录中当然也可以指定android版本,使用如下命令:$ repo init -u https:///platform/manifest -b android-4.0.1_r1Android源码文件获取$ repo sync注意:在Android源码下载过程中凡出现问题,可以进入Android源码下载的相关官方网站/source/downloading.html 进行查看。
android主要镜像(image)解析
android主要镜像(image)解析img解析:ramdisk.img:android根文件系统,在android编译系统生成的out/target/product/root目录中结构:./init.trout.rc./default.prop 保存一些调试参数,对于开发者相当重要./proc./dev./init.rc 一些启动参数./init./sys./init.goldfish.rc./sbin./sbin/adbd./system system.img挂载点./data userdata.img挂载点userdata.img 保存用户、应用信息。
结构:/data/app 所有安装后的app会移至此处,apk被拆成dex和apk,dex为目标文件,apk为资源包/data/data 应用程序内部存储信息,sharepreference、database,etcsystem.img 包含整个android系统结构:system/app android出厂内置应用在此,同时,在这里的app可以获得一些特别的权限。
system/framework android框架在此,不宜乱动,开发者可以使用adb push + 拔电池开关机可以快速验证问题。
(前提是eng 版本)Special App:SystemUI.apk 状态栏藏在里面。
framework-res.apk包含整个系统res文件夹 including 系统UI、一些配置参数、theme、style、animationrecovery.img 按power键+音量上键(android默认)可以进去,可以执行T卡升级,format,backup userdata,restore userdata 结构:不知道boot.img 包含一个linux kernel (maybe named as zImage)和一个ramdisk。
img文件结构在源码system/core/mkbootimg/bootimg.h中声明uboot.img android启动时第一个加载的镜像,初始化硬件和基本输入出系统。
Android详细移植过程
apt-get 设置好后,按照下面的步骤安装相关组件Required Packages (Ubuntu 8.04)$ sudo apt-get install python2.5$ sudo apt-get install sun-java6-jdk sun-java6-bin sun-java6-jreAdd/Edit /etc/bash.bashrcexport JA V A_HOME=/usr/lib/jvm/java-6-sun-1.6.0.07$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev zlib1g-dev zip curl valgrind libncurses5-dev build-essential$ sudo apt-get install x-dev$ sudo apt-get install libx11-dev编译Android source code$ cd ~/mydroid$ export ANDROID_JAVA_HOME=$JAVA_HOME$ cd ~/mydroid$ make编译Android KernelBuilding zImageGo into kernel directory$ cd ~/mydroid/kernel$ make msm_defconfig ARCH=arm$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm- eabi-4.2.1/bin/arm-eabi-可以在 kernel/arch/arm/boot/目录下看到build好的zImage原文地址:/archiver/tid-2413.html由于论坛改版,很多有用的资源都不见了,所以这里把自己对cupcake下载和编译方法进行详细说明,以后还会陆续发完善的开发板移植说明、内核编译说明、一些模块级的分析等,希望对刚开始做android的朋友有所帮助,同时欢迎高手指正。
转:androidemulator命令详解
转:androidemulator命令详解在命令⾏输⼊: emulator -help,即可显⽰emulator⽀持的所有命令。
Android Emulator usage:emulator [options] [-qemu args]options:-sysdir <dir> 在⽬录<dir>中搜索system.img-system <file> 读取system.img⽂件<file>-datadir <dir> 写⼊⽤户数据到⽬录 <dir>-kernel <file> 使⽤指定内核kernel-qemu⽂件-ramdisk <file> 指定ram 镜像⽂件ramdisk.img-image <file> obsolete, use -system <file> instead-init-data <file> initial data image (default <system>/userdata.img-initdata <file> same as '-init-data <file>'-data <file> data image(default <datadir>/userdata-qemu.img-partition-size <size> 分区⼤⼩MBs-cache <file> cache.img-no-cache 禁⽌缓存-nocache 禁⽌缓存-sdcard <file> sdcard.img-wipe-data reset the use data image (copy it from initdata)-avd <name> 使⽤指定AVD设备-skindir <dir> search skins in <dir> (default <system>/skins)-skin <name> select a given skin-no-skin don't use any emulator skin-noskin same as -no-skin-memory <size> 物理内存⼤⼩MBs-netspeed <speed> 最⼤⽹速-netdelay <delay> ⽹络延迟-netfast disable network shaping-trace <name> enable code profiling (F9 to start)-show-kernel 显⽰内核消息-shell 终端启⽤root shell-no-jni disable JNI checks in the Dalvik runtime-nojni same as -no-jni-logcat <tags> 查看⽇志-no-audio disable audio support-noaudio same as -no-audio-audio <backend> use specific audio backend-audio-in <backend> use specific audio input backend-audio-out <backend> use specific audio output backend-raw-keys disable Unicode keyboard reverse-mapping-radio <device> ⽆线猫-port <port> 连接控制台的TCP端⼝.-ports <consoleport>,<adbport> TCP ports used for the console and adb bridge-onion <image> use overlay PNG image over screen-onion-alpha <%age> specify onion-skin translucency-onion-rotation 0|1|2|3 specify onion-skin rotation-scale <scale> 窗⼝缩放-dpi-device <dpi> specify device's resolution in dpi (default 1 65)-http-proxy <proxy> HTTP/HTTPS 代理-timezone <timezone> 时区-dns-server <servers> DNS服务器-cpu-delay <cpudelay> throttle CPU emulation-no-boot-anim disable animation for faster boot-no-window disable graphical window display-version 版本-report-console <socket> report console port to remote socket -gps <device> redirect NMEA GPS to character device-keyset <name> specify keyset file name-shell-serial <device> specific character device for root shell-old-system support old (pre 1.4) system images-tcpdump <file> 记录⽹络数据包-bootchart <timeout> enable bootcharting-prop <name>=<value> 设置系统属性-qemu args... pass arguments to qemu-qemu -h 显⽰qemu帮助-verbose same as '-debug-init'-debug <tags> enable/disable debug messages-debug-<tag> enable specific debug messages-debug-no-<tag> disable specific debug messages-help 帮助-help-<option> print option-specific help-help-disk-images about disk images-help-keys supported key bindings-help-debug-tags debug tags for -debug <tags>-help-char-devices character <device> specification-help-environment environment variables-help-keyset-file key bindings configuration file-help-virtual-device virtual device management-help-sdk-images about disk images when using the SDK -help-build-images about disk images when building Android -help-all 帮助(所有)-------------------------模拟器⾄少需要:kernel-qemuramdisk.imgsystem.imguserdata.img还可以包括:sdcard.imguserdata-qemu.imgcache.imgsystem-qemu.img。
Ubuntu12.04下在Android4.0.4源码下载及其编译过程
Ubuntu12.04下在Android4.0.4源码下载及其编译过程一、下载源码1、下载工具repo:https:///tools/repo/在本地目录建个bin的文件夹,进入bin文件夹;通过git下载:1.git clone https:///tools/repo下载完成后,进入repo文件夹,切换到稳定分支:1.git checkout -b stable origin/stable将repo命令所在的目录,即/home/yourname/bin/repo添加到环境变量中:1.export PATH=$PATH:~/bin/repo在本地目录下新建目录:android4.0.4,并进入该文件夹:[html]view plaincopy1.cd ~;mkdir android4.0.4;cd android4.0.4;在文件夹下执行下面命令来下载Android源码:1.repo init -u https:///platform/manifest你也可以直接切换到你想要下的版本的分支,而不是“master”分支:1.repo init -u https:///platform/manifest -b android-4.0.4_r2关于到底是哪个分支,根据自己的情况而定,详情可参照:https:///platform/manifest/如你想下载最新的Android4.1代码,即可将分支名称更换成:android-4.1.1_r4你也可以参照官网的下载方式来下载:/source/downloading.html实验证明,我总是在下载那个repo工具的时候,无法连接到相应的地址。
下载是个漫长的过程,下载完成后的大小大概有14G,所以要提前准备好这么大的空间。
下载完成后的目录大概有这些:如图二、编译源码如果你的电脑的环境经常做开发,那么很多环境应该已经搭建好了,如果没有,可以参照官网:/source/initializing.html这里要提醒的是:用apt-get或者ubuntu软件中直接安装的jdk,jre的时候,编译Android是总是编译不过,出现JDK版本不一致的情况;解决办法如下:到oracle官网中下载jdk:/technetwork/java/javase/downloads/index-jsp-138363.html建议下载这个:jdk-6u35-linux-i586.bin下载完成后,运行得到一个jdk1.6.0_35文件夹,然后,将相应的JAVA环境加到系统环境中,简单的可以这样:1.vi ~/.bashrc在.bashrc文件最后添加:1.JAVA_HOME=/home/clw712/tools/jdk1.6.0_352.CLASSPATH=$JAVA_HOME/lib/3.ANDROID_PRODUCT_OUT=/home/clw712/bin/android/out/target/product/generic4.ANDROID=/home/clw712/bin/android5.ANDROID_SWT=/home/clw712/bin/android/out/host/linux-x86/framework6.PATH=$ANDROID/out/host/linux-x86/bin:$ANDROID/prebuilt/android-arm/kernel/:$JAVA_HOME/bin:$ANDROID_PRODUCT_OUT:$PATH7.8.export PATH JAVA_HOME CLASSPATH ANDROID_PRODUCT_OUT ANDROID_SWT当然上述路径还有后面编译好了,用到的路径,是用来运行emulator的。
高通Andriod开机流程与镜像说明
⾼通Andriod开机流程与镜像说明Android镜像说明Android设备刷机时都需要ROM包,ROM包下⾯有很多的.img和其他的相关镜像⽂件,其中这⾥⾯包含了Android很多的分区,Android镜像⽂件是通过源码编译⽣成的,下⾯是ROM包各个镜像的作⽤:镜像⽂件说明boot.img boot分区,包括内核⽂件和虚拟内存盘Ramdisk,负责设备开机,可在recovery模式进⾏擦除,重新安装带有boot分区的新系统system.img system分区,包含Android系统的⽤户界⾯以及设置上的⼀些预装系统应⽤recovery.img recovery分区,替代启动分区,执⾏恢复和维护系统的⼀些操作userdata.img data分区,⽤于保存⽤户的数据,例如联系⼈,短信,设置偏好和应⽤程序存放的地⽅cache.img cache分区,⽤于放置系统频繁访问的数据和应⽤程序组件的分区persist.img persist分区包含了设备的传感器和信号部分的驱动程序,例如wifi,蓝⽛连接都有关系splash.img开机画⾯⽂件NON-HLOS.bin modem image负责处理通讯协议相关的基带镜像prog_emmc_firehose_8953_ddr.mbn QFIL软件烧录系统的时候,需要⽤到此⽂件,应该是关于EMMC、DDR的配置参数相关的sbl1.mbn硬件的初始化,并且保存加载其他模块信息的顺序tz.mbn trustzone是ARM TrustZone® 技术是系统范围的安全⽅法,基于安全需求和引导模式配置XPU,NAND MPU,它和其他模块代码运⾏在相互隔离的区域,主要实现底层很多安全性特性emmc_appsboot.mbn bootloader⽂件,进⼊fastboot模式相关⽂件rpm.mbn电源管理器,是⾼通MSM平台另外加的⼀块芯⽚,虽然与AP芯⽚打包在⼀起,但其是⼀个独⽴的ARM Core。
AndroideMMC分区详解(转载)
AndroideMMC分区详解(转载)原⽂链接:/firefox_1980/article/details/388241431. fastboot flash boot boot.img当使⽤上述命令写⼊编译的Image时,fastboot做了些什么?基于那些信息把Image写到哪⾥呢?的每⼀款产品,都有⼀个partition.xml描述,有关分区的信息。
下⾯是⼀个例⼦。
2. eMMC 分区表Partition#Name#Size#Strat LBA-End LBR Description#0MBR & GPT 0x00000000-0x000000FFMaster Boot Record and GUID Partition Table1x-loader(MLO)256KB 0x00000100-0x000001FFFirst stage bootloader2bootloader(u-boot.bin)384KB 0x00000200-0x000005FFSecond stage bootloader3misc128KB 0x00000600-0x000006FFReserved.This partition can be used for internal purpose4recovery (zImage + recovery-ramdisk.img)8MB0x00000A00-0x000049FFrecovery partition5boot (boot.img = zImage +ramdisk.img)8MB0x00004A00-0x000089FFPartition contains kernel + ramdisk images.6system (system.img)256MB 0x00008A00-0x000889FFandroid file system7cache (cache.img)32MB 0x00088A00-0x000989FFPartition will be used to store application cache8userdata (userdata.img)32MB 0x00098A00-0x000A89FFPartition contains userdata supplied by oem vendor like configurationfiles,utilities etc..9media Remaining 0x000A8A00-0x00762761Partition contains media files; supplied by oem vendor这是⼀个TI芯⽚的分区表 /index./Android_gingerbread_eMMC_booting分区表定义了每个分区的起始地址和⼤⼩。
【转】编译android之后生成的img文件介绍
【转】编译android之后生成的img文件介绍编译android 之后生成的 img 文件介绍在编译android 之后,会生成几个image 文件,这些文件是:1。
ramdisk.img : 一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount ,这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。
2。
system.img:是包含了整个系统,android 的framework,application 等等,会被挂接到 "/" 上,包含了系统中所有的二进制文件system|-- app| |-- Browser.apk| |-- Contacts.apk| |-- ContactsProvider.apk| |-- Development.apk| |-- Fallback.apk| |-- GoogleApps.apk| |-- GoogleAppsProvider.apk| |-- Home.apk| |-- ImProvider.apk| |-- Maps.apk| |-- MediaProvider.apk| |-- Phone.apk| |-- SettingsProvider.apk| |-- TelephonyProvider.apk| |-- XmppService.apk| `-- XmppSettings.apk|-- bin| |-- AudioHardwareRecord | |-- AudioInRecord| |-- RecursiveMutexTest | |-- SRecTest| |-- SRecTestAudio| |-- UAPI_PortabilityTest | |-- UAPI_SrecT est| |-- UAPI_test| |-- am| |-- app_process| |-- busybox| |-- cat -> toolbox| |-- chmod -> toolbox| |-- cmp -> toolbox| |-- crasher| |-- dalvikvm| |-- date -> toolbox| |-- dbus-daemon| |-- dd -> toolbox| |-- debuggerd| |-- dexdump| |-- dexopt| |-- df -> toolbox| |-- dmesg -> toolbox| |-- drm1_unit_test| |-- drm2_unit_test| |-- dumpstate| |-- dumpsys| |-- exists -> toolbox| |-- getevent -> toolbox| |-- hd -> toolbox| |-- ifconfig -> toolbox | |-- input| |-- insmod -> toolbox | |-- install_boot_image | |-- ioctl -> toolbox| |-- kill -> toolbox| |-- linker| |-- ln -> toolbox| |-- log -> toolbox| |-- logcat| |-- ls -> toolbox| |-- lsmod -> toolbox | |-- mem_profiler| |-- mkdir -> toolbox | |-- mkdosfs -> toolbox | |-- monkey| |-- mount -> toolbox | |-- mtptest| |-- netcfg| |-- netstat -> toolbox | |-- notify -> toolbox | |-- ping -> toolbox| |-- powerd -> toolbox | |-- pppd| |-- printenv -> toolbox | |-- ps -> toolbox| |-- pv| |-- r -> toolbox| |-- reboot -> toolbox| |-- renice -> toolbox| |-- resetradio -> toolbox | |-- rild| |-- rm -> toolbox| |-- rmdir -> toolbox| |-- rmmod -> toolbox| |-- ro.xml| |-- ro2.xml| |-- roerror.xml| |-- rotatefb -> toolbox | |-- route -> toolbox| |-- runtime| |-- sdutil| |-- sendevent -> toolbox | |-- service| |-- setconsole -> toolbox | |-- setkey -> toolbox| |-- setprop -> toolbox | |-- sh| |-- showmap| |-- showslab| |-- sleep -> toolbox| |-- smd -> toolbox| |-- sqlite3| |-- ssltest| |-- start -> toolbox| |-- stop -> toolbox| |-- su| |-- sync -> toolbox| |-- syren -> toolbox| |-- system_server| |-- toolbox| |-- umount -> toolbox| |-- usbd| |-- watchprops -> toolbox | |-- webgrab -> toolbox | `-- wipe -> toolbox|-- build.prop|-- etc| |-- event-log-tags| |-- favorites-default.xml | `-- gservices.xml|-- fonts| |-- DroidSans-Bold.ttf| |-- DroidSans.ttf| |-- DroidSansFallback.ttf | |-- DroidSansMono.ttf| |-- DroidSerif-Bold.ttf| |-- DroidSerif-BoldItalic.ttf | |-- DroidSerif-Italic.ttf| `-- DroidSerif-Regular.ttf |-- framework| |-- am.jar| |-- core.jar| |-- ext.jar| |-- framework-res.apk| |-- framework-tests.jar| |-- framework.jar| |-- input.jar| |-- monkey.jar| `-- ssltest.jar|-- lib| |-- libFFTEm.so| |-- libUAPI_jni.so| |-- libaes.so| |-- libandroid_runtime.so | |-- libaudioflinger.so| |-- libc.so| |-- libcorecg.so| |-- libcrypto.so| |-- libctest.so| |-- libcutils.so| |-- libdbus.so| |-- libdl.so| |-- libdrm1.so| |-- libdrm1_jni.so| |-- libdvm.so| |-- libembunit.so| |-- libevent.so| |-- libexpat.so| |-- libhardware.so| |-- libicudata.so| |-- libicui18n.so| |-- libicuuc.so| |-- libm.so| |-- libmedia.so| |-- libmedia_jni.so| |-- libnativehelper.so| |-- libopengles_cm.so| |-- libpim.so| |-- libpixelflinger.so| |-- libpv.so| |-- libreference-ril.so| |-- libril.so| |-- libsgl.so| |-- libsonivox.so| |-- libsqlite.so| |-- libssl.so| |-- libstdc++.so| |-- libsurfaceflinger.so| |-- libsystem_server.so| |-- libthread_db.so| |-- libui.so| |-- libutils.so| |-- libwebcore.so| |-- libz.so| `-- security| `-- cacerts.bks|-- lost+found|-- media| `-- audio| `-- ringtones| |-- em_ringtone1.mp3 | |-- em_ringtone2.mp3 | |-- ring3.mp3| `-- ringer.mp3|-- sounds| `-- test.mid`-- usr|-- keychars| |-- qwerty.kcm.bin| |-- qwerty2.kcm.bin| `-- tuttle2.kcm.bin|-- keylayout| |-- qwerty.kl| `-- tuttle2.kl|-- share| |-- bsk| | |-- V_FD_speed_101.bsk | | `-- V_FD_std_101.bsk| `-- zoneinfo| |-- zoneinfo.dat| `-- zoneinfo.idx`-- srec`-- config|-- | |-- audio| | `-- v139| | `-- v139_113.nwv| |-- baseline.par| |-- baseline11k.par| |-- baseline8k.par| |-- dictionary| | `-- basic.ok| |-- g2p| | |-- en-US-15k.dictionary | | |-- en-US-60k.dictionary | | |-- en-US-90k.dictionary| | `-- en-US-ttp.data| |-- grammars| | |-- VoiceDialer.g2g| | |-- bothtags5.g2g| | |-- dynamic-test.g2g| | `-- enroll.g2g| `-- models| |-- generic.lda| |-- generic.mul| |-- generic.swiarb| |-- generic.swimdllst| |-- generic_f.swimdl| `-- generic_m.swimdl|-- shared| `-- sigmoid_param`-- speech_prompt.mp33。
Android的文件系统根目录的结构
经过这几天在网上搜索关于Android文件系统的相关资料,发现已经有很多高手分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。
我这里就写一下自己的理解。
首先是Android的文件系统根目录的结构:# pwd && ls -a -l/drwxrwxrwt root root 2009-06-10 09:53 sqlite_stmt_journalsdrwxrwx--- system cache 2008-09-06 22:51 cached---rwxrwx system system 1970-01-01 08:00 sdcardlrwxrwxrwx root root 2009-06-09 22:11 etc -> /system/etcdrwxr-xr-x root root 2008-09-06 22:45 systemdrwxr-xr-x root root 1970-01-01 08:00 sysdrwxr-x--- root root 1970-01-01 08:00 sbin-rw-r--r-- root root 117 1970-01-01 08:00 runme.shdr-xr-xr-x root root 1970-01-01 08:00 proc-rwxr-x--- root root 1704 1970-01-01 08:00 init.trout.rc-rwxr-x--- root root 9329 1970-01-01 08:00 init.rc-rwxr-x--- root root 1677 1970-01-01 08:00 init.goldfish.rc-rwxr-x--- root root 106636 1970-01-01 08:00 init-rw-r--r-- root root 118 1970-01-01 08:00 default.propdrwxrwx--x system system 2008-09-06 22:51 datadrwx------ root root 2009-06-07 16:29 rootdrwxr-xr-x root root 2009-06-09 22:11 devsqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。
Ubuntu 10.04(64位)下载并编译 Android 2.2 源码
Ubuntu 10.04(64位)下载并编译Android 2.2 源码[只有11条命令]为了方便,我把所有操作写成了命令,按顺序(软件安装--源码下载--编译)执行成功即可:1. sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-devlibx11-dev lib32readline5-dev lib32z-dev java-common unixodbc2. sudo apt-get install sun-java6-jdk3. cd4. mkdir -p software/bin5. curl /repo >software/bin/repo6. chmod a+x software/bin/repo7. mkdir -p software/android/src/new8. cd software/android/src/new9. repo init -u git:///platform/manifest.git -b froyo10. repo sync11. make -j4=========================================================== ======================================================== 1.前言本文叙述了如何从零开始搭建基于Google官方Android 2.2.1(froyo)源码的开发环境,包括如何下载源代码、编译源代码,以及在模拟器中运行编译生成的镜像。
文中开发机是基于Ubuntu 10.04的,同样适用于其他版本的Ubuntu。
ramdisk.img及boot.img的生成过程
ramdisk.img及boot.img的生成过程ramdisk.img及boot.img的生成过程ramdisk.imgramdisk.img是组成boot.img的重要部分,从Android/build/core/Makefile中可以看到ramdisk.img的生成该过程.# the ramdiskINTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \ $(ALL_PREBUILT) \ $(ALL_COPIED_HEADERS) \$(ALL_GENERATED_SOURCES) $(ALL_DEFAULT_INSTALLED_ MODULES))BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)...$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@ramdisk.img是用mkbootfs工具从out/target/product/tcc8900/root目录制作得到,所以,需要把注意力转移到out/target/product/tcc8900/root 目录及其内容是如何生成的这一主题上来。
其实,ALL_PREBUILT包含了root目录中的大多数内容,另外的ALL_COPIED_HEADERS,ALL_GENERATED_SOURCES暂时不予以考虑。
以下列表列出了与out/target/product/tcc8900/root生成相关的文件:/init.goldfish.rc------------------->Android/system/core/rootdir/etc/init.goldfish.rc/init.rc ------------------->device/telechips/tcc92xx-common/init.rc如果device/telechips/tcc92xx-common/init.rc不才存在,将使用Android/system/core/rootdir/etc/init.rc文件/sbin(create)-------------------------------->Android/system/core/rootdir/Android.mk/dev(create)--------------------------------->Android/system/core/rootdir/Android.mk/proc(create)-------------------------------->Android/system/core/rootdir/Android.mk/sys(create)--------------------------------->Android/system/core/rootdir/Android.mk/system(create)------------------------------>Android/system/core/rootdir/Android.mk/data(create)-------------------------------->Android/system/core/rootdir/Android.mk/sbin/adbd(compile)-------------------------->Android/system/core/adb/Android.mk/init(compile)------------------------------->Android/system/core/init/Android.mk/sbin/timetest(compile)---------------------->Android/system/core/extras/timeinfo/Android.mk /lib/modules/tcc92x_nand.ko(copy)------------>Android/hardware/telechips/nand/Makefile/lib/modules/ufsd.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk/lib/modules/viqe.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk至于其他的诸如/config , /cache, /nand,/inand,/mnt,/mnt/nand,/sata,/scisi,/app-cache等目录都在init.rc中被创建。
androidboot.img拆包,修改adb具有root权限,以i9250为例
androidboot.img拆包,修改adb具有root权限,以i9250为例Android 系统的rom最主要的就是3个文件:boot.img、system.img、userdata.img。
其中boot.img 存放着内核以及Android系统的配置信息,比如android系统各文件夹的读写权限,adb 的权限。
所以如果你要修改文件夹的写权限,adb的root权限,修改boot.img对应的地方就ok了。
system.img中存放的是系统的各种库,系统预装的app等,userdata.img是一下用户的配置信息。
今天这里介绍怎么解开boot.img文件,修改对应的文件,使system 文件夹有写权限,adb 登录后为root用户。
下面所使用的方法需要一定的linux系统基础,如果你对linux系统一点都不了解,请慎重进行下面的操作。
1.拆包boot.img,这一步需要一个perl脚本,在我的资源里面有,叫split_bootimg.pl,这个脚本网上也有。
准备好了split_bootimg.pl 以后,在linux系统下,终端里输入:perl split_bootimg.pl boot.img执行上述操作后,i9250的boot.img拆开成两部分了:boot.img-kernel和boot.img-ramdisk.gz,boot.img-ramdisk.gz使用命令gunzip boot.img-ramdisk.gz解压为boot.img-ramdisk。
boot.img-kernel 是内核部分,这部分我们不能修改。
boot.img-ramdisk是我们要修改的部分。
下面进行拆分boot.img-ramdisk.2.可以用file boot.img-ramdisk 查看它格式,它是ASCII cpio archive格式的,要用特殊的命令揭开,命令如下:a.新建一个文件夹:mkdir ./tmpb. cd tmp/c. cpio -i -F ../boot.img-ramdisk这样boot.img-ramdisk中的内容全部解压到了tmp目录下。
Android系统镜像文件的打包过程分析
Android系统镜像文件的打包过程分析在前面一篇文章中,我们分析了Android模块的编译过程。
当Android系统的所有模块都编译好之后,我们就可以对编译出来的模块文件进行打包了。
打包结果是获得一系列的镜像文件,例如system.img、boot.img、ramdisk.img、userdata.img和recovery.img等。
这些镜像文件最终可以烧录到手机上运行。
在本文中,我们就详细分析Android系统的镜像文件的打包过程。
Android系统镜像文件的打包工作同样是由Android编译系统来完成的,如图1所示:从前面和这两篇文章可以知道,Android编译系统在初始化的过程中,会通过根目录下的Makefile脚本加载build/core/main.mk脚本,接着build/core/main.mk脚本又会加载build/core/Makefile脚本,而Android系统镜像文件就是由build/core/Makefile脚本负责打包生成的。
在build/core/main.mk文件中,与Android系统镜像文件打包过程相关的内容如下所示:[plain] view plain copy......ifdef FULL_BUILD# The base list of modules to build for this product is specified# by the appropriate product definition file, which was included# by product_config.make.product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) # Filter out the overridden packages before doing expansionproduct_MODULES := $(filter-out $(foreach p, $(product_MODULES), \$(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))$(call expand-required-modules,product_MODULES,$(product_MODULES))product_FILES := $(call module-installed-files, $(product_MODULES))else# We're not doing a full build, and are probably only including# a subset of the module makefiles. Don't try to build any modules# requested by the product, because we probably won't have rules# to build them.product_FILES :=endif......modules_to_install := $(sort \$(ALL_DEFAULT_INSTALLED_MODULES) \$(product_FILES) \$(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \$(call get-tagged-modules, shell_$(TARGET_SHELL)) \$(CUSTOM_MODULES) \)# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.# Filter out (do not install) any overridden packages.overridden_packages := $(call get-package-overrides,$(modules_to_install))ifdef overridden_packages# old_modules_to_install := $(modules_to_install)modules_to_install := \$(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), \$(modules_to_install))endif......# Install all of the host modulesmodules_to_install += $(sort $(modules_to_install) $(ALL_HOST_INSTALLED_FILES))# build/core/Makefile contains extra stuff that we don't want to pollute this# top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES# contains everything that's built during the current make, but it also further# extends ALL_DEFAULT_INSTALLED_MODULES.ALL_DEFAULT_INSTALLED_MODULES := $(modules_to_install)include $(BUILD_SYSTEM)/Makefilemodules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES))ALL_DEFAULT_INSTALLED_MODULES :=.......PHONY: ramdiskramdisk: $(INSTALLED_RAMDISK_TARGET).PHONY: userdataimageuserdataimage: $(INSTALLED_USERDATAIMAGE_TARGET).......PHONY: bootimagebootimage: $(INSTALLED_BOOTIMAGE_TARGET)......如果定义在FULL_BUILD这个变量,就意味着我们是要对整个系统进行编译,并且编译完成之后,需要将编译得到的文件进行打包,以便可以得到相应的镜像文件,否则的话,就仅仅是对某些模块进行编译。
如何从img镜像文件中分离出文件系统
1、android文件系统的结构android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。
其中,ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system 和 userdata分别加载到 ramdisk文件系统中的system和data目录下。
因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。
2、分离android文件系统出来system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:file ramdisk.img,输出:ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009Android源码编译后除了生成system.img,userdata.img之外还生成system和data 文件夹,因此不需要解压它们。
Android源码编译后还生成root文件夹,其实root 下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把ramdisk.img解压出来:将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令gunzip ramdisk.img.gz然后新建一个文件夹,叫ramdisk吧,进入,输入命令cpio -i -F ../ramdisk.img这下,你就能看见并操作ramdisk里面的内容了。
然后把Android源码编译后生成的system和•data里的文件复制到ramdisk/system和 ramdisk/data下。
安卓系统中各镜像介绍
安卓系统中各镜像介绍背景对于安卓开发⽽⾔,了解各镜像的意义、内容以及如何制作,有极⼤的意义。
注意,ROM中的5个镜像⽂件的扩展名都是img,但其格式却不同,也就是说不能使⽤同⼀种⽅法对其进⾏格式解析。
系统镜像(System.img)系统镜像⽤于存储Android系统的核⼼⽂件,将其解压出来,就是设备中/system⽬录,⾥⾯包含了Android系统主要的⽬录和⽂件。
⼀般这些⽂件是不允许修改的。
系统镜像对应的⽂件名⼀般叫system.img。
当然,系统镜像的⽂件可以任意命名,之所以叫system.img是为了与⽣成镜像⽂件之前的system⽬录保持⼀致,这样⽐较容易与其他类型的镜像⽂件区分。
system.img可以添加:Android系统应⽤更多的library为了搞清楚system.img镜像中的内容,可以将其解压:旧版的镜像是yaffs格式的(通过mkyaffs2image⼯具制作的),可以使⽤unyafss命令对其解压。
unyaffs system.img如果对编译Android源代码⽣成的system.img⽂件执⾏上⾯的命令,可以完美的将system.img⽂件还原成system⽬录,会从system⽬录中看到相应的⼦⽬录,例如,/system/app、/system/lib等,实际上,system.img⽂件就是out/target/product/generic/system中的⽂件压缩⽣成的。
另外,⾼版本Android的system.img通常是ext4格式的⽂件系统镜像(通过make_ext4⼯具制作),可以使⽤simg2img⼯具进⾏转换后挂载。
由于system.img是压缩格式,所以并不能直接使⽤mount命令挂载。
在编译Android 源代码后会在Android源代码⽬录/out/host/linux-x86/bin⽬录⽣成⼀个simg2img命令⾏⼯具建议将该⽬录加到PATH环境变量中,因为当中的各种命令⾏⼯具会被经常使⽤。
android中各种img文件的作用以及系统启动过程
android中各种img文件的作用以及系统启动过程android中各种img文件的作用以及系统启动过程2011-11-09 17:41首先通过编译,先将android内核编译成功。
正常情况下,在目录out/target.product/generic/(但是有的就没有generic文件,如freescale和iriver;但是lonshinetech下面就有这个文件,依据情况而定,只要能找到生成的三个文件就可以。
例如:~/freescale/R9.2/out/target/product/imx51_bbg$ )下会生成三个文件:ramdisk.img,system.img,userdata.img。
这三个文件的作用如下:(1)ramdisk.img一个分区影像文件,它会在kernel 启动的时候,以只读的方式被mount ,这个文件中只是包含了/init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。
#其实ramdisk.img的内容就是/out/target/product/generic/root目录的压缩而已。
方法1:android编译生成后的ramdisk.img是一个gzip 格式的文件,输入命令# file ramdisk.img, 会得到=>ramdisk.img: gzip compressed data, from Unix那么先解压ramdisk.img,因为后缀不是.gz,所以用—S选项, # gunzip -S .img ramdisk.img这样就得到一个新文件ramdisk.img,用# file ramdisk 查看格式, 得到=> ramdisk: ASCII cpio archive (SVR4 with no CRC) 可以看出解压生成的ramdisk是cpio格式的文件,再次解压,为了防止解压后文件混乱,首次建立一个目录如:# mkdir rfs //rfs可以用来放ramdisk解压后的文件, 进入# cd rfs解压# cpio -i -F ../ramdisk 方法2:将ramdisk.img复制一份到任何其他目录下,将其改名为ramdisk.img.gz,然后使用命令# gunzip ramdisk.img.gz,然后新建一个文件夹ramdisk,进入,输入命令# cpio -i -F ../ramdisk.img 得到结果如下drwxr-xr-x 8 root root 4096 2011-01-12 11:36 ./drwxr-xr-x 13 root root 4096 2011-01-12 11:35 ../drwxrwx--x 2 root root 4096 2011-01-12 11:36 data/-rw-r--r-- 1 root root 118 2011-01-12 11:36 default.propdrwxr-xr-x 2 root root 4096 2011-01-12 11:36 dev/-rwxr-x--- 1 root root 107784 2011-01-12 11:36 init*-rwxr-x--- 1 root root 492 2011-01-12 11:36init.freescale.rc*-rwxr-x--- 1 root root 1677 2011-01-12 11:36init.goldfish.rc*-rwxr-x--- 1 root root 18263 2011-01-12 11:36 init.rc*drwxr-xr-x 2 root root 4096 2011-01-12 11:36 proc/drwxr-x--- 2 root root 4096 2011-01-12 11:36 sbin/drwxr-xr-x 2 root root 4096 2011-01-12 11:36 sys/drwxr-xr-x 2 root root 4096 2011-01-12 11:36 system/ #可以看出这写文件是和root目录下的内容完全一样,其实就是对root目录的打包和压缩。
搭建Android源码编译环境
Android 2.3.1 的源代码并在 Ubuntu 10.04(32 位)上编译通过。
这篇文章简 要记录了下载、编译的过程。
关于搭建 Android 开发环境的文章已经有很多,本文只简要介绍一下,做为备 忘。
[ 编译前的准备 ] 这一步安装获取源代码以及编译所需要的软件,使用如下命令:$ sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev 另外,参考别人编译 Android 2.3 的经验,安装了下列软件包:$ sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6 虽然 Android 官方网站上讲不支持 Java 6,不过我使用 Java 6 也可以编译通 过,所以在这里 Easwy 安装的是 Java 6。
首先去掉/etc/apt/sources.list 中 这两行的注释,使能 Java 6 源:deb /ubuntu lucid partner deb-src /ubuntu lucid partner 然后安装 Java 6 JDK:$ sudo aptitude install sun-java6-jdk1接下来下载 repo 工具,这是 Google 提供的一个 Python 脚本,方便管理多个 Git 版本库:$ cd ~ $ mkdir bin $ curl /repo >~/bin/repo $ chmod a+x ~/bin/repo 记得把 repo 加到你的路径中, 方便以后使用。
编辑~/.bashrc, 加入下面一行:PATH=$PATH:~/bin export PATH 然后用命令. ~/.bashrc,以后就可以直接使用 repo 命令了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ramdisk.img system.img userdata.img介绍及解包、打包方法2011-11-25 11:37:24分类:ramdisk.img system.img userdata.img介绍及解包、打包方法Android 源码编译后,在out/target/product/generic下生成的三个镜像文件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。
ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载这3个映像文件后,会把system和userdata分别加载到ramdisk文件系统中的system和data目录下。
三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。
Ramdisk镜像是采用cpio打包,gzip压缩的。
用file验证:# file ramdisk.img输出: # ramdisk.img: gzip compressed data, from Unix为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:# mv ramdisk.img ramdisk.img.gz# gunzip ramdisk.img.gz# mkdir ramdisk#cd ramdisk#mkdir temp#cd temp# cpio –i –F ../ramdisk.img这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。
通过执行以下的操作,我们可由目录树再生成ramdisk镜像# cd temp# find . | cpio -o -H newc | gzip > ../ramdisk-new.img 这两个镜像都属于yaffs2文件格式,生成方式是一样的。
我们就以system.img为例来说明。
System.img >> system目录树所需工具unyaffs, 下载地址/p/unyaffs/downloads/list# mkdir system# cd system# unyaffs ../system.imgsystem目录树>> system.img所需工具mkyaffs2image,Android源码编译后会生成该工具,在out/host/linux-x86/bin 目录下。
命令格式:# mkyaffs2image system/ system_new.img了解以上方法的意义在于,我们可以对镜像文件镜像修改,定制,以符合自己的需求。
网上有很多制作Android ROM的教程,这里罗列一些链接:北理工的陈罡写的两篇文章,是我目前发现的最好的教程,写的非常详细/u/26691/showart_2193396.html/u/26691/showart_2194274.html这两篇文章参考了国外论坛的几个经典教程:/showthread.php?t=566235/wiki/inde ... Re-Pack_Boot_Images国内还有一篇文章写的也不错,这篇文章更侧重于制作类似Patch的ROM包/html/201002/1267213800ID1030.html这里基于自己的理解和测试,总结了一些方法步骤。
Android 的ROM包通常称为update.zip包,你可以到上下载现成的.zip 包。
要学习ROM包的制作,我们可以从这样一个zip包开始。
解开zip包后,通常有这样一些内容:1、boot.img 文件这是编译内核源代码生成的内核映像,然后与android源码编译出来的ramdisk.img一起通过mkbootimg工具创建出来的,图省事的朋友也可以从网上其他的刷机包里面拷贝一个能用的出来即可,基本上都差不多。
2、 META-INF目录这个目录是手工创建的,主要用来存放一个升级脚本update-script(这个脚本的内容与system目录中包含的文件有很大关联)以及签名。
3、system 目录这个目录就是编译android的平台源代码生成的要创建自己的ROM,我们通常会涉及到以下的一些工作:1.编译内核生成内核映像。
但一般情况下,我们没有必要自己去编,直接从刷机包里面取出一个就可以。
譬如,你要做一个2.2版本的升级包。
可以到网上找一个与自己机型相匹配的刷机包,从里面取出相应的kernel.img。
2.ramdisk.img的修改。
ramdisk.img 是根文件系统,Ugg boots,里面包含了启动配置脚本。
3.update-script的修改。
4.System的修改。
详细的步骤可以参考/u/26691/showart_2194274.html。
我们先做个简单的测试工作,来为后面更复杂的工作做好铺垫。
测试内容为:先对zip进行解包,然后分别在ramdisk和system的根目录下添加一个小文件,接着,生成新的ROM,并验证ROM是否可用。
这里要指出的是,这篇文章以及网上许多类似网站提到的方法都是针对HTC G1或Nexus one的。
而我在测试的时候,用的是HTC G3 Hero。
以上的方法导致的一个后果是,重新打包后再烧录,机器无法正常启动,adb shell也无法登陆。
后来在国外的一篇博客上看到了对此问题的说明,问题的根源很简单,从G3开始,打包的时候需要指定―--base‖参数。
对于Hero,参数为‖--base 0x19200000‖,但对于其它型号的机器,‖--base"要设定为多少,需要参考内核代码的实现。
解包打包可用两个脚本完成unpack-bootimg.pl, repack-bootimg.pl。
其中打包脚本用到的mkbootimg工具,在out/host/linux-x86/bin目录下。
unpack-bootimg.pl可直接将boot.img生成内核镜像boot.img-kernel和ramdisk目录树boot.img- ramdisk。
repack-bootimg.pl可将boot.img-kernel和boot.img-ramdisk重新生成boot.img。
在解包后,我们在ramdisk和system目录下,各添加一个测试小文件(譬如叫mytest)。
做完这些开始组包,重新生成update.zip。
到这里我们的工作并没有完全结束,还有最后的一步——签名。
签名需要用到签名工具testsign.jar,这是一个基于java 1.6版本的工具。
在编译Android源码的时候,我们强调要用java 1.5。
在这里,我们必须切换到1.6版本。
1)重新生成boot.img将前面解包得到的boot.img-ramdisk 和编译源码后out/target/product/generic/下的root目录树放在一个目录下,然后用repack-bootimg.pl重新生成boot.img2) 创建一个目录myupdate,将上面生成的boot.img放到这个目录下3)将编译Android后,out/target/product/generic/生成的system目录树拷贝到myupdate目录4)在myupdate目录下创建update-script脚本目录# mkdir -p META-INF/com/google/android5)删除system/bin目录下的―符号链接‖,创建update-script脚本研究原有的update-script脚本,我们可以大致看出update-script负责文件删除拷贝,权限设置,符号链接创建等工作。
我们可以在原有update-script的基础上进行修改以得到我们自己的update-script。
这里,我们要注意的是,要保证update-script 的link创建成功,必须把/system/bin下的link删除。
我们可以用一个脚本来做这个工作delsymlink。
我修改后与自己编译的Android2.2 system目录树相匹配的脚本。
6)重新打包并签名7)自制ROM下载时报错在试验过程中,我经常遇到如下的报错Can't open/sdcard/download/update.hiapk问题原因:当update-script 中有命令操作错误,脚本就会停止,并报这个错误,解决的办法就是修正脚本。
你可以从这个错误前面的提示,知道脚本哪一行出错了。
很多时候,你并不需要创建一个完整的ROM包。
你需要的只是,添加删除或修改一些功能(譬如你仅想添加一个应用,或者你想添加busybox工具)。
我们可以参考这里,来实现这个目的。
3.创建一个Patch功能的ROM很多时候,你并不需要创建一个完整的ROM包。
你需要的只是,添加删除或修改一些功能(譬如你仅想添加一个应用,或者你想添加busybox工具)。
我们可以参考这里,来实现这个目的。
我用一个简单的例子来说明这个过程。
该例子是在system目录下添加一个mytest文件,同时创建一个指向这个文件的符合链接mylink。
以下是过程:1)创建patch_update目录,并在该目录下执行# mkdir system# mkdir –p META-INF/com/google/android2)在system目录下生成mytest文件3)在META-INF/com/google/android 创建如下的update-scriptshow_progress 0.1 0copy_dir PACKAGE:system SYSTEM:symlink mytest SYSTEM:mylinkset_perm 0 0 0755 SYSTEM:mytest4) 打包签名如果前面的3步曲,你已经很好的掌握了,应付你的日常工作应该没有太大的问题。
但要成为真正的ROM高手,你还有很多东西要修炼。
你要了解整个启动过程,内核编译,Android源码的编译及配置,文件系统及启动配置。
烧录Android 机器HTC的官网上有一篇文章这里详细介绍了镜像包及烧机方法。
通常用两种烧录方式:recovery模式,fastboot模式。
通过一些组合键,可以进入烧录模式。
以HTC G3 Hero为例,―Home + Power‖同时按,可以进入Recovery模式,―Back + Power‖可以进入fastboot 模式。
Recovery模式比较常用,它相当菜单界面的下载模式。