CyanogenMod 编译 Google Galaxy Nexus (GSM) 全过程

一 前提条件:
1 配置好 android的编译环境
 配置方法详见  http://source.android.com/source/initializing.html 网页

2 下载源码

  curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  需要用 CyanogenMod 提供的 repo工具

  repo init -u git://github.com/CyanogenMod/android.git -b cm-10.2
  下载相应的分支

  repo sync
  下载

  下载过程很长,并且还有下载一半中断的情况,多下几次,确保下载完成,硬盘要准备足够大,
  我准备了100G

3 Samsung Google Galaxy Nexus (GSM) ("maguro") 手机一部,
 我的手机中
 关于手机
 型号:Galaxy Nexus
 基带版本: I9250XXLF1
 Android版本:4.1.1



二 重要网页
1 http://wiki.cyanogenmod.org/w/Devices#vendor=;
 这个网页包含了cm 支持的所有机型,以及相应的驱动

2 http://wiki.cyanogenmod.org/w/Maguro_Info
 这个网页包含了 maguro 这个设备的编译前需要的各种信息
 其中 最重要的是
 Device http://www.github.com/cyanogenmod/android_device_samsung_maguro
 Kernel http://www.github.com/cyanogenmod/android_kernel_samsung_tuna
 内核如果不编译不需要下载,但是驱动需要下载,下载后放在相应的路径,后面会提到。


3 http://wiki.cyanogenmod.org/w/Build_for_maguro
 这个网页告诉了如何编译 maguro 这个版本的代码

三 编译源码
1 编译前的准备工作
 cd ~/android/system/vendor/cm
 ./get-prebuilts

 根据文档,需要执行下面的指令
 source build/envsetup.sh
 breakfast maguro
 这个指令的意思是自动下载相应的驱动文件,也就是
 http://wiki.cyanogenmod.org/w/Maguro_Info
 这个网页中包含的两个驱动包,但是不知道是国内被禁止访问该网站还是
 网络的原因,基本上 breakfast maguro 这个指令是执行不下去的,所以
 还需要手动下载 那两个驱动包,然后放在相应的目录下

 具体哪个目录,在maguro 这套代码是在 项目根目录的
 device 下面,要建一个samsung 文件夹 在 samsung 文件夹下要建立
 maguro 和 tuna 这两个文件夹
 然后将下载的包里面的文件 放在里面即可

 maguro驱动是从
 http://www.github.com/cyanogenmod/android_device_samsung_maguro
 这个链接下载的

 其中 tuna驱动是从
 https://github.com/CyanogenMod/android_device_samsung_tuna
 这个链接下载的

 maguro基于tuna内核 所以也要下载tuna的驱动,不然编译的时候会报错

 下载完成以后,就执行下面的命令了

 cd device/samsung/maguro
 ./extract-files.sh

 这个时候需要用usb 链接你的三星 Galaxy Nexus (GSM) 并且保证
 adb pull /system/vendor/xxx  下面的文件能够拉出来
 我的手机当时在拉文件的时候报了两个错误

 remote object '/system/vendor/lib/mediadrm/libwvdrmengine.so' does not exist
 remote object '/system/vendor/lib/libfrsdk.so' does not exist

 我看了一下 我的手机里面 /system/vendor/lib 的确没有这两个库,当时没有理会,但是后来编译的时候就报错了
 make: *** No rule to make target `vendor/samsung/maguro/proprietary/libwvdrmengine.so', needed by `/Disk/CyanogenMod/cm-10/out/target/product/maguro/system/  vendor/lib/mediadrm/libwvdrmengine.so'.  Stop.


 在 https://github.com/SomethingExplosive/proprietary_vendor_samsung
 这个链接里面下载库包,找到缺少的库文件,然后拷贝到相应的手机目录中去,再次运行 ./extract-files.sh 保证所有的so文件都被拷贝出来,没有出现 does not
 exist的错误

 其实这些库文件都是拷贝到 vendor/samsung/maguro/proprietary 下面了 这个文件夹是自动建立的。

  官方提示:
  It’s important that these proprietary files are properly extracted and moved to the vendor directory. Without them, CyanogenMod will build without error, but you’ll be missing important functionality, such as the ability to see anything!

  翻译:需要检查一下这些专用文件是否移动到verdor目录下,这是很重要的。即便没有这些文件,CyanogenMod 也可能编译通过,但是你将失去很重要的功能,
比如看不到任何功能。

  当然我编译的时候由于缺少两个so,编译都没有办法通过。

  关于库文件so,一定要多说两句,虽然CM已经做的很好,但是笔者出现上面的问题的时候,想当然的百度了两个这样的so放了进去,欺骗了当时的编译环境,编译通过,生成了zip包,但是后来发现刷入rom包的时候,无法开机。一度怀疑内核,怀疑编译选项不正确,最后折腾了一天,才想到了有可能是驱动so不匹配的问题导致。


   如果只是为了学习android源码,一个比较简单的方法是到

http://download.cyanogenmod.org/

这个地址下面找到你要编译手机,要编译版本的cm源码,将里面得驱动提出,如果还是搞不清楚里面有多少驱动或者怕错,大不了将那个rom刷一下,然后再使用./extract-files.sh

将驱动给拉出来,这样总不会错,经验教训,就此总结!


2 真正开始编译
 以前lunch 命令再选择编译哪个版本都不需要了,CyanogenMod 已经把这些封装成更简单的命令了

 回根目录后
 export USE_CCACHE=1
 据说这样会加快编译速度

 . build/envsetup.sh
 这个重要 执行成功后,后面的命令才能继续执行
 croot
 brunch maguro
 ok  开始编译了。



四 刷rom包

cm-10/out/target/product/maguro/cm_maguro-ota-17d7e8b81e.zip
这个包,大概有188M吧,将这个rom包刷到自己的 Google Galaxy Nexus (GSM) 手机中试试
看能不能用

你可能感兴趣的:(android)