第十七期 CyanogenMod 编译小米3W《手机就是开发板》

原创 2017年01月04日 00:08:04
上一期我们使用直接下载的第三方固件在手机上刷机通过,相对于源码级别的改装还只是皮毛,这一期我们来实践下载并编译CyanogenMod源码,编译出固件并刷机试验。
这里假设您已经搭建了AOSP的源码编译环境,如果没有请转到第二期。
1.下载和编译前安装下面这些软件:
sudo apt-get install bc bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
如果有安装错误,请执行 sudo apt-get install update 然后执行 sudo apt-get install upgrade
2.下载CM源码的方法和AOSP大体相同,建议一个存放将要下载的源码的目录,然后在目录下执行:
repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0
当repo仓库建立完成后先别急着同步,作为大中华区用户,您还得改点东西,把指向googlesource的下载地址修改成国内的镜像,将 .repo/manifest.xml 把其中的 aosp 这个 remote 的 fetch 从 https://android.googlesource.com 改为https://aosp.tuna.tsinghua.edu.cn/

3.使用 repo sync 命令开始下载源码 一共 528个 projects ,大约有 13GB 大小。
4.下载完成后 执行 source build/envsetup.sh 命令 加载编译所需的环境变量;
5.执行 breakfast cancro ,创建 LocalManifest 配置文件,这一步可能会报错,但只要devices/xiaomi/cancro/目录存在,就可以继续下一步;
6.提取设备专有文件(Extract Propertietary Blobs),这一步是比较关键的,因为版权问题,一些非开源的程序不会出现在CM的源码当中,所以必须从你现有的手机中提取,我们刚才刷好的手机这回必须要用上了。将手机通过USB连接到PC,先执行adb root , 如果成功后,进入到cancro目录:
cd ~/android/system/device/xiaomi/cancro
然后运行提取专有文件的命令 ./extract-files.sh
如果按照下载的原始文件去执行提取命令是100%会出错的,因为有些文件无论是在MIUI还是在CM中都是找不到的,经过我的摸索,去掉了一些文件的提取,修改了proprietary-files.txt文件,下面是这个文件的链接,下载后替换一下再提取文件就不会出错了。
https://github.com/aggresss/PHDemo/blob/master/Tools/cancro/proprietary-files.txt
7. 执行croot 命令, 回到CM源码的根目录,然后执行 brunch cancro 开始编译,编译的过程不会一帆风顺,需要点耐心。

参考文章:
http://blog.csdn.net/shulianghan/article/details/51592930
http://blog.csdn.net/sy373466062/article/details/51554341
http://www.2cto.com/kf/201606/517557.html

CM Mi3 系统源码:https://github.com/cyanogenmod/android_device_xiaomi_cancro
CM Mi3 内核源码:https://github.com/cyanogenmod/android_kernel_xiaomi_cancro


版权声明:本文为aggresss原创文章,未经博主允许不得转载。 作者:aggresss@gmail.com

相关文章推荐

Android日志系统驱动程序Logger源代码分析

我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是An...

Android应用程序启动过程源代码分析

前文简要介绍了Android应用程序的Activity的启动过程。在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过...

自然对数底数的小数部分二千位

自然对数底数e=2.71828 18284 59045 23536 02874 71352 66249 77572 47093 69995 95749 66967 62772 40766 30353 ...
  • i7366
  • i7366
  • 2010-12-21 08:22
  • 587

Android异步消息处理机制完全解析,带你从源码的角度彻底理解

我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Messag...

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大...
  • dc_726
  • dc_726
  • 2017-08-31 04:58
  • 25782

Android应用程序窗口(Activity)实现框架简要介绍和学习计划

前面我们学习了SurfaceFlinger服务的实现原理。有了这个基础之后,从本文开始,我们就可以分析Android系统在Java层的UI实现了。我们知道,在Android应用程序的四大组件中,只有A...

如何单独编译Android源代码中的模块

第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了。以后如果我们修改了And...

在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务

我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务...

如何学习Android系统源码

参考资料 Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)