Roc-rk3399-pc build Android-8.1

来自百问网嵌入式Linux wiki

编译android 8.1固件

  • 下载Android-8.1 SDK

使用浏览器打开 h https://pan.baidu.com/s/1yjc9aMB-ds7Xixifgov0Gg 保存资料光盘中的 Firefly-sdk_v1 到自己的网盘中,让后进行下载。

  • 安装openjdk-8
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo java -version
  • 安装基本依赖包
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \
 git flex bison gperf build-essential libncurses5-dev:i386 \
 dpkg-dev libsdl1.2-dev libesd0-dev \
 git-core gnupg flex bison gperf build-essential \
 zip curl zlib1g-dev gcc-multilib g++-multilib \
 libc6-dev-i386  lib32ncurses5-dev x11proto-core-dev libx11-dev \
 libgl1-mesa-dev libxml2-utils xsltproc unzip m4 \
 lib32z1-dev ccache make  tofrodos \
 python-markdown libxml2-utils xsltproc zlib1g-dev:i386 -y
  • 使用FileZilla或其它软件上传下载后的Android-8.1_sdk 源码包,让后通过7z工具进行解压
7z x Roc-rk3399-pc_Android8.1_git_SDK_20190801.7z.001

编译安卓命令

  • 编译之前请先执行如下命令配置好环境变量:
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目录下执行命令)
make ARCH=arm64 firefly_defconfig
make -j8 ARCH=arm64 rk3399-roc-pc.img
  • 编译 U-Boot
make rk3399_defconfig
make ARCHV=aarch64 -j8
  • 编译 Android(在安卓sdk目录下执行)
source build/envsetup.sh
lunch ROC_RK3399_PC-userdebug
make installclean
make -j8
 ./mkimage.sh

打包 RK 固件

  • 在 Linux 下打包固件

编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成可供SD卡启动的 roc-rk3399-pc固件:

./FFTools/mkupdate/mkupdate.sh -t sd

最终生成的文件是 rockdev/Image-ROC_RK3399_PC/sd_ROC_RK3399_PC_Android8.1.0_DEFAULT_190802.img

  • 在 Windows 下使用wind32diskimg工具烧写镜像

烧写方法请参考 [SD卡启动]

分区映像

sd_ROC_RK3399_PC_Android8.1.0_DEFAULT_190802.img 是发布给最终用户的固件,方便升级开发板。而在实际开发中,更多的时候是修改并烧写单个分区映像文件,这样做大大节省开发时间。

下表总结了在各个编译阶段所生成的分区映像文件:

|------------------|---------------------|-----------|
| Stage            | Product             | Partition |
|------------------|---------------------|-----------|
| Compiling Kernel | kernel/kernel.img   | kernel    |
|                  | kernel/resource.img | resource  |
|------------------|---------------------|-----------|
| Compiling U-Boot | u-boot/uboot.img    | uboot     |
|------------------|---------------------|-----------|
| ./mkimage.sh     | boot.img            | boot      |
|                  | system.img          | system    |
|------------------|---------------------|-----------|

注意,执行 ./mkimage.sh 后, boot.img 和 system.img 将会被重新编译并打包到目录 out/target/product/ROC_RK3399_PC/ 下,所有生成的映像文件将会拷贝到目录 rockdev/Image-ROC_RK3399_PC/` 下。

如下是映像文件列表:

   boot.img: Android 的 initramfs 映像,包含Android根目录的基础文件系统,它负责初始化和加载系统分区。
   system.img: ext4 文件系统格式的 Android 文件系统分区映像。
   kernel.img: 内核映像。
   resource.img: Resource 映像, 包含启动图片和内核设备树。
   misc.img: misc 分区映像, 负责启动模式的切换和急救模式参数的传递。
   recovery.img: Recovery 模式映像。
   rk3399_loader_v1.12.112.bin: Loader 文件。
   uboot.img: U-Boot 映像文件。
   trust.img: Arm trusted file (ATF) 映像文件。
   parameter.txt: 分区布局和内核命令行。
   vendor.img: TODO
   oem.img: TODO
   baseparameter.img: TODO

反馈与建议

<comments />
__NOTITLE__