技术笔记 SEEWO SV21 RK3568 刷机折腾 狂犬主子 2024-12-27 2024-12-27 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
刷机教程 首先需要准备好一台好用的电脑和:
下载系统镜像并解压,解压后的文件后缀名应为img
电脑安装瑞芯微的驱动:
DriverAssitant_v4.8.zip
DriverAssitant_v5.1.1.zip
实际可能两个版本都要同时安装,否则进入MASKROM后会出现无法识别USB设备的错误。
驱动安装后,下载瑞芯微开发工具并解压,建议使用2.8.X版本刷机工具。
下面是刷机过程:
在刷机前,建议解压好固件为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 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 sudo apt install qemu-user-staticmkdir -p ubuntu_rootfssudo tar xzvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs/sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/echo -e "nameserver 223.5.5.5\nnameserver 119.29.29.29" | sudo tee ubuntu_rootfs/etc/resolv.confsudo tee ubuntu_rootfs/etc/apt/sources.list <<'EOF' deb 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 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 EOF sudo mount -t proc /proc ubuntu_rootfs/procsudo mount -t sysfs /sysfs ubuntu_rootfs/syssudo mount -o bind /dev ubuntu_rootfs/dev 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 exit
接下来我们打包、清理一下镜像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 sudo umount ubuntu_rootfs/procsudo umount ubuntu_rootfs/syssudo umount ubuntu_rootfs/dev dd if =/dev/zero of=ubuntu_rootfs.img bs=1M count=2048 oflag=direct status=progresssudo mkfs.ext4 ubuntu_rootfs.imgmkdir -p ubuntu_base_rootfssudo chmod 777 ubuntu_base_rootfssudo mount ubuntu_rootfs.img ubuntu_base_rootfssudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/sudo umount ubuntu_base_rootfs/sudo e2fsck -p -f ubuntu_rootfs.imgsudo resize2fs -M ubuntu_rootfs.imgsudo rm ubuntu_base_rootfs/ -rfsudo 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 EOF df -hlosetup /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
未完待续…