编译 Android 7.1 (tvbox版本)固件
准备工作
编译 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 8:
sudo apt-get install openjdk-8-jdk
提示:安装 openjdk-8-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-8-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
下载 Android SDK
下载 tvbox 版本的SDK
Android SDK 源码包比较大,可以通过如下方式获取Android7.1源码包:[下载链接]
下载完成后先验证一下 MD5 码:
$ md5sum /path/to/Firefly-RK3399_Android7.1.2_git_20180126.7z 699cff05bfa39a341e7aae3857cea4a7 Firefly-RK3399_Android7.1.2_git_20180126.7z
确认无误后,就可以解压:
mkdir -p ~/proj/firefly-rk3399 cd ~/proj/firefly-rk3399 7z x /path/to/Firefly-RK3399_Android7.1.2_git_20180126.7z -r -o./ git reset --hard
注意:解压后务必要先更新下远程仓库,以下为从 gitlab 处更新的方法:
1. 进入SDK根目录 cd ~/proj/firefly-rk3399 2. 下载远程bundle仓库 git clone https://gitlab.com/TeeFirefly/rk3399-nougat-bundle.git .bundle 3. 若下载仓库失败,目前bundle仓库大约1.4G左右,所以同步的时候可能会出现卡住或失败的问题, 可以从下方的百度云链接下载并解压到SDK根目录,解压指令如下: 7z x rk3399-nougat-bundle.7z -r -o. && mv rk3399-nougat-bundle/ .bundle/ 4. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可 .bundle/update 5. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支 git rebase FETCH_HEAD
[bundle压缩包]https://pan.baidu.com/s/1ZS130eZcNDmKvBN55oZ5Bg#list/path=%2Fsharelink1414141670-712292296135918%2FAndroid7.1%2FFirefly-RK3399_Android7.1.2_git_20180126%2Fbundle&parentPath=%2Fsharelink1414141670-712292296135918
tvbox版本SDK的整体编译
HDMI显示编译
./FFTools/make.sh -d rk3399-roc-pc -j8 -l ROC_RK3399_PC-userdebug ./FFTools/mkupdate/mkupdate.sh -l ROC_RK3399_PC-userdebug
手动编译ROC-RK3399-PC
编译前执行如下命令配置环境变量:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
编译kernel:
cd ~/proj/firefly-rk3399/kernel/ make ARCH=arm64 firefly_defconfig make -j8 ARCH=arm64 rk3399-roc-pc.img
编译uboot:
cd ~/proj/firefly-rk3399/u-boot/ make rk3399_box_defconfig make ARCHV=aarch64 -j8
编译android:
cd ~/proj/firefly-rk3399/ source build/envsetup.sh lunch ROC_RK3399_PC-userdebug make -j8 ./mkimage.sh
打包成统一固件 update.img
编译完可以用Firefly官方的脚本打包成统一固件,执行如下命令:
./FFTools/mkupdate/mkupdate.sh -l ROC_RK3399_PC-userdebug
打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img
在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。
生成tf卡启动的固件
编译完之后,先执行以下命令,然后用Firefly官方的脚本打包成统一的SD卡固件,执行如下命令:
./mkimage sdboot ./FFTools/mkupdate/mkupdate.sh -l ROC_RK3399_PC-userdebug
打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img
(注意:SD卡固件以及EMMC固件在生成的时候名字并无不同,在官网资源上面的带SD字样的固件是在打包生成之后,手动修改的名字,用以用户做区分)
用瑞芯微 SD_Firmware_Tool 工具创建sd卡启动,首先选择设备,在功能模式选择sd启动,然后选择上传生成的固件,最后点击创建,界面如下图:

烧写分区映像
编译的时候执行 ./mkimage.sh 会重新打包 boot.img 和 system.img, 并将其它相关的映像文件拷贝到目录 rockdev/Image-roc_3399_pc/ 中。以下列出一般固件用到的映像文件:
boot.img :Android 的初始文件映像,负责初始化并加载 system 分区。
kernel.img :内核映像。
misc.img :misc 分区映像,负责启动模式切换和急救模式的参数传递。
parameter.txt :emmc的分区信息
recovery.img :急救模式映像。
resource.img :资源映像,内含开机图片和内核的设备树信息。
system.img :Android 的 system 分区映像,ext4 文件系统格式。
trust.img :休眠唤醒相关的文件
rk3399_loader_v1.08.106.bin :Loader文件
uboot.img :uboot文件
请参照 如何升级固件 一文来烧写分区映像文件。
如果使用的是 Windows 系统,将上述映像文件拷贝到 AndroidTool (Windows 下的固件升级工具)的 rockdev\Image 目录中,之后参照升级文档烧写分区映像即可,这样的好处是使用默认配置即可,不用修改文件的路径。
update.img 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。
-
嵌入式主板
+关注
关注
7文章
6107浏览量
36933 -
安卓
+关注
关注
5文章
2178浏览量
59848 -
Firefly
+关注
关注
2文章
546浏览量
9001
发布评论请先 登录
RK3399 Android7.1 DTS介绍
RK3399 Android7.1 SDK软件介绍
介绍瑞芯微RK3399固件在windows系统下烧写的步骤
分享一种Face-RK3399 Android固件产品的编译方法
RK3399编译Android7.1 Industry固件步骤分析
RK3399 Android7.1 WiFI关闭屏幕后DLNA无法发现设备
RK3399 Android7.1 Audio中的MCLK时钟相关资料分享
RK3399 Android7.1系统重启调用过程相关资料介绍
RK3399 Android 7.1系统TSADC驱动流程小结
ROC RK3399 PC Pro源代码Android 7.1 industry SDK
ROC RK3399 PC Pro固件Android 7.1(industry)固件
ROC RK3399 PC Pro固件Android10.0

fireflyROC-RK3399-PCAndroid 7.1固件介绍
评论