v970 2.5g /data 达成

昨晚捣鼓了下,发现比想象的容易很多。分区信息并不是写死的。而是在emmc设备的开始有分区表。因此手动改改分区表再重启格式化即可。然后发现把最后一个分区完全删掉也没问题。改改vold.fstab就行。有时间的话甚至可以做个完美卡刷包出来。

对于 V970 来说,他的分区数量超过了四个,因此里面有一个扩展分区,恰好我们要修改的最后两个分区都在这个扩展分区里面,于是只要修改 /emmc@ebr1 文件里面的分区表即可。用 dd if=/emmc@ebr1 of=/sdcard/test bs=512 count=1 即可 dump 出来,然后 adb pull 下来修改。这里有个值得一提的地方是,不知道是 MTK 的 bug 还是所有 android 都是这样,最后一个分区的 size 值是错误的,正常应该是 block 总数,他最后一个分区却是字节总数。因此用标准的工具比如 fdisk 之类编辑会出错,只能手动修改。修改好了以后,重启进入 recovery,adb 连上用 dd 写回 /emmc@ebr1。再重启进 recovery 让 kernel 认出新分区,最后 mke2fs -T ext4 /emmc@usrdata 。 同时别忘记 mount 上 /system ,修改 /system/etc/vold.fstab,将里面包含 /emmc@fat 的行删除,否则 vold 会彻底罢工导致 sd 卡也无法加载。

btw:神族上的风气真是不好,总是故作神秘,从来不见原理介绍贴。要说是贴合小白伸手党需求吧,往外放的东西却是专杀小白。有人放了个个3g data的包出来,下来一看居然是分好了把整个emmc dump出来。结果一堆把imei刷丢的。其实只要做的人认真点,避开nvram,也不至于搞死这么多人。。

V970 改大 /data

为了节省成本,比较新的android手机一般会内置2G-4G flash, 然后将除去系统剩下的部分作为 /sdcard,这样就不用随手机还送一个鸡肋的 tf 卡了。然而国内厂家也明白国内的特殊需求,因此通常也会保留 tf 卡插槽。于是如果你真的插了一个 tf 卡,就会悲剧的挂载在 /sdcard2 /sdcard/extra 之类非标准路径,不能被很多软件利用。目前常见的千元 android 手机,比如 zte v970, 夏新 N820 等,都是这样。

最简单的解决方案是 root 以后,修改 /system/etc/vold.fstab, 将里面 /sdcard 和 tf 卡的路径倒过来,这样 /sdcard 就还指向 tf 卡。但是机身原有的 /sdcard 空间就跑到了非标准路径,只能用来放些 mp3 之类的,这部分空间通常有 1-2G,与此同时,手机的 /data 分区却还经常是小小的几百 M, 一不小心把几个大家伙装进去就满了。如果能把浪费的空间都给 /data 就堪称完美。内置 flash 的速度和稳定性都要比外置的 sd 卡有优势,可以用来运行经常要启动的应用,比如微博微信之类。

改手机分区大小也不算是什么新鲜事情,以前在只有 512M 或者 1G flash 的手机上,经常有人放出来调整 /system 分区的 rom。 但是 V970 等流行屌丝机大部分是 MTK 方案的,而 MTK 方案的资料少之又少,我自己尝试修改了刷写工具的分区描述文件,但是刷机以后似乎无效,启动以后原来的分区大小没有变化,网上搜了一下,搜到一些可能是从事 MTK android 开发的人的笔记,里面提到 MTK 方案改分区是修改代码里面一个 xls 文件,然后用 ptgen 工具来生成所有对应的 .h 和刷写用的分区描述文件。如果是这样的话,说明 MTK 平台的分区信息可能是硬编码在内核里面的。这样除非搞到内核源码能重编译,否则就没啥搞头了(网上唯一找到的 MTK android 改分区的 ROM 是 HD7 的,但是其用到的 MT6573 网上有泄露出来的源代码,因此不知道作者是不是使用那些代码编译了一个新内核出来)

不过我们还有退而求其次的方案,那就是干脆把 /data 和原来 /sdcard 的空间也给调换过来算了。这样就只浪费原来 /data 的几百兆。和调换内外卡的情况不同的是,/data 是在 boot.img 启动的时候就挂载了,因此要调换这个,光 root phone 是不行的,还得修改 boot.img 里面的启动脚本才行。基本思路就是先解包,然后修改,最后重新打成 boot.img 刷进手机即可。

解包 MTK boot.img 的工具和其他平台略有不同,请使用 xda 上 bruno 的工具 下载两个.pl 文件就可以了,然后找一个你平台可以用的 mkbootimg 过来。执行

perl unpack-MT65xx.pl boot.img

之后会生成 boot.img-kernel 文件和 boot.img-ramdisk 目录,目录下面就是所有启动时 ramdisk 里面的文件,在里面修改所有 .rc 中涉及 /data 分区的地方即可, V970 的可以用我做的 diff, 下载来

cd boot.img-ramdisk
patch -p1 ../v970-initrd-diff
cd ..

即可
最后重新打包

perl repack-MT65xx.pl -boot boot.img-kernel boot.img-ramdisk boot1.img

这样就得到了一个 boot1.img. 把这个 boot1.img 单独刷进手机即可。

刷完了以后不要急于启动,因为两个分区原来的内容是不一样的,以前 /data 是 ext3/ext4 格式,而 /sdcard 通常是 fat 格式,因此请同时刷个第三方 recovery, 然后直接启动进 recovery,用 adb 连进去格式化新的 /data, V970 是

adb shell mke2fs /emmc@fat
adb shell tune2fs -O extents,uninit_bg,dir_index /emmc@fat
adb shell e2fsck -f /emmc@fat

这里不用 recovery 的格式化功能是因为 recovery 对 /data 的位置理解可能不一样,有可能格式化了其他的分区。

之后重启手机即可。

最后鸣谢一下神族论坛的 shuaidi, 参考了他的改大 data 方案。不过他方案的问题是授人以鱼,直接丢给你一个改好的 boot.img,对于洁癖者来说说实在不能接受。这个 boot.img 还有个副作用是 adb shell 默认是 root,这个虽然方便,但是有点太不安全。而且出了新版本以后也没法刷。还是自己在官方 rom 的基础上根据原理来改比较保险一些。

用电池充电器自制Waterpik水牙线的电源

本来这件事情没啥可写的,不过过程中搜了半天都没有得到有用的信息。所以写在这里,希望对其他搜索的人有所帮助。

关键词:Waterpik 水牙线, 220V 110V 电源。自制。

从米国扛了两个 Waterpik 的水牙线来,结果忘记了美帝用 110v 电压,把变压器直接插插座上,几分钟之内屋里就满是糊味。。

以前也曾经这么搞坏过 medela 吸奶器的电源,当时从淘宝上花十块钱就配了一个比原配标称还高不少的电源。因此并不是很慌张,看看这个变压器上面有 3V 250ma 的标志,直接在淘宝上下单买了俩 3V 2A 的。没想到又仔细看了一下,发现这个 3V 250ma 居然是 AC 输出。。我还是头一次见到有小家电使用交流电的。这下麻烦了。网上搜索了半天,都没有任何资料。淘宝上自然更不会有。倒是有不少卖 220 -> 110 的变压器的,可是我 110V 的电源已经挂掉了啊。

仔细思考了一下,觉得用电机的小家电没有理由使用交流电,而且里面还有电池,所以里面应该还是把交流整成直流来用的。为了保险起见,把水牙线拆开了看了一眼,照片忘记拍了,不过结果很让人无语,里面电路简单到不行 — 直接串了一个二极管然后接到一个充电电池组的两端,再接到电机。于是一切都很明白了,为什么变压器的输出电流如此之低,就是为了给电池充电的时候电流不要过大。

在这样简陋的电路面前,新买的 3V 2A 的直流电源也不敢拿出来用了。3V 交流经过半波整流出来以后的直流电压大概在 2.1V 左右,3V 还是有点太高。于是变换思路。既然里面实际是给镍氢充电电池充电,那么不如直接用电池充电器了。

但是市面上常见的电池充电器通常是 1 节起充的,也就是输出电压其实是 1.2V. 而这个冲牙器里面的电池组是 2.4V 的,好在记得家里有个废了的充电器是要求两节一起充的。翻出来一看果然输出 2.4V 。于是把引线焊出来接上试了一下。果然好用,而且还有指示灯指示什么时候充好,比原厂的还要好用:)

最近评论

时光机

其他