turnip_gray 发表于 2012-12-31 02:11:11

在Raspberry PI上处理Android ROM

一、编辑boot.img中根目录下的文件。
通过修改从手机里用CWM备份出来的boot.img文件,可以实现开机就启动adbd、adbd运行在root权限下(可以remount system分区,从而通过复制su等文件获得root权限)、首次启动时自动建立某些目录(通过编辑init.rc)等操作。
修改boot.img文件需要在Linux下,并借助mkbootfs、mkbootimg、unpackbootimg三个程序来进行。不过ARM架构下没有现成的程序下载,需要从源码进行编译:
1.从https://github.com/CyanogenMod/android_system_core这里下载源码
2.复制./include/mincrypt目录
复制./libmincrypt/文件夹中的sha.c与rsa.c文件
复制./cpio目录中的mkbootfs.c文件
复制./include/private目录中的android_filesystem_config.h文件
复制./mkbootimg目录中的bootimg.h、mkbootimg.c、upackbootmg.c文件
到一同目录中。
3.在目录中新建一makefile文件
内容为:
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
LDCFLAGES =
STATIC_LIB = libmincrypt.a
#MKBOOTIMG_TARGET = arm-mkbootimg
MKBOOTIMG_OBJ = mkbootimg.o
MKBOOTIMG_SRC = mkbootimg.c
#UNPACKBOOT_TARGET = arm-unpackbootimg
UNPACKBOOTIMG_OBJ = unpackbootimg.o
UNPACKBOOTIMG_SRC = unpackbootimg.c
LIBMINCRYPT_OBJ = sha.o rsa.o
SHA_SRC = sha.c
RSA_SRC = rsa.c
MKBOOTFS_OBJ = mkbootfs.o
MKBOOTFS_SRC = mkbootfs.c
mkbootimg:mkbootimg               #此处定义编译mkbootimg
mkbootimg:$(MKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)

$(MKBOOTIMG_OBJ):$(MKBOOTIMG_SRC);$(CC) -c $<

unpackboot:unpackbootimg            #此处定义编译unpackbootimg
unpackbootimg:$(UNPACKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)
$(UNPACKBOOTIMG_OBJ):$(UNPACKBOOTIMG_SRC);$(CC) -c $<

lib:libmincrypt.a                     #此处定义编译libmincrypt.a
libmincrypt.a:$(LIBMINCRYPT_OBJ);$(AR) -r $(STATIC_LIB) $(LIBMINCRYPT_OBJ)
sha.o:$(SHA_SRC);$(CC) -c -fPIC $<
rsa.o:$(RSA_SRC);$(CC) -c -fPIC $<

mkboot:mkbootfs                  #此处定义了编译mkbootfs
mkbootfs:$(MKBOOTFS_OBJ);$(CC) -o $@ $<
$(MKBOOTFS_OBJ):$(MKBOOTFS_SRC);$(CC) -c $<

4.编辑mkbootfs.c文件
将最后一个include替换为
#include “android_filesystem_config.h”

5.执行:
make lib
make mkbootimg
make unpackboot
make mkboot

PS:以上方法,出自http://www.cnblogs.com/sn-dnv-aps/archive/2012/05/25/2517862.html
并经过本人整理
再次PS:下载下来的源码里还有个adb目录,有兴趣研究的童鞋可以看看,也许能编译个adb神马的,以后就可以直接在pi上通过adb debug手机了。

有了mkbootfs、mkbootimg、unpackbootimg之后,就可以通过
unpackbootimg -i boot.img
gzip -dc ../boo.img-ramdisk.gz | cpio -i
解压boot.img文件了
通过编辑解压后的根文件系统中的default.prop文件可以修改adbd的运行权限
通过修改init.rc可以让手机在首次启动系统的时候建立相应的目录等
修改后,通过
mkbootfs ./ramdisk | gzip > ramdisk-new.gz
mkbootimg --cmdline ‘###’ --kernel
###### --ramdisk ramdisk-new.gz --base 0x######## --pagesize #### -o boot-new.img
命令,重新打包boot.img
详见“MIUI ROM定制教程.pdf”

二、为Android编译Busybox
因为同为ARM架构,所以在PI上编译有得天独厚的优势:不需要搭建交叉编译环境……GCC出来的就直接可以用在ARM的机器上
1.从busybox.net/downloads/下载源码
2.apt-get install libncurses5-dev下载必要的库
3.make menuconfig调出菜单配置界面
4.
Busybox Settings -> Build Options ->中选中"Build BusyBox as a static binary (no shared libs) "这样编译完成后的BusyBox才能独立运行,不依赖别的库
Busybox Settings -> Installation Options->里面要选"Don’t use /usr"
5.退出保存,然后make编译

还可以用同样的方法为Android编译zip(因为busybox只提供了unzip,没提供zip),su(这个源码貌似在Android的源码里,Raspbian里面的su在Android下没法直接运行)等
甚至还可以编译Android的源码(在PC上都要编译小半天儿左右,估计在这上面得照着一个礼拜了,不推荐- -!)

三、反编译修改、美化Android
apt-get install openjdk-7-jdk
然后下载https://code.google.com/p/smali/
https://code.google.com/p/android-apktool/
之类的,接下来就跟在Win下一样了(因为是JAVA的,所以操作起来没区别)

树老大 发表于 2012-12-31 11:09:23

抢个沙发。

turnip_gray 发表于 2012-12-31 19:42:48

我的回复……新帖……怎么都需要审核了?!
什么情况- -!
页: [1]
查看完整版本: 在Raspberry PI上处理Android ROM