Android系统10 RK3399 init进程启动(五) build源码

  配套系列教学视频链接:

      安卓系列教程之ROM系统开发-百问100ask

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

        开发板启动之后, 就需要通过自己编译源码来制作镜像了,如果是在公司里面开发, 也是基于一个BSP包进行开发, 从0开始移植源码的概率还是比较小。通过这个过程, 慢慢建立对瑞星微平台开发知识的积累过程。


一, 环境搭建

本文档基于X86 64位的Ubuntu 16.04 桌面版本。

安装OpenJDK 8:

sudo apt-get update

sudo apt install -y openjdk-8-jdk

安装编译所需依赖(x86)的软件包

sudo apt-get  install -y openjdk-8-jdk

sudo apt-get  install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get  install -y git flex bison gperf build-essential libncurses5-dev:i386

sudo apt-get  install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo apt-get  install -y dpkg-dev libsdl1.2-dev libesd0-dev

sudo apt-get  install -y git-core gnupg flex bison gperf build-essential  

sudo apt-get  install -y zip curl zlib1g-dev gcc-multilib g++-multilib

sudo apt-get  install -y libc6-dev-i386

sudo apt-get  install -y lib32ncurses5-dev x11proto-core-dev libx11-dev

sudo apt-get  install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4

sudo apt-get  install -y lib32z1-dev ccache

sudo apt-get install -y bc python flex bison gperf libsdl-dev libesd0-dev build-essential zip curl

sudo apt-get install -y libssl-dev  liblz4-tool

sudo apt-get install -y libesd-java libwxgtk3.0-dev squashfs-tools   pngcrush schedtool libxml2

sudo apt-get install -y lzop  schedtool   lib32readline-dev  libswitch-perl libssl-dev

 以上部分软件并非必须, 也有部分是重复的, 直接复制粘贴到命令行即可。

二, 下载源码

据Firefly官网下载方法下载源码,得到Firefly-RK3399_Android10.0_git_20210114:

编译 Android10.0 固件 — Firefly Wiki

得到如下:
Android系统10 RK3399 init进程启动(五) build源码_第1张图片

将两个7z文件,以及bundle中7z文件上传到编译机器中, 并解压源码:

#1. 新建YOURDIR目录, 用于存放7z文件, 你自己命名即可

mkdir  ~/YOURDIR     

cd ~/YOURDIR

#2. 将Firefly-RK3399_Android10.0_git_20210114的两个7z文件拷贝到YOURDIR目录.并解压Android10 SDK源码

7z x ./Firefly-RK3399_Android10.0_git_20210114.7z.001 -ork3399_Android10.0   

#注意:根据提示安装7z命令   

#3. 从git仓库拉出源码

cd  ./rk3399_Android10.0

通过git log可以看到相关仓库提交记录

Android系统10 RK3399 init进程启动(五) build源码_第2张图片git reset --hard   

#4.下载远程bundle(推荐,因为官网可能会更新新的东西)

git clone https://gitlab.com/TeeFirefly/rk3399-android10.0-bundle.git .bundle

在百度云盘里面也有独立的bundle包, 也可以直接解压bundle进行更新代码,可以做如下操作((不太推荐, 上面进行了git clone, 以下步骤就不需要执行)

mv  rk3399-android10.0-bundle.7z  ./rk3399_Android10.0

cd ./rk3399_Android10.0

7z x rk3399-android10.0-bundle.7z  -r -o. && mv rk3399-android10.0-bundle/ .bundle/

#5. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可

.bundle/update

#6. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支

git rebase FETCH_HEAD

新的提交就变成如下了:

Android系统10 RK3399 init进程启动(五) build源码_第3张图片

 

三, 编译源码

我们使用的rk3399-roc-pc-plus开发板没有配置EMMC, 触摸屏,以及LCD, 但是该开发板引出HDMI接口,直接通过HDMI线接上PC的显示屏就可以看到界面,你只需要把这个开发板当成一个电脑来看即可,通过USB鼠标和键盘就能实现对Android系统的输入操控, 当然后面我们通过投屏软件来对开发板进行操控。

接下来就针对HDMI+DP 显示版本的源码编译:

cd  ~/YOURDIR /rk3399_Android10.0

# 一次性将uboot, kernel, android源码编译出来

./FFTools/make.sh -d rk3399-roc-pc-plus -j8 -l rk3399_roc_pc_plus-userdebug

解释: 

-u|k|a : 单独编译uboot|boot(kernel)|android源码

-d : 编译内核的dts文件名.

-d后面指定的如果是rk3399开头, 那么uboot的配置为: rk3399, 内核配置为: rk3399.config

-l : 指定编译Android时需要lunch(选择)的产品名

-j : 指定编译线程数量

编译时间取决于每个人的电脑性能, 本文章用的真机,大概2-3个小时就可以编完, 如果是虚拟机的话, 基本需要10几个小时左右, 如果大家编译出现问题, 一般都可能是缺失某些软件包, 通过关键词搜索百度,基本都解决,另外就可能是内存不够, 如:

可以参考以下链接来解决:

编译安卓源码报错:OpenJDK 64-Bit Server VM warning:INFO:os::commit_memory(...)failed; error='...' (errno=12)_夜月枫雪-CSDN博客

注意!! 如果开发板没有EMMC, 只能通过TF卡启动的, 需要对内核做如下改动,以支持SD卡启动:

vim  arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts  +88 打开注释

&sdmmc{

    supports-emmc; //for sd boot

};
vim arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dtsi +266 添加

&vcc_sd{

    regulator-always-on;

    regulator-boot-on;

    regulator-min-microvolt = <3300000>;

    regulator-max-microvolt = <3300000>;

};

 四, 打包统一镜像

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

-l : 编译Android源码时选择的产品名

-n: 指定目标update.img的名字

-t: 指定镜像类型, 有sd, emmc, 默认为emmc

打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img

五, 烧录镜像和系统启动

参考上一篇文章:Android系统10 RK3399 ini进程启动(三) RK3399开发板运行官方镜像_ldswfun的专栏-CSDN博客

总结

作为初学者,或者开始接触新平台, 搭建环境是比较费时间的, 只要把环境搭好, 后面开发就快了。

你可能感兴趣的:(RK339,Android系统开发,Android驱动)