Firefly-rk3288 build Android-5.1

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2019年8月28日 (三) 15:17的版本 →‎更新/烧写系统

编译firefly android-5.1系统

注意:此章节操作均在我们提供的资料光盘以及vmware ubuntu16.04进行过测试,确保其可用。

配置编译环境

  • 下载Android-5.1 SDK

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

  • 安装jdk7编译环境
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
sudo java -version
  • 安装基本依赖包
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 libc6-dev-i386 \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \
tofrodos python-markdown libxml2-utils xsltproc zlib1g-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 \
lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z-dev ccache  squashfs-tools libncurses5-dev  pngcrush schedtool libxml2 \
libgl1-mesa-dev  unzip m4 lzop libc6-dev  lib32z1-dev \
libswitch-perl libssl1.0.0 libssl-dev p7zip-full
  • 使用FileZilla或其它软件上传下载后的 Android-5.1_sdk 源码包,让后通过7z工具进行解压
7z x firefly-rk3288_android5.1_git_20180126.7z.001

手动编译

手动编译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_defconfig
make -j8 firefly-rk3288.img

编译Android

cd ~/proj/firefly-rk3288-lollipop
source build.sh
lunch rk3288_box-userdebug
make -j8
./mkimage.sh

打包成统一固件

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

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

打包完成后固件所在目录及名称rockdev/Image-rk3288_box/Firefly-RK3288_Android5.1.1_Public_190805.img

构建变体说明

  • 默认的目标构建变体(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 混淆器
       关闭 DE

XPREOPT 预先编译优化

如果目标构建变体为 user,则 adb 无法获取 root 权限。 要选择目标构建变体,可以在 make 命令行加入参数,例如:

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

烧写分区映像

上一步骤的 ./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 文件系统格式。

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

在 Windows 下打包统一固件 update.img 很简单,按上一步骤将文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。 update.img 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。 打包成统一固件

更新/烧写系统

启动次序

启动的次序是这样的:

  1. 主控上电初始化
  2. BootRom 代码在 SRAM 上运行,校验存储设备里的 bootloader
  3. 校验通过,加载并运行 bootloader 引导代码
  4. bootloader 引导代码负责初始化 DDR 内存,加载 bootloader 完整代码到 DDR 内存中并运行
  5. bootloader 加载存储设备上的 Linux 内核,并将执行权交给 Linux 内核

启动模式 RK3288 有三种启动模式:

  • Normal 模式
  • Loader 模式
  • MaskRom 模式

Normal 模式

Normal 模式就是正常的启动过程,各个组件依次加载,正常进入系统。

Loader 模式

在 Loader 模式下,bootloader 会进入升级状态,等待主机命令,用于固件升级等。要进入 Loader 模式,必须让 bootloader 在启动时检测到 RECOVERY(恢复)键按下,且 USB 处于连接状态:

  1. 确保设备连接好电源适配器并处于通电状态
  2. Micro USB OTG 线连接好设备和主机。
  3. 按住设备上的 RECOVERY (恢复)键并保持
  4. 短按一下 RRESET(复位)键
  5. 松开 RECOVERY 键。

注意:如果发现按了 RESET 键后还是没有发现设备,请在保持 RECOVERY 键按下的同时,长按一下 PWRKEY 键,然后才松开 RECOVERY 键。

MaskRom 模式

MaskRom 模式用于 bootloader 损坏时的系统修复。 一般情况下是不用进入 MaskRom 模式的,只有在 bootloader 校验失败(读取不了 IDR 块,或 bootloader 损坏) 的情况下,BootRom 代码 就会进入 MaskRom 模式。此时 BootRom 代码等待主机通过 USB 接口传送 bootloader 代码,加载并运行之。

操作步骤如下:

  1. 设备断开所有电源。
  2. 拔出 SD 卡。
  3. 用 Micro USB OTG 线连接好设备和主机。
  4. 用金属镊子接通 T13 测试点和电容 C155,并保持。
  5. 设备插入电源。
  6. 稍候片刻,之后松开镊子