SEEWO SV21 RK3568 刷机折腾

SEEWO SV21 RK3568 是希沃录播机的主板,带双网口(其中一个支持POE,另外两个网口为麦克风)、3个HDMI(1xIn,2xOut)、1个USB3.0端口、2个USB2.0端口、1个SATA接口(5V)等,采用12V DC5521 电源输入,2G RAM + 4G ROM,原厂预装系统为 4.19 内核的 Buildroot,目前开源DTS暂不完善。

正面

反面

一些资源

目前建议使用卖家提供的 Armian 固件,其他固件要么识别不了双网卡,要么识别不了SATA,要么连关机都管不掉,要么 CPU/GPU/NPU 无法频率有问题。

RockChip 启动流程:https://opensource.rock-chips.com/wiki_Boot_option

原厂分区表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@SV21:/]# fdisk -l
Found valid GPT with protective MBR; using GPT

Disk /dev/mmcblk0: 7733248 sectors, 3776M
Logical sector size: 512
Disk identifier (GUID): ac5b0000-0000-4f31-8000-2d0900006325
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7733214

Number Start (sector) End (sector) Size Name
1 16384 24575 4096K uboot
2 24576 32767 4096K misc
3 32768 98303 32.0M boot
4 98304 163839 32.0M recovery
5 163840 229375 32.0M backup
6 229376 2326527 1024M rootfs
7 2326528 4423679 1024M oem
8 4423680 7733214 1615M userdata

刷机教程

首先需要准备好一台好用的电脑和:

  • RK3568开发板

  • 12V5521电源

  • 双公头USB线

    如果没有双公头USB线的话,可以找一个Type-C母转USB公的转换器,然后用手机数据线连接即可。或者自行找两个坏鼠标啥的,给USB线剪断然后自己DIY一根。

  • USB转TTL线(非必须)

下载系统镜像并解压,解压后的文件后缀名应为img

电脑安装瑞芯微的驱动:

  • DriverAssitant_v4.8.zip
  • DriverAssitant_v5.1.1.zip

实际可能两个版本都要同时安装,否则进入MASKROM后会出现无法识别USB设备的错误。

驱动安装后,下载瑞芯微开发工具并解压,建议使用2.8.X版本刷机工具。

  • RKDevTool.7z

下面是刷机过程:

在刷机前,建议解压好固件为img格式,运行好RK开发工具,避免无法识别。

首先需要进入LOADER模式,如果您的刷机包非统一固件 update.img 类型的(如Armbian、OpenWrt),需要从LOADER模式进入MASKROM模式才能下载到EMMC。

打开刷机工具,界面应为

system 的地址是 0x00000000 意思是从开头覆盖 eMMC 中的数据

Loader 的地址 0xCCCCCCCC 是一个保留地址,用于指示工具发送loader文件

注:刷armbian和openwrt固件需用名为rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin的loader文件。

如按键后加电无法进入LOADER模式请使用硬件短接方式直接进入MASKROM模式后刷机。

注:MASKROM短接点在散热片下方的板子背面,很小的两个铜触点(根据方便文件表示判断)

短接进入MASKROM刷机模式方法:用镊子或其他金属导体短接后不送手,然后加电,2秒后松开短接点即可进入MASKROM模式(一般听到电脑发现硬件提示音就可以松开短接)

此时,点击下方的执行按钮,就会开始强刷流程。如果遇到读取boot失败错误,请强制重启设备并重新执行上述流程。

线刷不成功可能是由于3个原因造成:

  1. 线刷包损坏。(云编译的固件可能存在此问题)
  2. 刷入损坏的线刷包导致的分区信息丢失。(解决方案:可以通过bin文件重建)
  3. 刷机工具因为某种奇怪的原因,无法刷入固件。(解决方案:重新解压一组刷机工具、更换USB接口或直接更换较老的电脑)

Android刷机方法

安卓需要8G ROM,本人的为 4G ROM,暂不支持刷安卓

刷原厂固件需要使用此方法,建议在刷之前点击 擦除Flash。

由于网盘提供的是Android11升级包形式兼容固件,所以刷机特别简单。

首先打开刷机工具,进入loader模式(MASKROM模式也可以)然后按下图即可完成刷机。

刷机过程所有固件均要是解压后的img后缀镜像文件

刷机过程所有固件均要是解压后的img后缀镜像文件

刷机过程所有固件均要是解压后的img后缀镜像文件

安装 Ubuntu Base

如果您需要使用到 GPU / NPU 等硬件功能,由于目前DTS不完善,不想使用开源内核,可以在原厂固件的基础上替换掉 Buildroot rootfs,无需重新编译内核,功能包好。不过 Rockchip 内核对 Docker 支持不完善,这种方法仅供嵌入式开发生产环境使用。

首先需要准备一个 Linux 构建环境,这里使用 Ubuntu / Debian 都可以,这里使用 x86 架构的处理器,需要通过转译的方式 chroot 运行 arm64 的 apt。

下载 Ubuntu Base 的 arm64 镜像,建议不要用新版本,因为原厂固件 4.19 内核较老,避免运行软件出现问题。这边使用 20.04 LTS 版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 安装构建rootfs所需的工具
sudo apt install qemu-user-static


mkdir -p ubuntu_rootfs
sudo tar xzvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs/

# 由于是x86环境,需要通过转译才能运行arm64的应用
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/

# 必须设置DNS,不然chroot无法联网
echo -e "nameserver 223.5.5.5\nnameserver 119.29.29.29" | sudo tee ubuntu_rootfs/etc/resolv.conf
# echo -e "[Resolve]\nDNS=223.5.5.5 119.29.29.29" | sudo tee ubuntu_rootfs/etc/systemd/resolved.conf

# 更换国内源
sudo tee ubuntu_rootfs/etc/apt/sources.list <<'EOF'
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.cernet.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src http://mirrors.cernet.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse

# deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
# # deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
# # deb-src http://mirrors.cernet.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
EOF

# 挂载本机文件系统
sudo mount -t proc /proc ubuntu_rootfs/proc
sudo mount -t sysfs /sysfs ubuntu_rootfs/sys
sudo mount -o bind /dev ubuntu_rootfs/dev

# 进入rootfs
sudo chroot ubuntu_rootfs/

此时我们需要对系统进行一些定制,可以根据个人喜好自行调整。

1
2
3
4
5
6
7
8
9
10
11
# 安装常用工具和联网组件
apt update
apt upgrade -y
apt install nano openssh-server ethtool iputils-ping sudo iproute2 init dbus --no-install-recommends
apt clean

# 更改密码
passwd

# 退出chroot
exit

接下来我们打包、清理一下镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 卸载挂载的本机文件系统
sudo umount ubuntu_rootfs/proc
sudo umount ubuntu_rootfs/sys
sudo umount ubuntu_rootfs/dev

# 制作img刷机镜像
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=2048 oflag=direct status=progress
sudo mkfs.ext4 ubuntu_rootfs.img
mkdir -p ubuntu_base_rootfs
sudo chmod 777 ubuntu_base_rootfs
sudo mount ubuntu_rootfs.img ubuntu_base_rootfs
sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
sudo umount ubuntu_base_rootfs/
sudo e2fsck -p -f ubuntu_rootfs.img
sudo resize2fs -M ubuntu_rootfs.img

# 清理制作缓存
sudo rm ubuntu_base_rootfs/ -rf
sudo rm ubuntu_rootfs/ -rf

此时我们就可以将 ubuntu_rootfs.img 烧录到 EMMC 的 rootfs 分区了。

进入 Loader / MaskROM 模式,电脑上打开开发工具,选择下载镜像,点击查看设备分区表,将 ubuntu_rootfs.img 刷入到对应 rootfs 的地址(0x00038000)。刷机完成后会自动重启,建议提前连接好 TTL。

由于 u-boot 设置启动参数不通过显示器输出tty,需要通过 TTL 登录系统,执行以下命令初始化用户环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 设置时区
timedatectl set-timezone Asia/Shanghai

# 设置网卡
tee /etc/network/interfaces <<'EOF'
auto eth1
iface eth1 inet dhcp

#auto enxbc6bff423336
#iface enxbc6bff423336 inet dhcp

EOF

# 扩容分区
df -h
losetup /dev/loop0 /dev/mmcblk0p6
resize2fs /dev/loop0
losetup -d /dev/loop0
reboot

默认 rootfs 分区为 2G,如果不够用,可以使用 cfdisk /dev/mmcblk0 删除 oem 和 userdata 分区,然后给 rootfs 分区扩容(resize)。扩容后需要执行上面的命令重新调整文件系统大小。

经过测试发现此内核缺少对 Docker 的支持。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
root@localhost:~# bash check-config.sh
info: reading kernel config from /proc/config.gz ...

Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: missing
- CONFIG_KEYS: enabled
- CONFIG_VETH: missing
- CONFIG_BRIDGE: missing
- CONFIG_BRIDGE_NETFILTER: missing
- CONFIG_IP_NF_FILTER: missing
- CONFIG_IP_NF_MANGLE: enabled
- CONFIG_IP_NF_TARGET_MASQUERADE: missing
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: missing
- CONFIG_NETFILTER_XT_MATCH_IPVS: missing
- CONFIG_NETFILTER_XT_MARK: missing
- CONFIG_IP_NF_NAT: missing
- CONFIG_NF_NAT: missing
- CONFIG_POSIX_MQUEUE: missing
- CONFIG_NF_NAT_IPV4: missing
- CONFIG_NF_NAT_NEEDED: missing
- CONFIG_CGROUP_BPF: missing

Optional Features:
- CONFIG_USER_NS: enabled
- CONFIG_SECCOMP: enabled
- CONFIG_SECCOMP_FILTER: enabled
- CONFIG_CGROUP_PIDS: missing
- CONFIG_MEMCG_SWAP: missing
- CONFIG_MEMCG_SWAP_ENABLED: missing
- CONFIG_IOSCHED_CFQ: enabled
- CONFIG_CFQ_GROUP_IOSCHED: missing
- CONFIG_BLK_CGROUP: missing
- CONFIG_BLK_DEV_THROTTLING: missing
- CONFIG_CGROUP_PERF: missing
- CONFIG_CGROUP_HUGETLB: missing
- CONFIG_NET_CLS_CGROUP: missing
- CONFIG_CGROUP_NET_PRIO: missing
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_IP_NF_TARGET_REDIRECT: missing
- CONFIG_IP_VS: missing
- CONFIG_IP_VS_NFCT: missing
- CONFIG_IP_VS_PROTO_TCP: missing
- CONFIG_IP_VS_PROTO_UDP: missing
- CONFIG_IP_VS_RR: missing
- CONFIG_SECURITY_SELINUX: missing
- CONFIG_SECURITY_APPARMOR: missing
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:
- "overlay":
- CONFIG_VXLAN: missing
- CONFIG_BRIDGE_VLAN_FILTERING: missing
Optional (for encrypted networks):
- CONFIG_CRYPTO: enabled
- CONFIG_CRYPTO_AEAD: enabled
- CONFIG_CRYPTO_GCM: enabled
- CONFIG_CRYPTO_SEQIV: enabled
- CONFIG_CRYPTO_GHASH: enabled
- CONFIG_XFRM: enabled
- CONFIG_XFRM_USER: enabled
- CONFIG_XFRM_ALGO: enabled
- CONFIG_INET_ESP: missing
- CONFIG_NETFILTER_XT_MATCH_BPF: missing
- CONFIG_INET_XFRM_MODE_TRANSPORT: missing
- "ipvlan":
- CONFIG_IPVLAN: missing
- "macvlan":
- CONFIG_MACVLAN: missing
- CONFIG_DUMMY: missing
- "ftp,tftp client in container":
- CONFIG_NF_NAT_FTP: missing
- CONFIG_NF_CONNTRACK_FTP: missing
- CONFIG_NF_NAT_TFTP: missing
- CONFIG_NF_CONNTRACK_TFTP: missing
- Storage Drivers:
- "btrfs":
- CONFIG_BTRFS_FS: missing
- CONFIG_BTRFS_FS_POSIX_ACL: missing
- "overlay":
- CONFIG_OVERLAY_FS: missing
- "zfs":
- /dev/zfs: missing
- zfs command: missing
- zpool command: missing

Limits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000

未完待续…