Android 固件升级(eMMC)
更新时间:2018-04-04 阅读:6756
前言
本文会介绍如何将主机上的固件文件,通过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、升级完成后,会自动重启设备。
烧写成功,如下图:
烧写分区映像
烧写分区镜像:
前提:设备处于Loader模式
参照以下方法:用 upgrade_tool 工具进行分区烧写
Linux
RK 提供了一个 Linux 下的命令行工具 upgrade_tool,支持统一固件 update.img 和分区镜像的烧写。
开源工具则有两个选择:
rkflashtool https://github.com/Galland/rkflashtool_rk3066
rkflashkit https://github.com/linuxerwang/rkflashkit
它们都仅支持分区映像烧写,不支持统一固件。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 --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 模式》。