一:update.zip包的制作
1:新建一个目标,在此目录下准备好需要的文件,如system目录文件、boot.img、recovery.img等.
mkdir testupdate
cp system/ testupdate/ -tf
注:如果文件是system.img镜像可以用unyaffs解压出来得到system
2:用make-update-script工具生成update-script脚本,如下
cp make-update-script testupdate/
cp android-info.txt testupdate/
cd testupdate
./make-update-script system android-info.txt > update-script
rm make-update-script android-info.txt
vi update-script //根据需要适当修改些脚本
说明:system是要更新的目录,android-info.txt是板的版本信息,update-script是输出文件名
3:建立一个目录名称为META-INF/com/google/android,把上面生成的脚本放进去
mkdir -p META-INF/com/google/android
mv update-script META-INF/com/google/android/
4:压缩文件
zip -r update.zip system META-INF
5:给压缩文件添加签名
mv update.zip ../signapk/
cd ../signapk/
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip signed-update.zip
6:删除多余的文件,并把生成的包重命名
rm update.zip
mv signed-update.zip ../update.zip
cd ../
7:大功告成,把更新包update.zip拷到sdcard根目录下去验证吧!
注意:
1)如果文件里有连接,应该在获取update-script之后在原文件里删除链接文件,再打包,否则symlink将出错;
2)如果原文件里有空目录,所获的签名将失去此记录,所以如果空目录必须存在,更新之后的文件将与原文件不同(少了空目录)
二:ramdisk.img 制作
方法1:
解压:
1) mv ramdisk.img ramdisk.img.gz
2) gunzip ramdisk,img.gz
3) mkdir ramdisk;cd ramdisk
4) cpio -i -F ../ramdisk.img
压缩:
1) 产生要pack的目录list,也可以自己列
cpio -i -t -F ../ramdisk.img > list
2) 利用刚生成的list文件列表,cpio归档
cpio -o -H newc -O new.img < list
3) gzip new.img
方法2:
解压: gunzip -c ../your-ramdisk-file | cpio -i
压缩: find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz
注意:在android里的做法是
1)先得到ramdisk所需要的文件,比如root目录
2)用mkbootfs制作ramdisk.img,用法如下
mkbootfs root | gzip > ramdisk.img
这里需要验证哪个能用android写下去
三:boot.img的制作
1:android正常做法
1):连接
mkbootimg --kernel your-kernel-file --ramdisk newramdisk.cpio.gz --cmdline "mem=128 console=ttymxc0,115200n8 init=/init rw" --output mynewimage.img
或
mkbootimg --kernel your-kernel-file --ramdisk newramdisk.cpio.gz --cmdline --output mynewimage.img
2):提取img中的kernel和ramdisk
./split_bootimg.pl mynewimage.img
2:uboot
直接把uImage重命名为boot.img即可
四:system.img的制作(只为 yaffs2格式)
1)压制:./mkyaffs2image system/ system.img
2)解压:./unyaffs system.img
四:system.img的制作(只为yaffs2格式)
1)压制:./mkyaffs2image system/ system.img
2)解压:./unyaffs system.img
五:recovery.img的制作
1:如果recovery的镜像是只有文件系统部分时候可以如第四所示范
2:如果recovery为ramdisk形式
=============================================
制 作ramdisk的过程。
1.在/mnt下创建rdmnt 和 rdimg 目录
mkdir rdmnt
mkdir rdimg
2.创建一个ramdisk文件,大小32768 X 1k。
dd if=/dev/zero of=rdimg/ramdisk bs=1k count=32768
3.使用ext2方式格式该文件
mke2fs -F -v -m0 rdimg/ramdisk
4.将该ramdisk文件和rdmnt挂载
mount -o loop rdimg/ramdisk rdmnt/
5.拷贝文件到挂载目录中。
文件系统目录在:/home/xrqun/workdir/filesys/
cp –av /home/xrqun/workdir/filesys/* rdmnt
6.卸载ramdisk
umount rdmnt
7压缩 ramdisk文件
gzip –c -9 <rdimg/ramdisk > rdimg/ramdisk.gz
8.拷贝该ramdisk.gz映像到tftpboot目录下
cp rdimg/ramdisk.gz /tftpboot/
9. 使用mkimage工具
mkimage -n "uboot.ramdisk.filesys" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz uboot.ramdisk.gz
安卓自制recovery教程推荐学习 我想大家对recovery已经很熟悉了吧基本每个机型都可以在网络上找到你们机型的对应的recovery但是有些新出的机型或者一些冷门安卓机型是没有recovery的这时候我们怎么办呢其实我们完全可以手工去制作一个属于自己机型的recovery下面我就给大家写个教程一起探讨一下。 首先我给大家介绍一下recovery.img包含镜像和内核两部分
大家一般对着recovery.img右击解压会出现压缩包损坏其实这个包是可以解开的需要特定的工具思路我们就有了我们可以拿其它型号的recovery解包后得到镜像和内核部分然后从你要的型号的官方ruu中提取官方的recovery.img也解包得到镜像和内核部分
然后把官方recovery的内核部分和其他手机recovery的镜像合包组成新的recovery这样我们的recovery就做成了。
下面我们来看看具体步骤以htc为例 准备工作
下载recovery.img专用的bootimg.rar群共享这个工具本来是解包boot.img的
同样可以用来解包recovery但recovery.img要名为boot.img
从官方ruu中提取到官方recovery.img并命名为boot.img下载其他机型的其他手机的recovery.img建议大家下载g6的5.0.2.0比较稳定
同样命名为boot.img解压bootimg.rar得到bootimg文件夹复制到d盘先复制官方的recovery到bootimg文件夹 流程
开始-运行-cmd d:回车 cd boot回车 bootimg --unpack-bootimg 这时候我们的官方recovery就被解包了
解包后会得到下面一个文件夹和一个文件将这两个文件剪切到电脑其他地方
我们用同样的方法解包一下其他手机的recovery也会得到两个相同的文件之后我们把官方的内核kernel和其他手机的镜像ramdisk.gz一起放到bootimg文件夹 看图中的第一步官方recovery解包base基址是0x200000,cmdline命令行是“mem=211M console=null androidboot.hardware=qcom",page-size是2048padding-size是4096那么都要回编回去接下来打包的时候就应该输入以下命令
根据你操作的时候实际数值来 bootimg --repack-bootimg 0x200000 "mem=211M console=null androidboot.hardware=qcom" 2048 4096
如下图所示OK这才是真正的打包完成就如果直接打包的话华为中兴的无所谓不过其他机器就开不了机器了
个性点的定制思路可以用boot --unpack-ramdisk命名解开镜像包ramdisk后到initrd文件夹中的res文件夹改改图标之后用bootimg --repack-ramdisk命令重新合成ramdisk之后再合成boot.img 以上我们成功解包官方的和其他手机的recovery之后合并了一个新的recovery最后我们把新生成的boot.img再改回recovery.imgrecovery.img得到了下面的不用我说了吧
/
完全编译 rhodium-nand,xdanrdoid的直刷文件
本文目录:
一、说明与用途
二、搭建环境,下载android、kernel、交叉编译器等文件
1. 开发环境搭建可参考:
2. 下载必须的文件:
三、编译
1.RHODIMG.NBH(LK for Rhodium,LK介绍)
(1)得到lk.bin:
(2)编译NBH
2. 内核zImage的编译:
4. 刷机包rhod-nand-weihongcsu-v0.5.zip的制作:
四、参考资料
一、说明与用途:
本文将介绍如何编译HTC Touch pro2 sprint 的nand直刷android需要的所有文件, 该机型也叫(也叫xv6875,也叫rhod400)。
从这里下载weihongcsu制作的nand直刷文件(内核是2.6.27.46,android是gingerbread 2.3.7),现在的版本只是能刷上,功能未测试(因为weihongcsu的目的是研究android和kernel的移植)。下载后,请按照说明刷上。
该编译,对一般的nand 直刷,有一定的通用意义。
现在介绍如何编出各个文件:
二、搭建环境,下载android、kernel、交叉编译器等文件
1. 开发环境搭建:
我的系统是ubuntu10.10,
$sudo apt-get install git-core build-essential gnupg flex bison gperf libsdl-dev esound zip curl libwxgtk2.6-0 libc6-dev-i386 g++-multilib lib32z1-dev lib32ncurses5-dev java-common openjdk-6-jdk
2. 下载必须的文件:
(1)RHODIMG.NBH需要:
git clone git://gitorious.org/tinboot-for-linux-msm/tinboot-linux-msm.git
git clone git://gitorious.org/~acl/lk-msm7200a-htc-wince/acls-lk-msm7200a-htc-wince.git
之后切换分支:在acls-lk-msm7200a-htc-wince文件夹下:
git checkout google_lk
(2)rhod-nand-weihongcsu-v0.5.zip需要:
(i)内核:git clone git://gitorious.org/~acl/linux-on-qualcomm-s-msm/linux-msm-rhod-nand.git
(ii)repo的下载与配置:
$ mkdir ~/bin $ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo
(iii)xdandroid2.3.7下载:
$ PATH=~/bin:$PATH$ mkdir ~/xdandroid2.3 $ cd ~/xdandroid2.3 $ repo init -u git://gitorious.org/xdandroid/manifest.git -b gingerbread $ repo sync
(3)下载编译器并解压:
编译器一:arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2:
https://sourcery.mentor.com/sgpp/lite/arm/portal/package7813/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
编译器二:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
https://sourcery.mentor.com/sgpp/lite/arm/portal/package5383/public/arm-none-linux-gnueabi/arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
三、编译
从底层到上层依次介绍:
1.RHODIMG.NBH(LK for Rhodium,LK介绍:LK Bootloader,(L)ittle (K)ernel based Android bootloader)
(1)得到lk.bin:
$ cd acls-lk-msm7200a-htc-wince$ ./build.sh
其中,build.sh为:
export TOOLCHAIN_PREFIX=arm-none-linux-gnueabi-
#改自己的路径,arm-*****的编译器里,只能用arm-2009q3(本文下载的),其他版本不行,原因未深究。
export PATH=$PATH:/home/weihongcsu/disk2/arm-2009q3/bin
_XPROJ=msm7200a_htc_wince
make $_XPROJ clean
make $_XPROJ
将acls-lk-msm7200a-htc-wince/build-msm7200a_htc_wince下的lk.bin放在tinboot-linux-msm/kernel/下。
lk.bin的获得要感谢pieceking的帮助,跟他发了多份邮件才解决的。
(2)编译NBH
$ cd tinboot-linux-msm/
修改makelk.sh 中PATH变量为你的路径。
$ ./makelk.sh
会发现报错:cp: cannot stat `/home/weihongcsu/disk2/nand/
tinboot-linux-msm/tools/lk_ payload': No such file or directory 解决办法:将/
tinboot-linux-msm/tools 下的rhod_payload重命名为lk_ payload,应该是ACL修改时忘记上传了,给他发过信息了。 OK,得到RHODIMG.NBH,可以刷一下试试!
2. 内核zImage的编译:
$cd linux-msm-rhod-nand
$./fullbuild.sh
fullbuild.sh内容为:
#!/bin/sh
ANDROID=/home/weihongcsu/disk2/nand
# TINBOOT -- tinboot directory
TINBOOT=$ANDROID/tinboot-linux-msm
# KERNEL_PATH -- directory containing the linux-msm kernel source
KERNEL_PATH=$ANDROID/linux-msm-rhod-nand
# TOOLCHAIN_PATH -- directory containing the arm toolchain
TOOLCHAIN_PATH=~/disk2/eabi/arm-2010.09/bin/arm-none-eabi
# MODULES_PATH -- directory for modules
MODULES_PATH=$TINBOOT/modules
make -j4 ARCH=arm htc_msm_nand_defconfig
make ARCH=arm CROSS_COMPILE=$TOOLCHAIN_PATH- INSTALL_MOD_PATH=$MODULES_PATH zImage modules modules_install经weihongcsu测试,该版本编译器不会出问题,高版本或低版本都会出问题,原因未深究。
zImage位于:linux-msm-rhod-nand/arch/arm/boot/
3. 制作自己的cwm_recovery.img:
$ ./split_bootimg.pl cwm_recovery.img
将zImage放到本级目录
$ ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk cwm_recovery.img-ramdisk.gz -o cwm_recovery.img
split_bootimg.pl和mkbootimg可以在“rhod-nand-weihongcsu-v0.5-xv6875直刷文件” 中找到。
OK,生成了自己的cwm_recovery.img。详细解释可以参考:如何解包/编辑/打包Android的boot.img文件
我的cwm_recovery.img模板是从这里下载的:http://code.google.com/p/rhodium-nand/downloads/list
4. 刷机包rhod-nand-weihongcsu-v0.5.zip的制作:
(1)编译xdandroid:
参考这两个文档完成编译:
http://xdandroid.com/wiki/Build_Configuration
http://xdandroid.com/wiki/Building_and_Packaging
Building_and_Packaging中指定下载的zip文件(signed-dream_devphone_userdebug-ota-14721.zip)如果源地址不能下载,可再Google,百度中搜索下载。
(2)替换原有的system目录
解压rhod-nand-weihongcsu-v0.5.zip,会看到:
boot.img
META-INF
system
删除system,然后把/xdandroid2.3/out/target/product/msm/这个目录下面的system拷贝到当前的工作目录下。(3)修改update-script脚本
修改META-INF/com/google/android目录下的那个叫做update-script的脚本,只要修改一下即可,主要是删除一些不存在的文件以及增加一些文件的权限之类的定义(语法十分清晰,一目了然)。把需要“预装”到刷机包里面的apk安装程序都准备好,将这些apk拷贝到system/app目录下即可。(4)生成boot.img。
方法类似生成cwm_recovery.img。
$ ./split_bootimg.pl boot.img
将zImage放到本级目录
$ ./mkbootimg --cmdline 'lcd.density=240 msmts_calib=0x9f.0x39a.0x35c.0x78 clock_7x00.grp=0xa99 hw3d.force=1 board-htcrhodium.is_cdma=1 msmvkeyb_toggle=off pmem.extra=1 force_cdma=1 gsensor_axis=2,1,3 pm.sleep_mode=1' --kernel zImage --ramdisk boot.img-ramdisk.gz -o boot.img
split_bootimg.pl和mkbootimg可以在“rhod-nand-weihongcsu-v0.5-xv6875直刷文件” 中找到。
OK,生成了自己的boot.img。详细解释可以参考:如何解包/编辑/打包Android的boot.img文件
(5)重新打包成update.zip
本级目录保留以下文件,其余都删除:
boot.img
META-INF
system之后:
$ zip -r update.zip . <---注意这最后的“.”是必不可少的,代表是当前路径下的意思。
(6)为做好的刷机包签名
在上面提到的链接中,有一个叫做AutoSign的工具,打开一看是一个jar格式的工具包。
运行如下命令对刷机包进行签名:
$ java -jar autosign.jar update.zip update_signed.zip
ok,签名完毕后,就可以备份一下手机里面的东西,测试一下了!
rhod-nand-weihongcsu-v0.5.zip的制作详细解释可以参考:Android平台刷机包修改制作方法
四、参考资料(除了以上提到的):
1、justvu的帖子:
[6875] 12.16日更新我制作的NAN直刷ROM:无睡死有铃声可照相支持WIFI/3.5G/USB/GSM/WCDMA/CDMA
2、内核开发者natemcnutty写的: How To Compile Your Own Kernels, Modules, Tinboot (NAND boot), and More for Beginners,http://forum.ppcgeeks.com/android-tp2/136054-how-compile-your-own-kernels-modules-tinboot-nand-boot-more-beginners.html
3、xdandroid.com的官方指南:http://xdandroid.com/wiki/Getting_the_Source
http://xdandroid.com/wiki/Build_Configuration
http://xdandroid.com/wiki/Building_and_Packaging
4、android官网:http://source.android.com/source/downloading.html
/