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 |
|
错误原因是BL2 引导加载程序没有提供 OPTEE(可信执行环境)镜像,因此无法初始化 opteed_fast 运行时服务。不知道啥情况- -|,尝试换了个67W头子也没啥用。
最终在这里找到的原因:
1 |
|
简而言之就是之前刷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 |
|
系统默认:
1 |
|
可更换为:
1 |
|
3.2.3 配置
armbian有个配置命令:armbian-config,打开一个菜单来进行选择,官方文档有对其详细的描述
我就试了下这些:
- 安装蓝牙 Network -> BT install (关于蓝牙的其他目录,见这里)
- 修改主机名 Personal -> Hostname
- 测试 software - >Benchmarking , 运行结果:http://ix.io/4wJO
4 软件
4.1 安装conda
下载安装包
1
2
3dpkg --print-architecture
arm64
weget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-aarch64.sh需要用新版本,直接这里面找
安装
1
2
3
4
5
6
7
8chmod +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
3source ~/.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
2apt update
apt install docker-ce测试
1
docker run hello-world
4.3 远程桌面
1 |
|
然后点击software->RDP安装。
然后使用windows的远程桌面连接,WIN+R,输入mstsc回车,填写ip地址进行连接
4.4 安装nodejs
下载软件包linux armv8,通过命令cat /proc/cpuinfo查看CPU architecture是8,所有下载armv8版本的。
1
2wget 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
2ln -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
4node -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
9sudo 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
11docker 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
2docker 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
2conda create -n rknn python=3.10
conda activate rknn继续安装依赖,目录切换到rknn-toolkit2/doc下
1
2python -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,蓝牙无法使用