一、编辑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的,所以操作起来没区别)