RK3288编译 Android 5.1 固件_飞向蓝天2的博客-程序员秘密

技术标签: RK3288学习与研究  

编译 Android 5.1 固件

更新时间:2018-03-12 阅读:15326

1 准备工作

编译 Android 对机器的配置要求较高:

  • 64 位 CPU

  • 16GB 物理内存+交换内存

  • 30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB

官方推荐 Ubuntu 14.04 操作系统,经测试,Ubuntu 12.04 也可以编译运行成功,只需要满足 http://source.android.com/source/building.html 里的软硬件配置即可。

编译环境的初始化可参考 http://source.android.com/source/initializing.html 。

  • 安装 OpenJDK 7:

   sudo apt-get install openjdk-7-jdk

提示:安装 openjdk-7-jdk,会更改 JDK 的默认链接,这时可用:

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

来切换 JDK 版本。SDK 在找不到操作系统默认 JDK 的时候会使用内部设定的 JDK 路径,因此,为了让同一台机器可以编译 Android 5.1 及之前的版本,去掉链接更方便:

$ sudo /var/lib/dpkg/info/openjdk-7-jdk:amd64.prerm remove
  • Ubuntu 12.04 软件包安装:

sudo apt-get install git gnupg flex bison gperf build-essential \
 zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
 g++-multilib mingw32 tofrodos gcc-multilib ia32-libs \
 python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
 lzop libssl1.0.0 libssl-dev
  • Ubuntu 14.04 软件包安装:

sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev \
 libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl \
 libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
 xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
 lib32readline-gplv2-dev gcc-multilib libswitch-perl \
 libssl1.0.0 libssl-dev

2 下载 Android SDK

由于 SDK 比较大,请先下载 firefly-rk3288_android5.1_git_20180126.tar.gz


下载完成后先验证一下 MD5 码:

$ md5sum /path/to/firefly-rk3288_android5.1_git_20180126.tar.gz
dad080373115053de3367c21289562d2  firefly-rk3288_android5.1_git_20180126.tar.gz

确认无误后,就可以解压:

mkdir -p ~/proj/firefly-rk3288-lollipop
cd ~/proj/firefly-rk3288-lollipop
tar xzf /path/to/firefly-rk3288_android5.1_git_20180126.tar.gz
git reset --hard
# git remote add bitbucket https://bitbucket.org/T-Firefly/firenow-lollipop.git

以后就可以直接从 bitbucket 处更新:

git pull bitbucket Firefly-RK3288:Firefly-RK3288

也可以到 https://bitbucket.org/T-Firefly/firenow-lollipop/commits/branch/Firefly-RK3288 在线浏览源码。

3 编译方法

官方脚本编译

  • firefly-rk3288 编译

 ./FFTools/make.sh -d firefly-rk3288 -j8 -l rk3288_box-userdebug
 ./FFTools/mkupdate/mkupdate.sh -l rk3288_box-userdebug
  • firefly-rk3288-reload 编译


 ./FFTools/make.sh -d firefly-rk3288-reload -j8 -l rk3288_box-userdebug  ./FFTools/mkupdate/mkupdate.sh -l rk3288_box-userdebug

手动编译

手动编译firefly-rk3288和firefly-rk3288-reload,编译内核时,所用的配置文件和资源文件不同  

  • 编译uboot

cd ~/proj/firefly-rk3288-lollipop/u-boot
make rk3288_defconfig
make -j8
  • 内核编译

  • 使用Firefly-RK3288 编译内核:

cd ~/proj/firefly-rk3288-lollipop/kernel
make firefly-rk3288_defconfig
make -j8 firefly-rk3288.img
  • 使用Firefly-RK3288-reload 编译内核:

cd ~/proj/firefly-rk3288-reload-lollipop/kernel
make firefly-rk3288-reload_defconfig
make -j8 firefly-rk3288-reload.img
  • 编译Android

Firefly-RK3288/Firefly-RK3288-Reload编译 Android:
cd ~/proj/firefly-rk3288-lollipop
source build.sh
lunch rk3288_box-userdebug
make -j8
./mkimage.sh

默认的目标构建变体(TARGET_BUILD_VARIANT)为 userdebug。常用变体有三种,分别是用户(user)、用户调试(userdebug)和工程模式(eng),其区别如下:

  • user

    • 仅安装标签为 user 的模块

    • 设定属性 ro.secure=1,打开安全检查功能

    • 设定属性 ro.debuggable=0,关闭应用调试功能

    • 默认关闭 adb 功能

    • 打开 Proguard 混淆器

    • 打开 DEXPREOPT 预先编译优化

  • userdebug

    • 安装标签为 user、debug 的模块

    • 设定属性 ro.secure=1,打开安全检查功能

    • 设定属性 ro.debuggable=1,启用应用调试功能

    • 默认打开 adb 功能

    • 打开 Proguard 混淆器

    • 打开 DEXPREOPT 预先编译优化

  • eng

    • 安装标签为 user、debug、eng 的模块

    • 设定属性 ro.secure=0,关闭安全检查功能

    • 设定属性 ro.debuggable=1,启用应用调试功能

    • 设定属性 ro.kernel.android.checkjni=1,启用 JNI 调用检查

    • 默认打开 adb 功能

    • 关闭 Proguard 混淆器

    • 关闭 DEXPREOPT 预先编译优化

如果目标构建变体为 user,则 adb 无法获取 root 权限。

要选择目标构建变体,可以在 make 命令行加入参数,例如:

make -j8 PRODUCT-rk3288_box-user
make -j8 PRODUCT-rk3288_box-userdebug
make -j8 PRODUCT-rk3288_box-eng

4 烧写分区映像

上一步骤的 ./mkimage.sh 会重新打包 boot.img 和 system.img, 并将其它相关的映像文件拷贝到目录 rockdev/Image-rk3288_box/ 中。以下列出一般固件用到的映像文件:

  • boot.img :Android 的初始文件映像,负责初始化并加载 system 分区。

  • kernel.img :内核映像。

  • misc.img :misc 分区映像,负责启动模式切换和急救模式的参数传递。

  • recovery.img :急救模式映像。

  • resource.img :资源映像,内含开机图片和内核的设备树信息。

  • system.img :Android 的 system 分区映像,ext4 文件系统格式。

请参照 如何升级固件 一文来烧写分区映像文件。

如果使用的是 Windows 系统,将上述映像文件拷贝到 AndroidTool (Windows 下的固件升级工具)的 rockdev\Image 目录中,之后参照升级文档烧写分区映像即可,这样的好处是使用默认配置即可,不用修改文件的路径。

5 打包成统一固件

编译完可以使用Firefly的脚本打包成统一固件,执行如下命令:

./FFTools/mkupdate/mkupdate.sh -l rk3288_box-userdebug

打包完成后固件会生成在rockdev/Image-rk3288_box/ 目录


在 Windows 下打包统一固件 update.img 很简单,按上一步骤将文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。

update.img 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。


以下为编译打包后的Firefly-RK3288,Firefly-RK3288-Reload固件:

Firefly-RK3288 Android 5.1固件: <下载地址>

Firefly-RK3288-Reload Android 5.1固件:<下载地址>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nie15870449223/article/details/80498599

智能推荐

react 项目中,简单封装axios并给请求头添加token_teriri丶的博客-程序员秘密

在src下创建request用来封装axiosimport axios from "axios";//设置请求得基准地址axios.defaults.baseURL = ''const request = axios.create();//设置请求头request.interceptors.request.use(config =&gt; { // 给请求头加token的字段,值为token config.headers.token = window.sessionStorag.

速盘- “黑科技”不限速的百度网盘下载工具_朴拙教育的博客-程序员秘密

不知不觉间,百度云盘几乎已成为国内最重要的网络资源分享和下载渠道了。平时不可避免地都需要下载百度网盘的文件。然而现在网盘限速真的非常狠,几 KB/s 的速度简直慢到你怀疑人生。当然花钱开通会员是解决限速最简单的办法,但如果只是偶尔才下载一两个文件,充钱似乎又过于浪费。这时,速盘 (SpeedPan) 这款免登录全速下载百度网盘的小工具就可解你燃眉之急了……是一款被称作「度盘神器,使百度网盘保持...

js向页面中动态添加脚本_叶常落的博客-程序员秘密

var head= document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'https://d3js.org/d3.v5.min.js'; head.appen...

出手就是王炸!微软终于忍不住对 JDK 下手了_我有一头小花驴的博客-程序员秘密

前天美国最高法院刚裁定谷歌在Android系统中使用的Java API 代码合理,第二天微软就发布了Microsoft Build of OpenJDK预览版。下载地址:https://www.microsoft.com/openjdk微软在推特也进行了宣传:“向Microsoft Build of OpenJDK问好!”手握 C# 的微软在转型云计算,着重发展云服务 Azure 后,就已经开始拥抱开源,2019 年更是宣布正式加入OpenJDK...

Maven多模块项目编译失败:程序包xxx不存在_多模块程序包不存在_怒放de生命2010的博客-程序员秘密

Maven多模块项目编译失败:程序包xxx不存在项目结构如下:parent(父类工程)| - - - - - common(通用工具类子工程)| - - - - - projectA(springboot子工程,依赖common工程)pom.xml问题描述:通过parent父工程进行Maven install,parent父工程和common子工程打包成功,projectA子工程打包...

随便推点

计算机实时检测系统组成,检测系统_旋风小黄瓜的博客-程序员秘密

在信号传输通道中,检测系统是指连接输入、输出并具有特定功能的部分。在工程测试实践中,大多数检测系统属于线性时不变系统。检测技术的目的是从测量对象中获取反映其变化规律的有用信息,为了实现此目的,一个广义的检测系统一般由激励装置、测试装置、数据处理与记录装置组成。中文名检测系统外文名detecting system领域自动化控制释义连接输入、输出并具有特定功能属于线性时不变系统...

Mybatis 入门学习教程一_mybatis基础学习_shaoduo的博客-程序员秘密

Mybatis 入门学习教程一1.传统jdbc开发问题1.在创建连接时存在硬编码。 2.在执行statement时存在硬编码。 3.频繁开启和关闭数据库连接,会造成数据库性能下降问题。2.初识Mybatis2.1关于mybatis的认识1.mybatis 就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架 ,但是具体说,hibernate 是一个完全的ORM 框架,而my

机器学习(7)BP神经网络_弱音ハク的博客-程序员秘密

BP神经网络概述BP(Back Propagation)神经网络,即反向传播神经网络。它是一种按误差逆向传播算法训练的多层前馈网络,并且层与层之间存储着大量输入-输出映射关系。它的训练规则是通过把误差反向传播,使用梯度下降算法,从而调整网络中的权重,是的最终误差最小。基本思想它有三层组成:输入层、隐含层和输出层。隐含层的权重我们无法得知,但是可以通过输出层结果和预期结果的误差来间接调整隐含层的权重。正向传播:输入样本通过输入层输入,由中间的隐含层进行处理后,由输出层输出。若输出的结果与预期的结果

洛谷 P3376 【模板】网络最大流 (最大流dinic模板)_verdin黄大锤的博客-程序员秘密

题目:网络最大流思路:模板题。注意存边的数组要开两倍。代码:#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;#define maxn 10000#define maxm 200000#define inf (1&amp;lt;&amp;lt;30)#define read(x) scanf(&quot;%d&quot;,&amp;amp;x);struct Edg...

Java最新面试题汇总(附答案)_java基础面试题_Java程序员-张凯的博客-程序员秘密

以下面试题为个人在面试过程中所遇到的,仅供参考!如有错误,望指出。1、servlet执行流程客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、response对象传递给找到的servlet,servlet根据request就可以知道是谁发出的请求,请求信息及其他信息,当serv...

videojs和Video的属性事件_js video 事件_livein80的博客-程序员秘密

1.引入video.js和video-js.css&lt;link href="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.3.0/video-js.min.css" rel="stylesheet"&gt;&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.3.0/video.min.js"&gt;&lt;/script&gt;1.2 使用video标签添加样式‘

推荐文章

热门文章

相关标签