SEEWO SV21 RK3568 刷机折腾

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暂不完善。
一些资源
-
原厂固件TTL波特率:115200
-
其他RK系统TTL波特率:1500000
-
U-Boot:https://github.com/ophub/u-boot/tree/main/u-boot/rockchip/seewo-sv21
-
Ophub Armbian 固件:https://github.com/ophub/amlogic-s9xxx-armbian
-
Ophub OpenWrt 固件:https://github.com/ophub/amlogic-s9xxx-openwrt
-
RK33XX/RK35XX系列设备启动流程、写入系统及编译流程:https://github.com/ophub/amlogic-s9xxx-armbian/discussions/1634
-
瑞芯微 RK 系列芯片启动流程简析:https://www.w568w.eu.org/rockchip-boot-process.html
-
SV21 All In Boom:https://www.bilibili.com/opus/961259216355459077
目前建议使用卖家提供的 Armian 固件,其他固件要么识别不了双网卡,要么识别不了SATA,要么连关机都管不掉,要么 CPU/GPU/NPU 无法频率有问题。
RockChip 启动流程:https://opensource.rock-chips.com/wiki_Boot_option
原厂分区表
1 | [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个原因造成:
- 线刷包损坏。(云编译的固件可能存在此问题)
- 刷入损坏的线刷包导致的分区信息丢失。(解决方案:可以通过bin文件重建)
- 刷机工具因为某种奇怪的原因,无法刷入固件。(解决方案:重新解压一组刷机工具、更换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 | # 安装构建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 | # 安装常用工具和联网组件 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 | # 卸载挂载的本机文件系统 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 | # 设置时区 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 | 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 |
未完待续…