移动叔叔
标题:
有关app2sd的资料
[打印本页]
作者:
yuanying23
时间:
2010-10-24 17:26
标题:
有关app2sd的资料
这几天刷完双系统一直因android的小内存所困扰,也因此在网上寻找相关app2sd的教程,发现一般的教程都是基于修改过的rom所进行的,我也照着做了一下,方法也行不通,今天无事有在网上寻找,看到了一篇不错的文章,是基于原厂未修改过的rom进行的app2sd的。唯一的关键点是有懂对boot.img解包修改及封装的高手。只要稍微改动修改其中的init.rc文件,在其中mount一段中,加下以下一行:
mount ext2 /dev/block/mmcblk0p2 /system/sd rw
就可以使用了。下面是原帖内容。大家可以看看有没有在a1-上实现的可能。
本帖最后由 大苦瓜 于 2010-3-30 11:23 编辑
注意:这是一个原理性验证过程,虽然偶现在就是这样在N1上实现APP2SD的,但您一定要读完整个帖子再决定你是否要干这个事!切记切记!
APP2SD,顾名思义就是把APP程序装到SD卡中,特别适合那些整天泡电子市场,嫌N1内存不够的N友。
网上有很多在G1~G5上刷ROM实现APP2SD的帖子,用APP2SD作关键字在坛子里搜索就能找到很。这些帖子里面有关如何分区,如何装busybox,如何用adb shell等都讲得很详细,偶就不再重复了。以下所有操作的假设的是,N1已经unlock并且root了,在/data里装了busybox并可以跑起来。至于SD卡的分区,偶是用N1 刷recovery后,在recovery里带的Partition 工具做的。这种做法又快又方便,也不用在PC里装一堆东西。偶的一张8G卡,swap分的是0(表示不分SWAP),ext2是640MB,剩余的给FAT32。
下面言归正转,汇报验证的过程:
1、创建目录,加载分区
分好区并reboot后,那个640MB的ext2分区是不会被N1自动加载的,更不会像坛子里很多APP2Sd教程说的那样,自动挂到/system/sd目录下。依次做以下操作(下文凡是#开头的内容均表示在Shell里的命令行操作):
adb shell
# ls -l /dev/block
如果看到有一个mmcblk0p2,就说明分区是成功的,下面是偶的N1上显示的结果,注意标为蓝色字体那一行。
drwxr-xr-x root root 2010-03-29 23:33 vold
brw------- root root 179, 2 2010-03-29 23:33 mmcblk0p2
brw------- root root 179, 1 2010-03-29 23:33 mmcblk0p1
brw------- root root 179, 0 2010-03-29 23:33 mmcblk0
brw------- root root 31, 6 2010-03-29 23:33 mtdblock6
brw------- root root 31, 5 2010-03-29 23:33 mtdblock5
brw------- root root 31, 4 2010-03-29 23:33 mtdblock4
brw------- root root 31, 3 2010-03-29 23:33 mtdblock3
brw------- root root 31, 2 2010-03-29 23:33 mtdblock2
brw------- root root 31, 1 2010-03-29 23:33 mtdblock1
brw------- root root 31, 0 2010-03-29 23:33 mtdblock0
brw------- root root 7, 7 2010-03-29 23:33 loop7
brw------- root root 7, 6 2010-03-29 23:33 loop6
brw------- root root 7, 5 2010-03-29 23:33 loop5
brw------- root root 7, 4 2010-03-29 23:33 loop4
brw------- root root 7, 3 2010-03-29 23:33 loop3
brw------- root root 7, 2 2010-03-29 23:33 loop2
brw------- root root 7, 1 2010-03-29 23:33 loop1
brw------- root root 7, 0 2010-03-29 23:33 loop0
接着看一下分区被加载的情况
#/data/busybox/df -h
显示的内容是这样的:
Filesystem Size Used Available Use% Mounted on
tmpfs 193.1M 0 193.1M 0% /dev
tmpfs 4.0M 0 4.0M 0% /sqlite_stmt_journals
/dev/block/mtdblock3 145.0M 114.1M 30.9M 79% /system
/dev/block/mtdblock5 196.3M 4.5M 191.8M 2% /data
/dev/block/mtdblock4 95.0M 1.6M 93.4M 2% /cache
/dev/block//vold/179:1
6.8G 35.1M 6.8G 1% /sdcard
注意,在这里可以看到前面分那个640MB的ext2分区是没有被N1加截的,但6.8G的FAT32分区已经被N1自动加载了。
我们要做的是在/system下建一个叫sd的子目录,并把640MB的ext2分区加载到/system/sd目录上。
由于/system是只读的,要先remount加上写权限才能创建sd子目录,执行以下两行命令解锁只读和创建SD子目录:
#mount -o remount rootfs /
#mkdir /system/sd
这样/system/sd目录就建好了。接着把640MB的分区mount上去,执行以下命令:
#mount -t ext2 /dev/block/mmcblk0p2 /system/sd
上述命令执行完,如果再用df -h命令去看,就会发现多一行输出,像下面这样的:
/dev/block/mmcblk0p2 572.4M 14.0k 541.8M 0% /system/sd
这就说明SD卡上分的ext2分区已经被挂到/system/sd上了,也就说/system/sd是一个有640MB空间的目录。接下来,就可以参考坛子里前辈有关APP2SD的操作,把应用从/data/app迁移到/system/sd目录中去了。爱学习的童鞋可以参考这篇
http://www.hiapk.com/bbs/thread-2341-1-1.html
,以下是偶操作的所有命令:
1)在新分区上建应用子目录
# mkdir /system/sd/app
2)把应用程序数据复制过去,有4个目录要复制
# ./cp -a /data/app /system/sd/
# ./cp -a /data/app-private /system/sd/
# ./cp -a /data/dalvik-cache /system/sd/
# ./cp -a /data/data /system/sd/
3)删掉/data目录中与app相关的内容,也就是删除上述4个目录,一边删除一边用ln关联指向到新的SD卡分区上,完成应用迁移
# ./rm -rf /data/app
# ./ln -s /system/sd/app /data/app
# ./rm -rf /data/app-private
# ./ln -s /system/sd/app-private /data/app-private
# ./rm -rf /data/data
# ./ln -s /system/sd/data /data/data
# ./rm -rf /data/dalvik-cache
# ./ln -s /system/sd/dalvik-cache /data/dalvik-cache
上述操作做完后,应用就已经迁移到SD卡了。经偶测试,内存确实释放了,到电子市场里新下载应用也会自动装到SD卡上。但是,这个帖子没有解决的一个问题是,
如果重启N1,就
惨
了!重启后,机子会一直停留在播放光线动画的界面,进不了系统。此时要把机子通过USB线和电脑接起来,进ADB shell,然后执行#mount -t ext2 /dev/block/mmcblk0p2 /system/sd命令,机子才能顺利启动。
这也是这个帖子之所以叫原理性验证的原因。
以上过程证明,Nexus one是可以像早前的G1、G2....一样,做到APP2SD的,而且是用原厂的ROM就能做到(偶没刷新过其他的ROM)。但上述方法的缺憾是,由于不能把mount ext2分区的指令加入到N1的自动启动SHELL里,导致每次重启都要连PC,通过ADB SHELL手工MOUNT,因此实用性不强。为解决这个问题,偶已经努力学习了一番,应该说已经找到下一步解决这个问题的思路,先汇报如下:
1、导出本机的boot.img,解开后,修改其中的init.rc文件,在其中mount一段中,加下以下一行:
mount ext2 /dev/block/mmcblk0p2 /system/sd rw
2、重新封装boot.img,flash回本机,这样就可以实现完美的Nexus one APP2SD。
上面话说起来是简单,但改boot.img是一个复杂的过程,需要Ubuntu的LINUX环境。由于偶还没有真正掌握如何改boot.img,因此上述两步还没做。偶已经查到一个网上介绍修改boot.img的帖子,链接是:
http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images
。或者请哪位高人学学雷锋,改一个boot.img出来,贡献给大家用,其中,基于ERE27的boot.img应该是适用所有Update到2.1的N1手机的。
**********----
3月30日补充
,
建议只有class6的卡才做APP2SD
,否则会慢得让人难以忍受。如果是Class6的卡,其读取/写入速度约为19MB/S和6MB/秒。可以用一个名ATTO Disk Benchmark的免费软件测试。后面这个链接给出了一个如何测试SD卡读取速度的例子:
http://www.zol.com/labs/638718_20729.html
**********----
欢迎光临 移动叔叔 (http://bbs.ydss.cn/)
Powered by Discuz! X3.2