ROC-RK3328-CC

Firefly首个超小型开源主板,特有的USB3.0与DDR4让其性能更快更稳定,超高性价比的ROC-RK3328-CC是你探索程序世界的首选主板。

Android 固件升级(eMMC)

更新时间:2018-04-04 阅读:6161

前言

本文会介绍如何将主机上的固件文件,通过USB双公头数据线(下文统称USB数据线),烧录到开发板的闪存中。

升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。

准备工作

  • ROC-RK3328-CC开发板

  • USB双公头数据线

固件文件一般有两种:

  • 单个统一固件 update.img, 将启动加载器、参数和所有分区镜像都打包到一起,用于固件发布。

  • 多个分区镜像,如 kernel.img, boot.img, recovery.img 等,在开发阶段生成。

这里可以找到已编译好的统一固件,下载后解压。也可以参考编译固件的说明自行编译。


Windows

安装 RK USB 驱动

    操作方法见:《升级固件》RK USB操作

连接设备

    设备进入升级模式:操作方法见:《启动模式》Loader模式

    设备进入MaskRom模式:操作方法见:《MaskRom模式》

编译固件

    1、参考《编译android7.1固件》,完成对代码的编译,会在rockdev/Image-roc_rk3328_cc_box/下生成镜像。

    2、点击这里 获取官方脚本压缩包,在rockdev/Image-roc_rk3328_cc_box/下解压完成后,运行以下命令,把目录下的镜像打包为统一固件SD.img

  ./sd_rk3328.sh

烧写固件

使用工具:AndroidTool      下载链接:AndroidTool链接

烧写统一固件 SD.img

    前提:设备处于MaskRom模式

    步骤如下:

        1、切换至"下载镜像"页。

        2、将 MiniLoaderAll.bin 放在第一位升级,地址 0xCCCCCCCC (或者使用AndroidTool默认的bin文件)

        3、再将 SD.img 放在第二位升级,地址为 0x00

        4、点击执行即可

        5、升级完成后,会自动重启设备。


烧写成功,如下图:

finsh.png


烧写分区映像

烧写分区镜像:

    前提:设备处于Loader模式

    参照以下方法:用 upgrade_tool 工具进行分区烧写

Linux

RK 提供了一个 Linux 下的命令行工具 upgrade_tool,支持统一固件 update.img 和分区镜像的烧写。

开源工具则有两个选择:

它们都仅支持分区映像烧写,不支持统一固件。rkflashtool 是命令行工具,rkflashkit 有图形界面,后加了命令行支持,更是好用。以下仅对 rkflashkit 做介绍。

Linux 下无须安装设备驱动,参照 连接设备 则可。

upgrade_tool

在SDK中的RKTools/linux/Linux_Upgrade_Tool/获取最新版本或者下载 Linux_Upgrade_Tool, 并按以下方法安装到系统中,方便调用:

   tar -xzvf upgrade_tool_v1_26.tar.gz
   sudo mv upgrade_tool /usr/local/bin
   sudo chown root:root /usr/local/bin/upgrade_tool

注意:如果提示以下错误:

   upgrade_tool: error while loading shared libraries: libudev.so.1: cannot open shared object file: No such file or directory

ubuntu 下可使用下面命令解决:

   sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0

或者直接使用链接 Linux_Upgrade_Tool 中的 lib 库,将其拷贝到 /lib/i386-linux-gnu/ 目录下

   sudo cp lib/i386-linux-gnu/* /lib/i386-linux-gnu/

烧写统一固件 update.img:

   sudo upgrade_tool uf update.img

烧写分区镜像:

   sudo upgrade_tool di -b /path/to/boot.img
   sudo upgrade_tool di -k /path/to/kernel.img
   sudo upgrade_tool di -s /path/to/system.img
   sudo upgrade_tool di -r /path/to/recovery.img
   sudo upgrade_tool di -m /path/to/misc.img
   sudo upgrade_tool di resource /path/to/resource.img
   sudo upgrade_tool di -p paramater   #烧写 parameter
   sudo upgrade_tool ul bootloader.bin # 烧写 bootloader
   sudo upgrade_tool di trust /path/to/trust.img #烧写 trust

如果因 flash 问题导致升级时出错,可以尝试低级格式化、擦除 flash:

   sudo upgrade_tool lf   # 低级格式化
   sudo upgrade_tool ef   # 擦除

rkflashkit

安装:

   sudo apt-get install build-essential fakeroot 
   git clone https://github.com/linuxerwang/rkflashkit
   cd rkflashkit
   ./waf debian
   sudo apt-get install python-gtk2
   sudo dpkg -i rkflashkit_0.1.4_all.deb
  • 图形界面:

   sudo rkflashkit

rkflashkit

  • 命令行:

$ rkflashkit --help
Usage: <cmd> [args] [<cmd> [args]...]

part                              List partition
flash @<PARTITION> <IMAGE FILE>   Flash partition with image file
cmp @<PARTITION> <IMAGE FILE>     Compare partition with image file
backup @<PARTITION> <IMAGE FILE>  Backup partition to image file
erase  @<PARTITION>               Erase partition
reboot                            Reboot device

For example, flash device with boot.img and kernel.img, then reboot:

sudo rkflashkit flash @boot boot.img @kernel.img kernel.img reboot

帮助信息里有使用示例,可以看出,一条命令就可以烧写多个映像文件并重启设备,对需要经常编译和烧写内核的开发者来说,是一大福音。

FAQs

Q1: 如何强行进入 MaskRom 模式?

A1: 如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《如何进入 MaskRom 模式》