首先说,我做这件事情绕了太多太多的弯路,浪费了太多太多的时间……
其次说,做任何事情,照猫画虎是需要首先尝试的方法。
我希望以后我探索任何我一知半解的事物,都忘掉自己的思维定式,不要自以为是,首先要做的是把前辈的方法实践一遍。
这是一个多么普通的常识啊。
但是,对我来说为什么这么的难以想到……
一直都是以Android-2.3.4和Android-2.3.5为蓝本做实验。所以长期以来就形成了思维定式,认为烧rom用fastboot flash这个命令就可以搞定一切。
但是,在Galaxy Nexus上,不管编译的镜像文件多么的硬件,软件相匹配,用fastboot flash是永远也烧写不上去的。永远得到的只有
Device product is “tuna”
Update requires “herring”
想烧上去的方法只有一个:fastboot -w update ****.zip
把编译得到的android-info.txt,boot.img,recovery.img,system.img,userdata.img五个文件打包成zip压缩包。
这个方法在官方镜像里已经给出了。下载到官方镜像之后,里面有烧写镜像的脚本,打开一看一目了然。
好吧,反省的话到此为止。说说过程。
编译Galaxy Nexus的原生镜像,首先要去http://source.android.com/source/build-numbers.html查看需要的源码版本。有多个适合的版本。
我这里下载了Android-4.0.4_r2.1和Android-4.1.2_r1两个版本。
在编译之前,还要去https://developers.google.com/android/nexus/drivers下载和Galaxy Nexus对应的驱动。注意选择驱动版本,不同的源码版本对应不同的驱动版本。
解压缩下载下来的驱动文件后,得到extrat开头的sh脚本。
chmod a+x ***.sh 使之有可执行的权限。
执行完毕后,得到vendor目录。把整个vendor目录拷贝到源码根目录下。也要注意版本问题,不要粗心大意。
lunch的时候需要选择编译的目标product。
Android-4.0.4选择tuna或者maguro(根据Galaxy Nexus机器的具体型号确定,GSM的选maguro,CDMA的选tuna)。
Android-4.1.2选择maguro。(这里插一句,如果编译Nexus 7的原生镜像,需要选择grouper)
之后,常规编译。(建议选择高配的服务器编译)
两个版本编译的时候都有bug,具体解决方法见前两篇文章。
编译成功之后去out/target/product/maguro(选择的目标product的名字)/目录,这个目录下有前文提到的5个img文件。
把5个文件打包成maguro.zip 。
执行adb reboot bootloader 把Galaxy Nexus启动到fastboot模式。
如果bootloader版本不匹配,去https://developers.google.com/android/nexus/images下载对应版本的官方镜像包。
解压镜像包找到需要的bootloader 的img版本。按照官方镜像包里提供的烧写脚本,烧写需要的bootloader到机器。
其他底层镜像版本问题,都去从官方下载的镜像包里找。即可解决。
我这里只关心上层的镜像的烧写。
烧写时需要用到fastboot工具。fastboot在编译出的out/host/linux-x86/bin目录下。
执行fastboot -w update maguro.zip
等待几分钟,烧写完毕后,机器自动重启。
-w参数是擦除原来的分区的内容,建议每次都加上,不然后续的运行中会遇到机器启动不了的问题。
烧写原生镜像到Nexus 7的步骤同上。Android-4.0.4不支持Nexus 7。
本人亲测Android-4.1.2 maguro--Galaxy Nexus grouper--Nexus 7成功。