解开蓝魔Amlogic方案JellyBean 4.1中的boot.img文件

是否很多筒子发现在4.0时代一直用的uImage解包打包脚本突然就不能用了,提示找不到uImage file?我开始也很纳闷,突然闲来想到是不是Amlogic又改回按标准的bootimg.h里面描述的格式来处理这个文件了?

刚刚一试验,果不其然!多年前做Motorola MB200的ROM时,曾去解包boot.img来改开机静态图片(我当时真是够无聊的),当时用的就是这个Perl脚本,实验证明现在还能用!(标准就是标准啊!)Google一圈还找到一个配合使用的shell脚本方便地将boot.img完全解开~

于是,HatMod项目今天华丽丽地加了commits了,各位可以去我的GitHub项目上抓取解包和打包脚本 (legacy目录下是解包和打包4.0时代的boot.img的!)。

由于W22PRO还没有官方4.1固件,因此我无法尝试是否打包后刷入能用,只是下载了W28的固件,去解包和打包了boot.img都是可以的,不过没有用真机测试。

把CWM Recovery刷入W22PRO的内置存储器中

之前TWRP的Recovery触摸操作看起来很是过瘾,但是鄙人表示一直用CWM用惯了啊有木有!所以自己fork了CT的代码然后merge了CyanogenMod的jellybean分支,自己创了一个jellybean-aml分支出来(在github我的项目上有,需要的自己去checkout)。

做uImage_recovery这个文件不难,我的HatMod项目里面有解包和打包脚本,先把官方固件的uImage文件解包出来,然后用自己编译得到的CWM recovery的root里面的内容替换(boot下面的两个ko模块可以删掉),init文件我还是用的官方的init,然后repack脚本用我后来上传的那个gzip开头的脚本,这样可以在生成镜像之前先做一次gzip压缩,不压缩的话是会提示体积过大而打包失败的。

上面讲了一堆略有点技术流的东西,下面说说怎么把这个uImage_recovery刷到我们的W22PRO机器内置存储器中!这样就不需要外置的microSD卡也能进入CWM Recovery了,可喜的地方还在于CWM Recovery支持从机器内置存储器(就是大小13GB的那个)读取zip刷机包来刷机,还支持adb sideload功能,总而言之就是把CWM Recovery刷到机器NAND后——腰不酸腿不疼了!

技术达人们自己写刷机脚本打包刷进去就好了。我也特意制作了一个直刷到NAND的zip包,所以下面讲最简单的办法:

  1. 下载zip包(我放在SourceForge上了,文件名为cwm-based-6.0.2.3-flashable.zip)
  2. 将zip包放在外置SD卡上,进入CWM Recovery或者TWRP Recovery(或者官方Recovery都可以!)
  3. 选择Install zip from SDcard,然后找到cwm-based-6.0.2.3-flashable.zip确定刷进去
  4. 看到屏幕显示“Complete”就表示完成了!(如果有任何Error字样出现表示失败了。。。)

怎样确认成功刷进去了呢?重启进入CM10,长按电源键弹出关机菜单,选择重启,然后选择Recovery(可能被翻译成“恢复模式”了),确认后等待机器重启。如果没有刷进去就会重启进入官方原生的Recovery,而如果成功刷入的话就会进入CWM Recovery了!当然还有很多验证办法我就不一一列举了。

对了,我的GitHub项目页面(都是源代码或者脚本):

小白们可能喜欢的是SourceForge的RamosROMs项目(都是刷机包、Recovery之类的成品)

编译CM10 for W22PRO的相关过程记录

先说一下git的操作好了,这个git其实我也是今年刚开始用,之前都是用svn的(subversion其实也不太会……说来这些版本控制工具我都记不住指令啊……)。

因为蓝魔W22PRO用的是Amlogic MX(meson6)方案,而Christiantroy已经专心耕耘艾诺精灵2很久了,他在github上的很多项目,只要有jellybean-aml分支的基本就是需要fetch拿来用的。不过有一点问题的就是,最近这位大哥在搞CM10.1去了,repo都没有更新上游(CyanogenMod)的改动,所以其它的部分如果用CyanogenMod的上游代码就会造成一些问题。还好有强大的git帮我们合并这些更改。

首先进入一些需要为Amlogic修改的目录(因为我已经做了这项工作了,减轻了各位的压力,大家直接fetch我的那些github项目就好了),git checkout jellybean-aml 确保在jellybean-aml这个分支里面,然后git remote -v看一下有没有上游CyanogenMod的repo,没有的话得先git remote add NAME git://XXXXXX 添加一个NAME远程仓库(这些全部大写的字母都是可以自行变动的),然后git fetch NAME把源码下载到本地,只需简单的一个git pull NAME jellybean就能把NAME仓库的jellybean分支合并到当前分支(jellybean-aml)了!如果有冲突的话会提示的,一般不会有冲突会自动merge并做一个ref节点,如果你没有自己开项目就这样好了。如果有的话(比如我),就需要git push MINE提交这次变动到自己的远程仓库(MINE)。再说一下啦,我已经做过这项工作了,短期内大家直接取我的项目源码就可以了。

上面讲了那么多git的废话……下面讲一下编译。

如果你还没有W22PRO的源码,请上我的非官方项目clone下来到合适的位置(如果你这不知道就不要看这篇文章了,谢谢……)

cd /PATH_TO_CM/
 . build/envsetup.sh
 lunch
 make -j4

老掉牙的几个步骤……lunch菜单选择cm_w22pro-userdebug那个就好了(输入数字回车),make -j4表示用四个线程并行编译。

在我的笔电上每次从头完整的编译要2~3个小时。我的硬件配置?AMD 四核 2.0GHz,4G RAM(显然有点小,为了避免内存消耗完毕而出错终止,强烈建议创建一个swap分区或者swap文件,大小至少1G,建议4G以上)。

还没有开始编译的记住了,放CM/Android源代码的那个分区建议40G以上,而且必须是EXT2/3/4或者BtrFS、XFS之类的Linux分区!

编译蓝魔W30的CM10之源码准备

大体参考CM的Wiki: http://wiki.cyanogenmod.org/wiki/Galaxy_Nexus_%28GSM%29:_Compile_CyanogenMod_9_%28Linux%29

提示一下就是repo这个脚本需要翻墙才能下载成功。

下面简单写一下终端操作的笔记:

#获取CM10的代码
repo init -u git://github.com/CyanogenMod/android.git -b jellybean
repo sync
#获取三星Galaxy S III的源码(因为W30的CPU和Galaxy S III是一样的,这里偷懒直接用CM的脚本获得相关源码)
. build/envsetup.sh && breakfast i9300
#获取CM的预编译文件
vendor/cm/get-prebuilts

好了,现在要做的就是这么多了。接下来就是对Galaxy S III的设备源码部分进行修改,使之匹配W30, 当然,要新开一个目录,等我初步完成后会在github上托管的,到时候还会回来更新本篇文章。 W30开源项目 (fork & play!)

还需要获取三星的部分专利源码,找了半天,终于在GitHub找到了一个项目有的,

git clone git://github.com/TheMuppets/proprietary_vendor_samsung.git -b jellybean

同步这个项目后,把里面的文件夹都放在vendor/samsung/下面,然后修改vendor/samsung/smdk4412-common/proprietary/Android.mk这个文件,把ifneq ($(filter i9300 n7100 n8000 n8013,$(TARGET_DEVICE)),)改成ifneq ($(filter i9300 n7100 n8000 n8013 w30,$(TARGET_DEVICE)),) ,也就是在filter后面加上w30,不然的话不能正确调用一些共享依赖库会编译出错。