rock5B笔记

本文最后更新于 2024年5月7日 凌晨

本文不是介绍也不是教学,只是记录自己对rock5b板子的使用,然后根据使用情况进行更新,想知道更详细请前往官方wiki

1 板子图

2 跑起来

没有买eMMC模块,太贵了,用的是nvme固态硬盘(M.2 1T PCLe 3.0x4),系统可以在这个仓库下载,第一次弄也不晓得这些版本会不会有啥问题,还是先用官网上的20221031版本跑起来试试。

板子支持电源是:PD2.0 电源适配器,支持12V/15V/20V输出2A以上电流,我用的小米33W 9V3A的充电头。

2.1 烧录系统

我手里有个nvme转usb的转接器,就直接将固态插上后接到电脑

工具同样是使用官网上给balenaEtcher,该程序不需要安装,打开即用。首先选择上面下载的ubuntu系统,然后选择固态的盘符,最后点击烧录即可。

2.2 nvme启动(刷SPI)

直接将固态插到rock5上是不行的,你会发现绿灯常亮,没起来。它默认不支持nvme启动,所有需要刷SPI,流程也不麻烦。先下载必要的东西:

将上面的文件都下载好后,先解压驱动,打开文件夹中的DriverInstall.exe,点击安装驱动

断开rock5B的供电,按住板子图里的25.maskrom button按钮,供电的usb线插插上电脑,打开刷写器RKDevTool文件夹里面的RKDevTool.exe程序,会在窗体下方看到:Found One MASKROM Device

对窗体右键,选择Load Config,然后再选择RKDevTool文件夹里的rock-5b-spinor.cfg

将Loader和Image的地址改成上面下载的后,勾选Write by Address,点击Run即可,最后如图:

2.3 启动

直接拔了,然后插上nvme,插上充电头,插上网线,这个时候就能看到蓝灯在间歇闪烁(和绿灯一个地方),通过IPSCAN搜索它的地址,设备名是rock.lan很好找,然后ssh登录即可,用户名是rock,密码是rock。

3 换成armbian

3.1 无法启动

armbian官网,进行烧写还是和之前一样,不过这次用balenaEtcher-Portable-1.14.3居然报错,换了1.18.4就可以,然后插上去通电发现LED蓝灯一直亮着,正常情况下蓝灯应该闪烁。使用的固件是Armbian 23.02 Jammy Gnome,插上串口有如下日志:

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
DDR Version V1.08 20220617
LPDDR4X, 2112MHz
channel[0] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[1] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[2] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[3] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
Manufacturer ID:0xff
CH0 RX Vref:28.7%, TX Vref:20.8%,20.8%
CH1 RX Vref:28.7%, TX Vref:20.8%,18.8%
CH2 RX Vref:26.7%, TX Vref:20.8%,20.8%
CH3 RX Vref:27.7%, TX Vref:20.8%,19.8%
change to F1: 528MHz
change to F2: 1068MHz
change to F3: 1560MHz
change to F0: 2112MHz
LPDDR4X, 2112MHz
channel[0] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[1] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[2] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
channel[3] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=4096MB
Manufacturer ID:0xff
CH0 RX Vref:28.7%, TX Vref:20.8%,20.8%
CH1 RX Vref:28.7%, TX Vref:20.8%,19.8%
CH2 RX Vref:27.7%, TX Vref:19.8%,19.8%
CH3 RX Vref:26.7%, TX Vref:21.8%,20.8%
change to F1: 528MHz
change to F2: 1068MHz
change to F3: 1560MHz
change to F0: 2112MHz
out
INFO: Preloader serial: 2
NOTICE: BL31: v2.3():v2.3-405-gb52c2eadd:derrick.huang
NOTICE: BL31: Built : 11:23:47, Aug 15 2022
INFO: spec: 0x1
INFO: ext 32k is not valid
INFO: GICv3 without legacy support detected.
INFO: ARM GICv3 driver initialized in EL3
INFO: system boots from cpu-hwid-0
INFO: idle_st=0x21fff, pd_st=0x11fff9, repair_st=0xfff70001
INFO: dfs DDR fsp_params[0].freq_mhz= 2112MHz
INFO: dfs DDR fsp_params[1].freq_mhz= 528MHz
INFO: dfs DDR fsp_params[2].freq_mhz= 1068MHz
INFO: dfs DDR fsp_params[3].freq_mhz= 1560MHz
INFO: BL31: Initialising Exception Handling Framework
INFO: BL31: Initializing runtime services
WARNING: No OPTEE provided by BL2 boot loader, Booting device without OPTEE initialization. SMC`s destined for OPTEE will return SMC_UNK
ERROR: Error initializing runtime service opteed_fast
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x200000
INFO: SPSR = 0x3c9

错误原因是BL2 引导加载程序没有提供 OPTEE(可信执行环境)镜像,因此无法初始化 opteed_fast 运行时服务。不知道啥情况- -|,尝试换了个67W头子也没啥用。

最终在这里找到的原因:

1
2
3
4
5
6
7
Armbian has supported u-boot spi image since its initial support for rock5b. If you are using spi flash image from radxa wiki, you will failed to boot armbian because that is not a GPT image.  There are two ways to write the spi flash image from armbian to the spi nor flash:

1, Boot armbian from sdcard or emmc first, and use nand-sata-install to install the u-boot to spi flash.

2, You can download the u-boot deb file from the repo of armbian: https://mirrors.tuna.tsinghua.edu.cn/armbian/pool/main/l/linux-u-boot-rock-5b-legacy/linux-u-boot-legacy-rock-5b_22.08.6_arm64.deb. Extrat it using `dpkg -x linux-u-boot-legacy-rock-5b_22.08.6_arm64.deb`, and find the spi image file `rkspi_loader.img`, and write it to spi flash referring to radxa's wiki: https://wiki.radxa.com/Rock5/install/spi

Then use dd or ether to install armbian image to your NVME SSD.

简而言之就是之前刷SPI的那个img要换一个。也就是下载linux-u-boot-legacy-rock-5b_22.08.6_arm64.deb后解压缩找到里面的rkspi_loader.img,刷进去,操作和上面一样只是Imgae选项改成了这个。然后就可以正常启动了。

3.2 登录

root密码是1234,登录后会提示修改密码,还有些设置,照着说明弄就是。登录后可以看到系统的一些信息,比如内核版本,内存,CPU等等。

3.2.1 连接WIFI

我没有买radxa的那几个模块,而是直接用网件的USB网卡A6210。先插上网线登录后执行nmtui-connect,会弹出UI,选择你的WIFI,输入密码进行连接。然后拔了网线,在路由器看看IP,然后ssh连接。

3.2.2 换源

1
vim  /etc/apt/sources.list

系统默认:

1
2
3
4
5
6
7
8
9
10
11
deb http://ports.ubuntu.com/ jammy main restricted universe multiverse
#deb-src http://ports.ubuntu.com/ jammy main restricted universe multiverse

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

deb http://ports.ubuntu.com/ jammy-updates main restricted universe multiverse
#deb-src http://ports.ubuntu.com/ jammy-updates main restricted universe multiverse

deb http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse
#deb-src http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse

可更换为:

1
2
3
4
5
6
7
8
9
10
11
12
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse

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

3.2.3 配置

armbian有个配置命令:armbian-config,打开一个菜单来进行选择,官方文档有对其详细的描述

我就试了下这些:

  • 安装蓝牙 Network -> BT install (关于蓝牙的其他目录,见这里)
  • 修改主机名 Personal -> Hostname
  • 测试 software - >Benchmarking , 运行结果:http://ix.io/4wJO

4 软件

4.1 安装conda

  • 下载安装包

    1
    2
    3
    dpkg --print-architecture
    arm64
    weget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-aarch64.sh

    需要用新版本,直接这里面找

  • 安装

    1
    2
    3
    4
    5
    6
    7
    8
    chmod +x Anaconda3-2023.03-1-Linux-aarch64.sh
    ./Anaconda3-2023.03-1-Linux-aarch64.sh
    Do you accept the license terms? [yes|no]
    yes

    Do you wish the installer to initialize Anaconda3
    by running conda init? [yes|no]
    yes
  • 检测

    1
    2
    3
    source ~/.bashrc
    conda -V
    conda 23.3.1

4.2 安装docker

  • 删除旧安装(可选)

    1
    apt remove docker docker-engine docker.io containerd runc
  • 安装依赖(我这系统是默认安装了的)

    1
    apt install ca-certificates curl gnupg
  • 信任 Docker 的 GPG 公钥并添加仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    创建存放GPG公钥的目录
    install -m 0755 -d /etc/apt/keyrings
    下载公钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    # 将Docker软件仓库的地址和版本信息写入到 /etc/apt/sources.list.d/docker.list 文件中
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    # 可以查看以下
    cat /etc/apt/sources.list.d/docker.list
  • 安装

    1
    2
    apt update
    apt install docker-ce
  • 测试

    1
    docker run hello-world

4.3 远程桌面

1
armbian-config

然后点击software->RDP安装。

然后使用windows的远程桌面连接,WIN+R,输入mstsc回车,填写ip地址进行连接

4.4 安装nodejs

下载软件包linux armv8,通过命令cat /proc/cpuinfo查看CPU architecture是8,所有下载armv8版本的。

1
2
wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-arm64.tar.xz
tar -xvf node-v18.16.0-linux-arm64.tar.xz

然后创建软链接

1
2
ln -s /root/node-v18.16.0-linux-arm64/bin/node /usr/local/bin/node
ln -s /root/node-v18.16.0-linux-arm64/bin/npm /usr/local/bin/npm

测试

1
2
3
4
node -v
v18.16.0
npm -v
9.5.1

4.5 安装openwrt

首先确定IP,我这里有线连接rock的路由地址是192.168.2.1,rock有线口的地址是192.168.2.234

  • 开启混淆模式,也即网络接口会接收处理通过该接口的所有数据包,而不仅仅是目前地址是自己的数据包

    1
    2
    3
    4
    # 查看网口的名字
    netstat -i
    # 开启混淆模式
    sudo ip link set enP4p65s0 promisc on
  • 创建一个docker网络

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # -d macvlan:指定使用 "macvlan" 网络驱动程序。"macvlan" 允许将容器连接到物理网络,并为每个容器分配一个唯一的 MAC 地址。简而言之就是让容器模拟成了一个实体识别。
    # --subnet=192.168.2.0/24:该地址是你准备将容器扔到什么网络环境中,这里我扔到了路由器下
    # --gateway=192.168.2.1:指定网络的网关地址,该网络环境的网关就是路由器了
    # -o parent=enP4p65s0:指定父网络接口。这表示该 Docker 网络将使用主机上的 "enP4p65s0" 接口作为物理网络连接。
    # macvlan:指定要创建的 Docker 网络的名称。
    docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=enP4p65s0 macnet

    # 查看结果
    sudo docker network ls
  • 创建容器

    1
    docker run -d --name=unifreq-openwrt-aarch64 --restart=unless-stopped --network=macnet --privileged --ip=192.168.2.22 unifreq/openwrt-aarch64:latest
  • 查看修改容器网络环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo docker exec unifreq-openwrt-aarch64 ifconfig

    br-lan Link encap:Ethernet HWaddr 02:42:C0:A8:02:16
    inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:126 errors:0 dropped:0 overruns:0 frame:0
    TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:14103 (13.7 KiB) TX bytes:5112 (4.9 KiB)

    修改新的lan地址:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker exec -it unifreq-openwrt-aarch64 bash   
    vim /etc/config/network

    config interface 'lan'
    option type 'bridge'
    option ifname 'eth0'
    option proto 'static'
    option ipaddr '192.168.22.1'
    option netmask '255.255.255.0'
    option dns '8.8.8.8'
    option ip6assign '60'
  • 修改地址

    1
    2
    docker exec unifreq-openwrt-aarch64 sed -e "s/10.1.1.1/10.1.1.11/" -i /etc/config/network
    docker restart unifreq-openwrt-aarch64
  • 然后通过armbian-config把wifi改成ac模式(network->Hostapd)

5 使用NPU跑模型

将其他类型模型转化为rknn

工具和文档例子全在rknn-toolkit2仓库中。全部克隆下来大概有1G,但其中600M都是git文件,嫌慢直接下需要的文件就行了。需要运行在x86_64平台上,可以用uname -m命令看看。

  • bash进入windows的wsl2子系统ubuntu

  • 安装依赖

    1
    sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
  • 创建进入conda环境

    1
    2
    conda create -n rknn python=3.10
    conda activate rknn
  • 继续安装依赖,目录切换到rknn-toolkit2/doc下

    1
    2
    python -m pip install --upgrade pip
    pip install -r requirements_cp310-1.5.0.txt
  • 安装软件,在packages目录下

    1
    pip install rknn_toolkit2-1.5.0+1fa95b5c-cp310-cp310-linux_x86_64.whl
  • 测试

    1
    from rknn.api import RKNN
  • 转化模型,以exampales/onnx/yolov5为例,打开里面test.py,给rknn.config添加一个参数target_platform。API可以在doc的文件夹里的用户手册中找到

    1
    rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]],target_platform='rk3588')

    运行test.py,目录下会生成一堆东西,其中yolov5s.rknn是转化后模型,result.jpg是推理结果

用rknpu2在rknn上跑模型

android

官网的镜像下载地址,目前最新的版本Release Android_rk12.1 version for Radxa ROCK 5B不支持nvme,可以直接通过etcher烧入到SD卡中,插上后,设备会优先以SD卡启动。不过还有个总所周知,但是也没解决的问题,有些卡启动不了,我手上这张也是,于是只能找个支持nvme的旧版本。

这次不用etcher,根据发布的版本说明,使用RKDevTool,和之前一样,打开软件,安装maskrom button,插上线。如果使用下载解压后的update.img进行升级。

电视盒子

这里使用三方系统,有SD卡和nvme版,文章中下载的固件解压需要密码,单独私聊作者索取。

sd固件通过etcher烧录,nvme固件通过RKDevTool烧录

SD固件目前使用测试两周,出现过重启所以配置还原的情况,在更换三星SD卡后没再出现,之后使用未发现其他问题。

在安装A8模块后,实际能使用的只有WIFI,蓝牙无法使用

其他文章


rock5B笔记
https://blog.kala.love/posts/5a77ae14/
作者
久远·卡拉
发布于
2023年5月16日
许可协议