Linux 固件升级 (eMMC)
更新时间:2018-03-30 阅读:16005
前言
本文介绍了如何将主机上的固件文件,通过 USB 双头公对公数据线(下文统称 USB 数据线),烧录到开发板的 eMMC 闪存中。 升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
注意:
Linux 固件每次升级都需要进入 《MaskRom 模式》,
再则,如果 eMMC 为 Linux 系统后,需要更换 Android系统,也需进入 MaskRom模式后升级。
在只有 SD卡的情况下,
可参照 《制作 Android SD 启动卡》、《制作 Linux SD 启动卡》 文章制作系统启动卡。
准备工作
ROC-RK3328-CC 开发板
良好的 USB 双头公对公数据线
Windows
安装 RK USB 驱动
操作方法见:《升级固件》RK USB操作
连接设备
设备升级,需要进入 MaskRom 烧写模式。
先使设备断开所有电源,又因 USB数据线也能为开发板提供系统启动电源,所以也需断开 USB 数据线的连接:
数据线一端连接开发板。
短接 Flash 的数据脚与地线脚,即板子上预留出来的 CLK 焊盘和 GND 焊盘。
数据线另一端连接主机。
板子上电。
稍候片刻,断开短接,设备应该就会进入 MaskRom 模式。
烧写固件
使用工具:AndroidTool 下载链接:AndroidTool链接
打开AndroidTool后,如下图:
烧写统一固件 system.img
1、升级Loader文件:rk3328_loader_ddr786_v1.06.243.bin
2、选择需要烧写的统一固件 (点击在该行末尾的空白格处,可在本地选择)
提示:在烧写时,一定要先升级Loader文件!
固件需要本地存在。(编译生成统一固件操作可参考《制作LinuxSD卡》,或 点击这里 可获取统一固件)
烧写完成后,如下图:
3、将USB双公头数据线拔出后,重启板子即可。
烧写分区镜像
烧写镜像的步骤如下:
切换至"下载镜像"页。
添加要烧写的分区镜像:地址须按照下图烧写(每个镜像有唯一对应的地址)
确保镜像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
点击"执行"按钮开始升级,升级结束后设备会自动重启。
注意:升级分区前,需查看 parameter.txt 分区地址,确保分区偏移及烧写文件是否正确,
Android 分区地址自行查看 SDK下 device/rockchip/rk3328/parameter.txt 文件,
Linux 分区偏移地址如下:
偏移地址如下图所示
烧写分区镜像完成,如下图:
提示:烧写分区完成后,会自动重启板子,等待完成即可。
Linux
RK 提供了一个 Linux 下的命令行工具 rkdeveloptool ,支持统一固件和分区镜像的烧写。
Linux 下无须安装设备驱动,参照上面的连接设备则可。
安装 rkdeveloptool 工具
首先需要安装 rkdeveloptool 的依赖库
sudo apt-get install libudev-dev libusb-1.0-0-dev dh-autoreconf -y
然后下载 rkdeveloptool
git clone https://github.com/FireflyTeam/rkbin.git
由于已经编译好了 rkdeveloptool 可执行文件,将其拷贝到 PC 上的 /usr/local/bin 目录下即可使用
sudo cp rkbin/tools/rkdeveloptool /usr/local/bin
连接设备
请参照上面的连接设备,进入 MaskRom模式
烧写固件到 eMMC 闪存
首先确认经过了 《编译内核》 以及 《创建 Linux 根文件系统》 这两个步骤,
烧写固件有两种方式,一种是使用 rkdeveloptool 工具烧写,另一种是使用脚本烧写。
rkdeveloptool 工具烧写分区固件
使用 rkdeveloptool 烧写分区镜像到板子上的 EMMC 闪存中
sudo rkdeveloptool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin sudo rkdeveloptool wl 0x40 out/u-boot/idbloader.img sudo rkdeveloptool wl 0x4000 out/u-boot/uboot.img sudo rkdeveloptool wl 0x6000 out/u-boot/trust.img sudo rkdeveloptool wl 0x8000 out/boot.img sudo rkdeveloptool wl 0x40000 out/linaro-rootfs.img
再执行以下命令使板子重启
sudo rkdeveloptool rd
注意:每次升级固件,都需要先升级 Loader 文件
rkdeveloptool 工具烧写统一固件
首先,使用 SDK中脚本打包生成统一固件system.img
build/mk-image.sh -c rk3328 -t system -r rk-rootfs-build/linaro-rootfs.img
升级统一固件
sudo rkdeveloptool db out/u-boot/rk3328_loader_ddr786_v1.06.243.bin sudo rkdeveloptool wl 0x00 system.img sudo rkdeveloptool rd
脚本烧写固件
首先,使用 SDK中脚本打包生成统一固件system.img
build/mk-image.sh -c rk3328 -t system -r rk-rootfs-build/linaro-rootfs.img
升级统一固件
build/flash_tool.sh -c rk3328 -p system -i out/system.img
脚本执行完毕后,Firefly-RK3328 会自动重启设备。
build/flash_tool.sh 也可以升级单个分区,可自行了解。
eMMC 启动 Linux系统
烧写固件完成后 ROC-RK3328-CC 板子会经历第一次重启,
这时需要在串口控制台按回车键进入命令行配置模式,
输入以下命令刷入 gpt 分区表后,系统将再次重新启动,并自动加载 rootfs 文件系统。
gpt write mmc 0 $partitions boot
以后 ROC-RK3328-CC 板子的启动,则不需要进行以上操作。
FAQs
Q1: 如何强行进入 MaskRom 模式?
A1: 如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。操作方法见《MaskRom 模式》。