1. 先把默认的Android系统烧写成Ubuntu18.04系统
(1) 下载最新的Ubuntu18.04(GPT)
找到官网首页[资料下载]中的ROC-RK3328-PC的固件中的Ubuntu18.04(GPT),点击下载
下载: ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
(2) 解压7z文件,得到官方原始镜像ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img
apt-get install p7zip-full
7z x ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
tree
显示:
。
├── pack
│ ├── Linux_Upgrade_Tool
│ │ ├── config.ini
│ │ ├── Linux开发工具使用手册_v1.32.pdf
│ │ ├── Readme.txt
│ │ └── upgrade_tool
│ └── ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img
└── ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
(3) 为了方便使用,修改原始镜像的名字为: r.img
cd pack
mv ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img r.img
(4) 烧录原始统一镜像
方式1: 使用上面镜像压缩包中的Linux_Upgrade_Tool,进行烧写
a. cd pack/Linux_Upgrade_Tool
b. mv 。./r.img 。/
c. rk3328插入AV口(RECOVERY按键在里面),一直长按RECOVERY键, 使用电源线的USB连接到电脑上
d. sudo 。/upgrade_tool
找到一个设备, 输入1
Program Data in /home/xxx/.config/upgrade_tool
List of rocku*** connected
DevNo=1 Vid=xxx,Pid=xxx,LocationID=xxx Mode=Loader SerialNo=xxx
Found 1 rocku***,Select input DevNo,Rescan press 《R》,Quit press 《Q》:1
显示:
---------------------Tool Usage ---------------------
Help: H
Quit: Q
Version: V
Clear Screen: CS
------------------Upgrade Command ------------------
ChooseDevice: CD
ListDevice: LD
SwitchDevice: SD
UpgradeFirmware: UF 《Firmware》 [-noreset]
UpgradeLoader: UL 《Loader》 [-noreset]
DownloadImage: DI 《-p|-b|-k|-s|-r|-m|-u|-t|-re image》
DownloadBoot: DB 《Loader》
EraseFlash: EF 《Loader|firmware》 [DirectLBA]
PartitionList: PL
----------------Professional Command -----------------
TestDevice: TD
ResetDevice: RD [subcode]
ResetPipe: RP [pipe]
ReadCapability: RCB
ReadFlashID: RID
ReadFlashInfo: RFI
ReadChipInfo: RCI
ReadSector: RS 《BeginSec》 《SectorLen》 [-decode] [File]
WriteSector: WS 《BeginSec》 《File》
ReadLBA: RL 《BeginSec》 《SectorLen》 [File]
WriteLBA: WL 《BeginSec》 《File》
EraseLBA: EL 《BeginSec》 《EraseCount》
EraseBlock: EB 《CS》 《BeginBlock》 《BlokcLen》 [--Force]
-------------------------------------------------------
e. 烧写镜像, 等待完成
uf r.img
显示:
Rocku***》uf r.img
Loading firmware.。.
Support Type:RK322H FW Ver:8.1.276 FW Time:2020-06-30 14:05:48
Loader ver:2.50 Loader Time:2020-06-30 11:48:03
Upgrade firmware ok.
方式2: 使用Windows系统,借助AndroidTool烧写统一镜像
a. 下载官网的AndroidTool和RK驱动助手
注意: 下面是官方的推荐, 这里说明下,使用AndroidTool_v2.58, 如果自己之后重新打统一镜像后,升级时会出现rootfs分区不够存储镜像的问题,这里推荐使用AndroidTool_v2.71
烧录工具下载
Windows下:
Linux 或者 Android8.1 系统 AndroidTool_v2.58
Android7.1 系统 AndroidTool_v2.38
Android10 系统 AndroidTool_v2.71
Linux下:
Linux 系统或者 Android8.1 系统 Upgrade_Tool_v1.34
Android7.1 系统 Upgrade_Tool_v1.24
Android10 系统 Upgrade_Tool_v1.49
b. 安装RK驱动助手和AndroidTool后, 使用电源线通过USB连接到Windows电脑
打开[AndroidTool], 等待显示: 发现一个ADB设备, 点击菜单中[下载镜像]的[切换]按钮
显示变成: 发现一个LOADER设备
c. 选择升级固件: 点击[升级固件], 选择[固件]按钮,双击,选择上面Linux系统的r.img拷贝到windows电脑目录中的r.img
等待一会,不报错,会显示:
固件版本8.1.276 Loader版本: 2.50 芯片信息:RK322H
固件: D:r_imgr.img # 自己电脑的官方原始固件位置
d. 可以点击: [升级固件]页面的[升级]按钮了
会显示:升级信息
测试设备开始
测试设备成功
校验芯片开始
校验芯片成功
获取FlashInfo开始
获取FlashInfo成功
准备IDB开始
准备IDB成功
下载IDB开始
下载IDB成功
下载固件开始
正在下载固件(100%)
下载固件成功
重启设备开始
重启设备成功
2.开机初始配置
通过type-c数据线连接显示屏,插入网线,鼠标,键盘,和电源线, 开机进行初始的网络配置和ssh配置
通过电脑右上侧的网络配置图形页面,配置ip,子网掩码,网关,DNS
修改sshd服务器:
sudo vi /etc/ssh/sshd_config
修改为: PermitRootLogin yes
sudo /etc/init.d/ssh restart # 重启ssh
之后通过ssh可以连接rk3328设备了, 之后修改ip可以通过ubuntu18.04系统支持的/etc/netplan, 此处不做详细说明
3.部署生产环境
ssh连接rk3328,部署生产环境
部署完成后,可以考虑刻录完整镜像了,用于生产
4.制作根文件系统镜像
说明: 本文采取的打包完整统一镜像的方式为: 使用原厂的原始镜像解包, 替换rootfs.img文件系统, 再使用AndroidTool工具进行打包和烧录
(1)。 导出开发板文件系统(参考AIO-3288C的官网资料)
a. sudo apt-get install -y ssh rsync
b. 在PC机中同步开发板的文件系统,请先将开发板和 PC 机置于同一局域网内。(假设开发板地址为 192.168.9.179)
mkdir rootfs
sudo rsync -avx root@192.168.9.179:/ 。/rootfs
c. 此时,rootfs 目录中保存的就是开发板文件系统中的所有文件,可以开始制作根文件系统镜像:
dd if=/dev/zero of=rootfs.img bs=1M count=4000
# count大小为了节省空间同时保证可以放下整个系统, 可以在开发板上使用df -h, 我这里为: /root-ro 和 /userdata的大小之和, 即: rootfs+userdata的大小,这个会被制成新的文件系统, 2.6G+1.4G, 同时: du -sh 。/rootfs 显示: 3.7G rootfs, 可以使用4000
mkfs.ext4 rootfs.img
mkdir temp && sudo mount rootfs.img 。/temp
sudo cp -rfp rootfs/* temp/
sudo umount temp/
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
d. 查看大小:
du -sh rootfs.img # 3.8G 。/rootfs.img
ls -al rootfs.img # 4194304000 4月 30 16:31 rootfs.img
5.制作完整统一镜像
(1)。 AndroidTool解包原始固件r.img
a. 选择[高级功能]中的[解包]按钮前面的[。..]按钮, 选中原始固件D:r_imgr.img, 再点击[解包]
b. 等待片刻, 在AndroidTool_Release_v2.71Output目录下会生成统一镜像r.img的解包镜像:
包括: boot.bin, firmware.img, Android目录
实际是引导程序bootloader和使用AFPTool打包各个分区镜像生成的firmware.img
Android目录实际是firmware.img通过AFPTool解包生成的各个分区镜像,我们主要使用这个目录
(2)。 用导出的开发板文件系统rootfs.img 替换 OutputAndroidImage下的原始rootfs.img
(3)。 同时要修改分区信息表文件parameter.txt中的rootfs分区的大小和userdata分区的起始位置
parameter.txt内容:
FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3328
MACHINE_ID: 007
MANUFACTURER: RK3328
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3328
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x588400@0x0005a000(rootfs),-@0x5e2400(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
例如: 0x588400@0x0005a000(rootfs) 扇区大小@起始位置(分区名)
每个扇区512字节, 像我上面rootfs.img大小: 4194304000, 扇区大小: 4194304000/512=8192000 转16进制: 0x7d0000
如果以0x7d0000修改上面的parameter.txt, 则: 0x7d0000@0x0005a000(rootfs),-@0x82a000(userdata:grow)
但是这种很容易在打包镜像完成后,烧写镜像升级时,出现rootfs分区不够存放镜像,
官方在处理这个大小时加上了大约50M大小,在重新计算这个这个扇区数量
可以使用官方的linux打包和解包工具,自动根据rootfs.img的大小,自动修改parameter.txt
# ROC-RK3399-PC中的解合包工具(Linux), firefly-rk3399-linux-repack.tgz
cd firefly-rk3399-linux-repack
tree:
。
├── bin/
│ ├── afptool*
│ └── rkImageMaker*
├── output/
│ ├── Image/
│ │ ├── boot.img
│ │ ├── MiniLoaderAll.bin
│ │ ├── misc.img
│ │ ├── parameter.txt
│ │ ├── recovery.img
│ │ ├── rootfs.img
│ │ ├── trust.img
│ │ └── uboot.img
│ └── package-file
├── pack.sh*
├── Readme.md
└── unpack.sh*
查看Readme.md, 通过unpack.sh和pack.sh打包和解包,需要在ubuntu18下运行有效,同时安装32位系统支持, afptool和rkImageMaker是32位系统的可执行程序
我这里ubuntu16下只通过pack.sh自动修改parameter.txt,afptool报错不用管。
(4) 拷贝pack.sh自动修改后的parameter.txt到windows电脑,替换掉 AndroidTool_Release_v2.71OutputAndroidImageparameter.txt
parameter.txt修改后的内容:
FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3328
MACHINE_ID: 007
MANUFACTURER: RK3328
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3328
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x7e9200@0x0005a000(rootfs),-@0x843200(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
(5) 打包镜像
Windows下:
cd D:AndroidTool_Release_v2.71bin
D:
AFPTool.exe -pack D:AndroidTool_Release_v2.71OutputAndroid update.img
RKImageMaker.exe -RK322H D:AndroidTool_Release_v2.71Outputboot.bin update.img update_new.img -os_type:androidos
在D:AndroidTool_Release_v2.71bin下生成update_new.img, 此为最新的统一完整固件,可以直接使用AndroidTool工具重新烧写镜像,完成开发板到其他开发板的环境备份。
总结
特别说明: 之前我使用官网推荐的AndroidTool_Release_v2.58进行固件的打包和烧写,会出现使用上面这个好的parameter.txt也会出现rootfs分区不够存储镜像的问题,有些坑人!
1. 先把默认的Android系统烧写成Ubuntu18.04系统
(1) 下载最新的Ubuntu18.04(GPT)
找到官网首页[资料下载]中的ROC-RK3328-PC的固件中的Ubuntu18.04(GPT),点击下载
下载: ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
(2) 解压7z文件,得到官方原始镜像ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img
apt-get install p7zip-full
7z x ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
tree
显示:
。
├── pack
│ ├── Linux_Upgrade_Tool
│ │ ├── config.ini
│ │ ├── Linux开发工具使用手册_v1.32.pdf
│ │ ├── Readme.txt
│ │ └── upgrade_tool
│ └── ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img
└── ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img.7z
(3) 为了方便使用,修改原始镜像的名字为: r.img
cd pack
mv ROC-RK3328-PC-UBUNTU18.04-GPT-20200630-1405.img r.img
(4) 烧录原始统一镜像
方式1: 使用上面镜像压缩包中的Linux_Upgrade_Tool,进行烧写
a. cd pack/Linux_Upgrade_Tool
b. mv 。./r.img 。/
c. rk3328插入AV口(RECOVERY按键在里面),一直长按RECOVERY键, 使用电源线的USB连接到电脑上
d. sudo 。/upgrade_tool
找到一个设备, 输入1
Program Data in /home/xxx/.config/upgrade_tool
List of rocku*** connected
DevNo=1 Vid=xxx,Pid=xxx,LocationID=xxx Mode=Loader SerialNo=xxx
Found 1 rocku***,Select input DevNo,Rescan press 《R》,Quit press 《Q》:1
显示:
---------------------Tool Usage ---------------------
Help: H
Quit: Q
Version: V
Clear Screen: CS
------------------Upgrade Command ------------------
ChooseDevice: CD
ListDevice: LD
SwitchDevice: SD
UpgradeFirmware: UF 《Firmware》 [-noreset]
UpgradeLoader: UL 《Loader》 [-noreset]
DownloadImage: DI 《-p|-b|-k|-s|-r|-m|-u|-t|-re image》
DownloadBoot: DB 《Loader》
EraseFlash: EF 《Loader|firmware》 [DirectLBA]
PartitionList: PL
----------------Professional Command -----------------
TestDevice: TD
ResetDevice: RD [subcode]
ResetPipe: RP [pipe]
ReadCapability: RCB
ReadFlashID: RID
ReadFlashInfo: RFI
ReadChipInfo: RCI
ReadSector: RS 《BeginSec》 《SectorLen》 [-decode] [File]
WriteSector: WS 《BeginSec》 《File》
ReadLBA: RL 《BeginSec》 《SectorLen》 [File]
WriteLBA: WL 《BeginSec》 《File》
EraseLBA: EL 《BeginSec》 《EraseCount》
EraseBlock: EB 《CS》 《BeginBlock》 《BlokcLen》 [--Force]
-------------------------------------------------------
e. 烧写镜像, 等待完成
uf r.img
显示:
Rocku***》uf r.img
Loading firmware.。.
Support Type:RK322H FW Ver:8.1.276 FW Time:2020-06-30 14:05:48
Loader ver:2.50 Loader Time:2020-06-30 11:48:03
Upgrade firmware ok.
方式2: 使用Windows系统,借助AndroidTool烧写统一镜像
a. 下载官网的AndroidTool和RK驱动助手
注意: 下面是官方的推荐, 这里说明下,使用AndroidTool_v2.58, 如果自己之后重新打统一镜像后,升级时会出现rootfs分区不够存储镜像的问题,这里推荐使用AndroidTool_v2.71
烧录工具下载
Windows下:
Linux 或者 Android8.1 系统 AndroidTool_v2.58
Android7.1 系统 AndroidTool_v2.38
Android10 系统 AndroidTool_v2.71
Linux下:
Linux 系统或者 Android8.1 系统 Upgrade_Tool_v1.34
Android7.1 系统 Upgrade_Tool_v1.24
Android10 系统 Upgrade_Tool_v1.49
b. 安装RK驱动助手和AndroidTool后, 使用电源线通过USB连接到Windows电脑
打开[AndroidTool], 等待显示: 发现一个ADB设备, 点击菜单中[下载镜像]的[切换]按钮
显示变成: 发现一个LOADER设备
c. 选择升级固件: 点击[升级固件], 选择[固件]按钮,双击,选择上面Linux系统的r.img拷贝到windows电脑目录中的r.img
等待一会,不报错,会显示:
固件版本8.1.276 Loader版本: 2.50 芯片信息:RK322H
固件: D:r_imgr.img # 自己电脑的官方原始固件位置
d. 可以点击: [升级固件]页面的[升级]按钮了
会显示:升级信息
测试设备开始
测试设备成功
校验芯片开始
校验芯片成功
获取FlashInfo开始
获取FlashInfo成功
准备IDB开始
准备IDB成功
下载IDB开始
下载IDB成功
下载固件开始
正在下载固件(100%)
下载固件成功
重启设备开始
重启设备成功
2.开机初始配置
通过type-c数据线连接显示屏,插入网线,鼠标,键盘,和电源线, 开机进行初始的网络配置和ssh配置
通过电脑右上侧的网络配置图形页面,配置ip,子网掩码,网关,DNS
修改sshd服务器:
sudo vi /etc/ssh/sshd_config
修改为: PermitRootLogin yes
sudo /etc/init.d/ssh restart # 重启ssh
之后通过ssh可以连接rk3328设备了, 之后修改ip可以通过ubuntu18.04系统支持的/etc/netplan, 此处不做详细说明
3.部署生产环境
ssh连接rk3328,部署生产环境
部署完成后,可以考虑刻录完整镜像了,用于生产
4.制作根文件系统镜像
说明: 本文采取的打包完整统一镜像的方式为: 使用原厂的原始镜像解包, 替换rootfs.img文件系统, 再使用AndroidTool工具进行打包和烧录
(1)。 导出开发板文件系统(参考AIO-3288C的官网资料)
a. sudo apt-get install -y ssh rsync
b. 在PC机中同步开发板的文件系统,请先将开发板和 PC 机置于同一局域网内。(假设开发板地址为 192.168.9.179)
mkdir rootfs
sudo rsync -avx root@192.168.9.179:/ 。/rootfs
c. 此时,rootfs 目录中保存的就是开发板文件系统中的所有文件,可以开始制作根文件系统镜像:
dd if=/dev/zero of=rootfs.img bs=1M count=4000
# count大小为了节省空间同时保证可以放下整个系统, 可以在开发板上使用df -h, 我这里为: /root-ro 和 /userdata的大小之和, 即: rootfs+userdata的大小,这个会被制成新的文件系统, 2.6G+1.4G, 同时: du -sh 。/rootfs 显示: 3.7G rootfs, 可以使用4000
mkfs.ext4 rootfs.img
mkdir temp && sudo mount rootfs.img 。/temp
sudo cp -rfp rootfs/* temp/
sudo umount temp/
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
d. 查看大小:
du -sh rootfs.img # 3.8G 。/rootfs.img
ls -al rootfs.img # 4194304000 4月 30 16:31 rootfs.img
5.制作完整统一镜像
(1)。 AndroidTool解包原始固件r.img
a. 选择[高级功能]中的[解包]按钮前面的[。..]按钮, 选中原始固件D:r_imgr.img, 再点击[解包]
b. 等待片刻, 在AndroidTool_Release_v2.71Output目录下会生成统一镜像r.img的解包镜像:
包括: boot.bin, firmware.img, Android目录
实际是引导程序bootloader和使用AFPTool打包各个分区镜像生成的firmware.img
Android目录实际是firmware.img通过AFPTool解包生成的各个分区镜像,我们主要使用这个目录
(2)。 用导出的开发板文件系统rootfs.img 替换 OutputAndroidImage下的原始rootfs.img
(3)。 同时要修改分区信息表文件parameter.txt中的rootfs分区的大小和userdata分区的起始位置
parameter.txt内容:
FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3328
MACHINE_ID: 007
MANUFACTURER: RK3328
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3328
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x588400@0x0005a000(rootfs),-@0x5e2400(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
例如: 0x588400@0x0005a000(rootfs) 扇区大小@起始位置(分区名)
每个扇区512字节, 像我上面rootfs.img大小: 4194304000, 扇区大小: 4194304000/512=8192000 转16进制: 0x7d0000
如果以0x7d0000修改上面的parameter.txt, 则: 0x7d0000@0x0005a000(rootfs),-@0x82a000(userdata:grow)
但是这种很容易在打包镜像完成后,烧写镜像升级时,出现rootfs分区不够存放镜像,
官方在处理这个大小时加上了大约50M大小,在重新计算这个这个扇区数量
可以使用官方的linux打包和解包工具,自动根据rootfs.img的大小,自动修改parameter.txt
# ROC-RK3399-PC中的解合包工具(Linux), firefly-rk3399-linux-repack.tgz
cd firefly-rk3399-linux-repack
tree:
。
├── bin/
│ ├── afptool*
│ └── rkImageMaker*
├── output/
│ ├── Image/
│ │ ├── boot.img
│ │ ├── MiniLoaderAll.bin
│ │ ├── misc.img
│ │ ├── parameter.txt
│ │ ├── recovery.img
│ │ ├── rootfs.img
│ │ ├── trust.img
│ │ └── uboot.img
│ └── package-file
├── pack.sh*
├── Readme.md
└── unpack.sh*
查看Readme.md, 通过unpack.sh和pack.sh打包和解包,需要在ubuntu18下运行有效,同时安装32位系统支持, afptool和rkImageMaker是32位系统的可执行程序
我这里ubuntu16下只通过pack.sh自动修改parameter.txt,afptool报错不用管。
(4) 拷贝pack.sh自动修改后的parameter.txt到windows电脑,替换掉 AndroidTool_Release_v2.71OutputAndroidImageparameter.txt
parameter.txt修改后的内容:
FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3328
MACHINE_ID: 007
MANUFACTURER: RK3328
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3328
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x7e9200@0x0005a000(rootfs),-@0x843200(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
(5) 打包镜像
Windows下:
cd D:AndroidTool_Release_v2.71bin
D:
AFPTool.exe -pack D:AndroidTool_Release_v2.71OutputAndroid update.img
RKImageMaker.exe -RK322H D:AndroidTool_Release_v2.71Outputboot.bin update.img update_new.img -os_type:androidos
在D:AndroidTool_Release_v2.71bin下生成update_new.img, 此为最新的统一完整固件,可以直接使用AndroidTool工具重新烧写镜像,完成开发板到其他开发板的环境备份。
总结
特别说明: 之前我使用官网推荐的AndroidTool_Release_v2.58进行固件的打包和烧写,会出现使用上面这个好的parameter.txt也会出现rootfs分区不够存储镜像的问题,有些坑人!
举报