用定昌开发板YM562(RK3562)打造家里的All In One系统

最近,定昌电子举办了《AIoT嵌入式主板体验官招募_RK3562》很活动,参加者可以免费获一块RK3562/1+8G开发板。我报名参加并有幸通过了。

这是收到的开发板:

DC-YM562-V02板,采用瑞芯微新一代64位四核处理器RK3562,主频最高2.0GHz;采用四核A53+Mali G52架构,支持OpenGL ES1.1/2.0/3.2,OpenCL 2.0,Vulkan 1.1,支持 4K@30fps H.265/VP9 和 1080P@60fps H.264 视频解码, 1080P@60fps H.264 视频编码。 此外, 它还包括高质量的 JPEG 编码器和解码器, 是一款高性能、 低 功耗的四核应用处理器, 专为消费电子产品设计。

这个板子的用途应该是工业控制、广告机、电子显示屏等,但我不打算用于这方面,而是用来打造家里的All In One(All In Boom)系统,打算安装Vaultwarden用于管理密码、OpenList用来同步、备份手机上的照片、Home Assistant用来作为智能家居的中控。

我收到的这块板子预装的是Debian12系统,因为没有接显示器,所以只能用SSH连接。这里推荐使用Xshell软件来连接SSH。但是注意要下载国外原版的免费的Xshell,不要错误地下载到了“中国特供”的山寨版。原版下载地址 https://www.xshell.com/en/free-for-home-school/

插上网线,从路由器里查看到分配给它的ip地址,用SSH连接。

查看一下内存和硬盘情况:

从进程看似乎是一个桌面版操作系统,不适合我的All In One需要。内存用了一半,硬盘空间只剩下1.4G,显然不够用,然后再仔细检查了一下这个系统,发现了更大的问题:

  • 没有 /dev/net/tun,导致无法安装 easytier、tailscale等组网软件
  • 内核不支持 wireguard,导致也无法安装 wireguard 组网软件
  • 内核不支持 OverlayFS,导致无法使用docker
  • 内核不支持 iptables,导致无法使用docker和UFW防火墙

看来只能自己编译一个支持以上功能并且精简的系统了。但是本人以前从来没有编译过任何系统,更不要说嵌入式系统了。但是好消息是,定昌电子的网官上面有编译系统的教程,并且是傻瓜式手把手的教程。教程地址 http://wikicn.gzdcsmt.com/wendang_id_52.html#sideglarticlenr1

由于我的是windows电脑,所以我用vmware虚拟机运行了一下ubuntu22系统用来进行编译,ubuntu22下载地址 http://download.hs-info.com/download/os/ubuntu/22.04/

因为是首次编译,所以先不考虑增加上面的功能,先按教程里面一步一步来:

sudo apt-get update
sudo apt-get install git ssh make gcc libssl-dev \
liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath \
diffstat binfmt-support qemu-user-static live-build bison flex fakeroot \
cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev \
libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev \
libmpc-dev bc python-is-python3 python2

./build.sh lunch
# 这里选择第3项ubuntu
./build.sh 

然后遇到了问题:

看样子是缺少一些与camera有关的源文件,但我不知道如里能找到。好消息是我的all in one似乎不需要摄像头相关的功能,那就删除吧。

打开文件 /root/SDK/buildroot/configs/rockchip_rk3562_defconfig,将里面相关的代码全部删除,也就是删除下面这几行:

#include "multimedia/audio.config"
#include "multimedia/camera.config"
#include "multimedia/gst/audio.config"
#include "multimedia/gst/camera.config"
#include "multimedia/gst/rtsp.config"
#include "multimedia/gst/video.config"
#include "multimedia/mpp.config"

然后再次编译,就没遇到错误了,足足花了两三小时,最后编译成功了,刷机测试成功。刷机过程就不说了,定昌电子B站上面的视频教程 https://www.bilibili.com/video/BV1Kz5PzVEAG/?vd_source=514bc9d60fa0f0ca505828c20aaa3d42

精简固件的方法,我是使用了ubuntu官方的最小安装包,代替了定昌官方提供的ubuntu安装包,下载地址 https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.4-base-arm64.tar.gz

固件缺少的那几个功能模块,在配置文件增加相关的参数就可以了。

重新编译并刷机后,得到了一个精简的系统:

开机只使用了80多M存,硬盘空间剩余4.7GB,比先前好了很多。

测试一下先前缺少的功能,现在都有了。

docker安装和使用,定昌电子也提供了教程,真是贴心:

#更新系统列表包
sudo apt update
#安装依赖包
sudo apt install -y ca-certificates curl software-properties-common
#添加密钥和docker源 这里加的阿里云的
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy stable " | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新包
sudo apt update
#安装docker
sudo apt install  docker-ce docker-ce-cli containerd.io docker-compose -y

再提供一下我使用的一些docker容器的docker-compose.yml文件,其实这些容器的官网上都有的。

vaultwarden:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SIGNUPS_ALLOWED=false
      - INVITATIONS_ALLOWED=true
      - ADMIN_TOKEN=xxxxx
      - LOG_FILE=/data/vaultwarden.log
      - LOG_LEVEL=error
      - WEB_VAULT_ENABLED=true
    volumes:
      - ./data:/data
    ports:
      - 3007:80

openlist:

services:
  openlist:
    image: 'openlistteam/openlist:latest'
    container_name: openlist
    user: '1000:1000' # Please replace `0:0` with the actual user ID and group ID you want to use to run OpenList.
    volumes:
      - './data:/opt/openlist/data'
    ports:
      - '5244:5244'
    environment:
      - UMASK=022
    restart: unless-stopped

经过一番努力,终于有成果了:

工作时的样子:

再次感谢定昌电子提供的开发板,特别是详尽的教程。