Orange Pi 5 Ultra
Orange Pi 5 Ultra的基本特性
什么是 Orange Pi 5 Ultra
Orange Pi 5 Ultra采用了瑞芯微RK3588新一代八核64位ARM处理器,具体为四核A76和四核A55,采用的三星8nm LP制程工艺,大核主频最高可达2.4GHz,集成ARM Mali-G610 MP4 GPU,内嵌高性能3D和2D图像加速模块,内置高达6 Tops算力的AI加速器NPU,拥有4GB/8GB/16GB(LPDDR5)内存,具有高达8K显示处理能力。
Orange Pi 5 Ultra引出了相当丰富的接口,包括HDMI输出、HDMI输入、Wi-Fi6、M.2 M-key PCIe3.0x4、2.5G网口、USB2.0、USB3.1接口和40pin扩展排针等。可广泛适用于高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。
Orange Pi 5 Ultra支持Orange Pi 官方研发的操作系统Orange Pi OS,同时,支持Android 13、Debian11、Debian12、Ubuntu20.04和Ubuntu22.04等操作系统。
Orange Pi 5 Ultra的用途
我们可以用它实现:
- 一台Linux桌面计算机。
- 一台Linux网络服务器。
- Android平板。
- Android游戏机等。
当然还有其他更多的功能,依托强大的生态系统以及各式各样的扩展配件,Orange Pi可以帮助用户轻松实现从创意到原型再到批量生产的交付,是创客、梦想家、业余爱好者的理想创意平台。
Orange Pi 5 Ultra的硬件特性
硬件特性介绍 | |
CPU | • Rockchip RK3588 (8nm LP制程)
• 8核64位处理器 • 4核Cortex-A76和4核Cortex-A55大小核架构 • 大核主频最高2.4GHz,小核主频最高1.8GHz |
GPU | • 集成ARM Mali-G610
• OpenGL ES1.1/2.0/3.2、OpenCL 2.2 和 Vulkan 1.2 |
NPU | • 内置高达6 Tops算力的AI加速器NPU
• 支持INT4/INT8/INT16混合运算 |
视频 | • 1 * HDMI 2.1,最大支持8K @60Hz
• 1 * HDMI输入,高达4K@60FPS • 1 * MIPI D-PHY TX 4Lane |
内存 | 4GB/8GB/16GB(LPDDR5) |
摄像头 | • 2 * MIPI CSI 4Lane
• 1 * MIPI D-PHY RX 4Lane |
PMU | RK806-1 |
板载存储 | • eMMC插座,可外接eMMC模块
• 16MB QSPI Nor FLASH • MicroSD (TF) Card插槽 • PCIe3.0x4 M.2 M-KEY (SSD) 插槽 |
以太网 | 1 * PCIe 2.5G 以太网口(RTL8125BG ) |
WIFI+BT | • 板载Wi-Fi 6E+BT 5.3/BLE模块:AP6611
• Wi-Fi接口:SDIO3.0 • BT接口:UART/PCM |
音频 | • 3.5mm 耳机孔音频输入/输出
• 板载MIC输入 • 2 * HDMI输出 |
PCIe M.2 M-KEY | • PCIe 3.0 x 4 lanes,用于接NVMe SSD固态硬盘 |
USB接口 | • 1 * USB3.0支持Device或HOST模式
• 1 * USB3.0 HOST • 2 * USB2.0 HOST |
40pin扩展排针 | 用于扩展UART、PWM、I2C、SPI、CAN和GPIO接口 |
调试串口 | 包含在40PIN扩展口内 |
LED灯 | RGB LED三色指示灯 |
按键 | 1 * MaskROM键,1 * 开关机键 |
供电 | Type-C接口供电 5V/5A |
支持的操作系统 | Orange Pi OS(Droid)、Orange Pi OS(Arch)、Android13、Debian 11、Debian12、Ubuntu20.04和Ubuntu22.04等操作系统 |
外观规格介绍 | |
产品尺寸 | 89mm*56mm |
重量 | 58g |
文件:Orange Pi 5 Ultra-image1. png{width=“0.255 55555555555554in” h eight=“0.27638888 88888889in”}range Pi™ 是 深圳市迅龙软件有 限公司的注册商标 |
Orange Pi 5 Ultra的顶层视图和底层视图
顶层视图:
底层视图:
Orange Pi 5 Ultra的接口详情图
四个定位孔的直径都是2.7mm。
开发板使用介绍
准备需要的配件
TF卡,最小16GB容量(推荐32GB或以上)的class10级或以上的高速闪迪卡。
TF卡读卡器,用于将镜像烧录到TF卡中。
HDMI接口的显示器。
HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示。
注意,如果想接4K或者8K显示器,请确保HDMI线支持4K或者8K视频输出。
10.1寸MIPI屏幕,用于显示开发板的系统界面(此屏幕包括转接板和OPi5Plus/OPi5B/OPi5/OPi5Pro/OPi5Max/OPi5Ultra通用)。
电源适配器,Orange Pi 5 Ultra建议使用5V/5A的Type-C电源供电。
开发板的Type-C电源接口不支持PD协商功能,只支持固定的5V电压输入。
USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板。
USB摄像头。
5V的散热风扇。如下图所示,开发板上有用于接散热风扇的接口,接口规格为2pin 1.25mm间距。
开发板上的风扇可以通过PWM来调节转速和开关。
百兆或者千兆网线,用于将开发板连接到因特网。
USB2.0公对公数据线,用于烧录镜像和使用ADB等功能。
1300万MIPI接口的OV13850摄像头。
1300万MIPI接口的OV13855摄像头。
3.3V的USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑。
安装有Ubuntu和Windows操作系统的个人电脑。
1 | Ubuntu22.04 PC | 可选,用于编译Linux源码 |
2 | Windows PC | 用于烧录Android和Linux镜像 |
下载开发板的镜像和相关的资料
- 中文版资料的下载网址为:
英文版资料的下载网址为:
资料主要包含
Android源码:保存在百度云盘和谷歌网盘上。
Linux源码:保存在Github上。
用户手册和原理图:保存在百度云盘和谷歌网盘上。
官方工具:主要包括开发板使用过程中需要用到的软件。
Android镜像:保存在百度云盘和谷歌网盘上。
Ubuntu镜像:保存在百度云盘和谷歌网盘上。
Debian镜像:保存在百度云盘和谷歌网盘上。
Orange Pi OS镜像:保存在百度云盘和谷歌网盘上。
OpenWRT镜像:保存在百度云盘和谷歌网盘上。
基于Windows PC将Linux镜像烧写到TF卡的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像。
使用balenaEtcher烧录Linux镜像的方法
- 首先准备一张16GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡。
- 然后使用读卡器把TF卡插入电脑。
- 从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上。
- 然后下载Linux镜像的烧录软件——balenaEtcher,下载地址为:
- 进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方。
然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用。
如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示:
打开balenaEtcher时如果提示下面的错误:
请选择balenaEtcher后点击右键,然后选择以管理员身份运行。
使用balenaEtcher烧录Linux镜像的具体步骤如下所示:
balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中。
Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验。
成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了。
使用RKDevTool烧录Linux镜像到TF卡中的方法
首先需要准备一根品质良好的USB2.0公对公数据线。
还需要准备一张16GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡。
然后将TF卡插入开发板的卡槽中。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和MiniLoader以及烧录工具RKDevTool_Release_v3.15.zip。
在Orange Pi的资料下载页面首先选择官方工具,然后进入下面的文件夹中。
然后下载下面的所有文件。
注意,“MiniLoader-烧录Linux镜像才需要用到的东西”文件夹下文简称为MiniLoader文件夹。
然后从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录Linux镜像到TF卡中。
首先通过USB公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
然后插入TF卡到开发板,并确保开发板没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后将鼠标光标放在下面的这片区域中。
然后点击鼠标右键会弹出下图所示的选择界面。
然后选择导入配置选项。
然后选择前面下载的MiniLoader文件夹中的rk3588_linux_tfcard.cfg配置文件,再点击打开。
然后点击确定。
然后点击下图所示的位置。
再选择前面下载的MiniLoader文件夹中MiniLoaderAll.bin,再点击打开。
然后点击下图所示的位置。
然后选择想要烧录的linux镜像的路径,再点击打开。
在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。
然后请勾选上强制按地址写选项。
再点击执行按钮就会开始烧录linux镜像到开发板的tf卡中。
linux镜像烧录完后的显示log如下图所示:
烧录完linux镜像到tf卡中后,linux系统会自动启动。
基于Ubuntu PC将Linux镜像烧写到TF卡的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像,Ubuntu PC指的是安装了Ubuntu系统的个人电脑。
- 首先准备一张16GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡。
- 然后使用读卡器把TF卡插入电脑。
- 下载balenaEtcher软件,下载地址为:
- 进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方。
然后选择下载Linux版本的软件即可。
从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上。
注意,如果下载的是OpenWRT镜像,在OpenWRT镜像的下载链接中会看到下面两种类型的镜像,请选择”TF卡、eMMC和NVME SSD启动镜像”文件夹中的镜像文件。
7z结尾的压缩包的解压命令如下所示:
test@test:~$ 7z x orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z
test@test:~$ ls orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.*
orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.sha #校验和文件
orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img #镜像文件
解压镜像后可以先用sha256sum -c *.sha命令计算下校验和是否正确,如果提示成功说明下载的镜像没有错,可以放心的烧录到TF卡,如果提示校验和不匹配说明下载的镜像有问题,请尝试重新下载。
test@test:~$ sha256sum -c *.sha
orangepi5ultra_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img: OK
然后在Ubuntu PC的图形界面双击balenaEtcher-1.5.109-x64.AppImage即可打开balenaEtcher(无需安装),balenaEtcher打开后的界面显示如下图所示。
使用balenaEtcher烧录Linux镜像的具体步骤如下所示:
balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中。
Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验。
成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了。
烧录Linux镜像到eMMC中的方法
使用RKDevTool烧录Linux镜像到eMMC中的方法
注意,下面所有的操作都是在Windows电脑中进行的。
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像。
开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:
还需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和MiniLoader以及烧录工具RKDevTool_Release_v3.15.zip。
在Orange Pi的资料下载页面首先选择官方工具,然后进入下面的文件夹中。
然后下载下面的所有文件。
注意,“MiniLoader-烧录Linux镜像才需要用到的东西”文件夹下文简称为MiniLoader文件夹。
然后从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录Linux镜像到eMMC中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
确保开发板没有插入TF卡,没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后将鼠标光标放在下面的这片区域中。
然后点击鼠标右键会弹出下图所示的选择界面。
然后选择导入配置选项。
然后选择前面下载的MiniLoader文件夹中的rk3588_linux_emmc.cfg配置文件,再点击打开。
然后点击确定。
然后点击下图所示的位置。
再选择前面下载的MiniLoader文件夹中MiniLoaderAll.bin,再点击打开。
然后点击下图所示的位置。
然后选择想要烧录的linux镜像的路径,再点击打开。
在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。
然后请勾选上强制按地址写选项。
再点击执行按钮就会开始烧录linux镜像到开发板的eMMC中。
linux镜像烧录完后的显示log如下图所示:
烧录完linux镜像到eMMC中后,linux系统会自动启动。
使用dd命令烧录Linux镜像到eMMC中的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像。
开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:
使用dd命令烧录linux镜像到eMMC中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见基于Windows PC将Linux镜像烧录到TF卡的方法和基于Ubuntu PC将Linux镜像烧录到TF卡的方法两小节的说明。
使用TF卡启动linux系统后,我们首先将解压后的linux镜像文件(从官网下载的Debian、Ubuntu镜像或者OPi Arch镜像)上传到TF卡中。上传linux镜像文件到开发板中的方法请参考上传文件到开发板Linux系统中的方法小节的说明。
上传完镜像到开发板的linux系统中后,我们再在开发板linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的linux镜像存放在/home/orangepi/Desktop目录下了,然后进入/home/orangepi/Desktop目录就能看到上传的镜像文件了。
orangepi@orangepi:~$ cd /home/orangepi/Desktop
orangepi@orangepi:~/Desktop$ ls
orangepi5ultra_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img
怎么进入开发板linux系统的命令行?
- 使用串口登录终端的方法请参考调试串口的使用方法一小节的说明。
- 使用ssh远程登录linux系统请参考SSH远程登录开发板一小节的说明。
- 如果接了HDMI、LCD等显示屏幕,可以在桌面中打开一个命令行终端。
接下来,我们先使用下面的命令确认下eMMC的设备节点。
orangepi@orangepi:~/Desktop$ ls /dev/mmcblk*boot0 | cut -c1-12
/dev/mmcblk1
然后我们可以使用dd命令清空下eMMC,注意of=参数后面请填入上面命令输出的结果。
orangepi@orangepi:~/Desktop$ sudo dd bs=1M if=/dev/zero of=/dev/mmcblk1 count=1000 status=progress
orangepi@orangepi:~/Desktop$ sudo sync
然后就可以使用dd命令烧录开发板的linux镜像到eMMC中。
下面的命令中 if= 参数后面是要填写linux镜像存放的完整路径+Linux镜像的名字(比如/home/orangepi/Desktop/Linux镜像的名字)。因为上面我们已经进入linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。
下面命令中的linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。
sudo dd bs=1M if=orangepi5ultra_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/mmcblk1 status=progress
sudo sync
注意,如果上传的是 .7z或者.xz 结尾linux镜像压缩文件,使用dd命令烧录前请记得先解压。
dd命令的所有参数的详细说明和更多用法可以在linux系统中执行man dd命令来查看。
当成功烧录开发板的linux镜像到eMMC后,此时就可以使用poweroff命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动eMMC中的linux系统了。
烧写Linux镜像到SPIFlash+NVMe SSD中的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像。
注意,下面所有的操作都是在Windows电脑中进行的。
使用RKDevTool烧录的方法
首先需要准备一个NVMe SSD固态硬盘,开发板M.2插槽PCIe接口的规格为PCIe3.0x4。
然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好。
SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
然后需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和MiniLoader以及烧录工具RKDevTool_Release_v3.15.zip。
在Orange Pi的资料下载页面首先选择官方工具,然后进入下面的文件夹中。
然后下载下面的所有文件。
注意,“MiniLoader-烧录Linux镜像才需要用到的东西”文件夹下文简称为MiniLoader文件夹。
然后从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录Linux镜像到SSD中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
确保开发板没有连接电源和插入TF卡。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后将鼠标光标放在下面的这片区域中。
然后点击鼠标右键会弹出下图所示的选择界面。
然后选择导入配置选项。
然后进入前面下载的MiniLoader文件夹中,然后选择rk3588_linux_pcie.cfg配置文件,再点击打开。
然后点击确定。
然后点击下图所示的位置。
再选择前面下载的MiniLoader文件夹中MiniLoaderAll.bin,再点击打开。
然后点击下图所示的位置。
然后进入前面下载的MiniLoader文件夹中,再选择rkspi_loader.img,再点击打开。
然后点击下图所示的位置。
然后选择想要烧录的linux镜像的路径,再点击打开。
在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。
然后请勾选上强制按地址写选项。
再点击执行按钮就会开始烧录linux镜像到SSD中。
linux镜像烧录完后的显示log如下图所示:
如果烧录有问题,请先清空下SPIFlash然后再烧录试下。清空SPIFlash的方法请参考下使用RKDevTool清空SPIFlash的方法一小节的说明。
镜像烧录完后会自动启动SPIFlash+PCIe SSD中的linux系统,如果没有正常启动,请重新上电试下。
使用dd命令烧录的方法
首先需要准备一个NVMe SSD固态硬盘,开发板M.2插槽PCIe接口的规格为PCIe3.0x4。
然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好。
SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
烧录linux镜像到SPIFlash+NVMe SSD中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见基于Windows PC将Linux镜像烧写到TF卡的方法和基于Ubuntu PC将Linux镜像烧写到TF卡的方法两小节的说明。
使用TF卡启动linux系统后,我们首先烧录u-boot镜像到SPI Flash中。
首先运行下nand-sata-install,普通用户记得加sudo权限。
orangepi@orangepi:~$ sudo nand-sata-install
然后选择7 Install/Update ther bootloader on SPI Flash。
- 然后选择<Yes>。
- 然后请耐心等待烧录完成,烧录完成后显示如下所示(左下角会显示一个Done):
OPi OS Arch系统中没有nand-sata-install这个脚本,请使用下面的命令将u-boot镜像到SPI Flash中:
[orangepi@orangepi ~]$ sudo dd if=/boot/rkspi_loader.img of=/dev/mtdblock0
然后将linux镜像文件(从官网下载的Debian、Ubuntu或者OpenWRT镜像)上传到TF卡中。上传linux镜像文件到开发板中的方法请参考上传文件到开发板Linux系统中的方法小节的说明。
注意,如果下载的是OpenWRT镜像,在OpenWRT镜像的下载链接中会看到下面三种类型的镜像,请选择”TF卡、eMMC和NVME SSD启动镜像”文件夹中的镜像文件。
上传完镜像到开发板的linux系统中后,我们再在开发板linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的linux镜像存放在/home/orangepi/Desktop目录下了,然后进入/home/orangepi/Desktop目录就能看到上传的镜像文件了。
orangepi@orangepi:~$ cd /home/orangepi/Desktop
orangepi@orangepi:~/Desktop$ ls
orangepi5ultra_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img
怎么进入开发板linux系统的命令行?
使用串口登录终端的方法请参考调试串口的使用方法一小节的说明。
使用ssh远程登录linux系统请参考SSH远程登录开发板一小节的说明。
如果接了HDMI、LCD等显示屏幕,可以在桌面中打开一个命令行终端。
接下来,我们先确认下NVMe SSD已经被开发板的linux正常识别了。如果NVMe SSD正常识别了的话,使用sudo fdisk -l命令就能看到nvme相关的信息。
orangepi@orangepi:~/Desktop$ sudo fdisk -l | grep "nvme0n1"
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
使用lspci命令可以看到一个NVMe相关的PCI设备。
orangepi@orangepi:~/Desktop$ lspci
0004:40:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0004:41:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
然后我们可以使用dd命令清空下NVMe SSD(可选)。
orangepi@orangepi5ultra:~/Desktop$ sudo dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress
orangepi@orangepi5ultra:~/Desktop$ sudo sync
然后就可以使用dd命令烧录开发板的linux镜像到NVMe SSD中。
下面的命令中 if= 参数后面是要填写linux镜像存放的完整路径+Linux镜像的名字(比如/home/orangepi/Desktop/Linux镜像的名字)。因为上面我们已经进入linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。
下面命令中的linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。
sudo dd bs=1M if=orangepi5ultra_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/nvme0n1 status=progress
sudo sync
注意,如果上传的是 .7z或者.xz 或者.gz结尾linux镜像压缩文件,使用dd命令烧录前请记得先解压。
dd命令的所有参数的详细说明和更多用法可以在linux系统中执行man dd命令来查看。
当成功烧录开发板的linux镜像到NVMe SSD后,此时就可以使用poweroff命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动SPIFlash+NVMe SSD中的linux系统了。
启动NVMe SSD中的系统后,使用df -h命令可以看到实际的硬盘容量。
128GB NVMe SSD。
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 8.0K 3.8G 1% /dev
tmpfs 769M 1.4M 768M 1% /run
/dev/nvme0n1p2 118G 5.8G 111G 5% /
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.8G 16K 3.8G 1% /tmp
/dev/nvme0n1p1 256M 90M 166M 36% /boot
/dev/zram1 194M 9.9M 170M 6% /var/log
tmpfs 769M 60K 769M 1% /run/user/1000
tmpfs 769M 48K 769M 1% /run/user/0
2TB NVMe SSD。
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 8.0K 3.8G 1% /dev
tmpfs 769M 1.4M 768M 1% /run
/dev/nvme0n1p2 1.9T 4.1G 1.8T 1% /
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/zram2 3.7G 76K 3.5G 1% /tmp
/dev/nvme0n1p1 256M 90M 166M 36% /boot
/dev/zram1 194M 15M 165M 9% /var/log
tmpfs 769M 60K 769M 1% /run/user/1000
tmpfs 769M 48K 769M 1% /run/user/0
当TF卡和NVMe SSD中烧录了一模一样的系统,如果TF卡和NVMe SSD都插在了开发板中,此时上电启动开发板,u-boot会优先启动TF卡中的系统。但由于TF卡和NVMe SSD中的系统一模一样,所以两个存储设备中的/boot分区和rootfs分区的UUID也一样,这样会导致TF卡启动的时候有可能会加载了NVMe SSD中的分区。运行下面的脚本可以解决这个问题。
orangepi@orangepi:~$ sudo fix_mmc_ssd.sh
一模一样的系统是指镜像名一字不差的意思。就算都是Debian11系统,版本不同也是不同的。
OPi OS Arch系统中没有fix_mmc_ssd.sh这个脚本。
使用balenaEtcher软件烧录的方法
OPi OS Arch系统和OpenWRT系统请不要使用这种方法。
首先需要准备一个NVMe SSD固态硬盘,开发板M.2插槽PCIe接口的规格为PCIe3.0x4。
然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好。
请确保开发板已经贴有SPI Flash,SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
烧录linux镜像到SPIFlash+NVMe SSD中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见基于Windows PC将Linux镜像烧写到TF卡的方法和基于Ubuntu PC将Linux镜像烧写到TF卡的方法两小节的说明。
启动进入TF卡中的linux系统后,请先确认下NVMe SSD已经被开发板的linux正常识别了。如果NVMe SSD正常识别了的话,使用sudo fdisk -l命令就能看到nvme相关的信息。
orangepi@orangepi:~/Desktop$ sudo fdisk -l | grep "nvme0n1"
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
使用lspci命令可以看到一个NVMe相关的PCI设备。
orangepi@orangepi:~/Desktop$ lspci
0004:40:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0004:41:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
linux镜像中已经预装了balenaEtcher,打开方法如下所示:
如果没有预装,balenaEtcher arm64版本的下载安装方法请参考下载安装arm64版本balenaEtcher的方法小节的说明。
- balenaEtcher打开后的界面如下所示:
使用balenaEtcher烧录u-boot到开发板SPI Flash中的方法如下所示:
- 首先打开balenaEtcher软件点击Flash from file。
- 然后进入/usr/lib/linux-u-boot-legacy-orangepi5ultra_1.0.0_arm64/目录,再选择rkspi_loader.img,再点击Open打开。
- 然后点击Show 2 hidden打开更多存储设备的选项。
- 然后选择SPI Flash的设备名/dev/mtdblock0,然后点击Select。
- 然后点击Flash。
- 然后点击Yes, I’m sure。
- 然后输入开发板linux系统的密码orangepi,就会开始烧录u-boot镜像到SPI Flash中。
- 烧录过程的显示如下所示:
- 烧录完成后的显示如下所示:
烧录TF卡中的linux系统到NVMe SSD中的方法(此方法相当于将TF卡中的系统克隆到NVMe SSD)。
- 首先点击Clone drive。
- 然后选择TF卡的设备名/dev/mmcblk1。
- 打开TF卡后的界面如下所示:
- 然后点击Select target。
- 然后点击Show 2 hidden打开更多存储设备的选项。
- 然后选择NVMe SSD的设备名/dev/nvme0n1,然后点击Select。
- 然后点击Flash。
- 然后点击Yes, I’m sure。
- 然后输入开发板linux系统的密码orangepi,就会开始烧录linux镜像到SSD中。
- 烧录过程的显示如下所示:
- 烧录完成后的显示如下所示:
然后需要扩容下NVMe SSD中rootfs分区的容量,步骤如下所示:
首先打开GParted,如果系统没有预装Gparted,请使用apt命令安装下。
orangepi@orangepi:~$ sudo apt-get install -y gparted
- 然后输入linux系统的密码orangepi,再点击Authenticate。
- 选择NVMe SSD后的显示界面如下所所示:
- 然后选择/dev/nvme0n1p2分区,再击点击右键,再选择Resize/Move。
- 此时就可以使用sudo poweroff命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动SPIFlash+NVMe SSD中的linux系统了。
第9) 步是克隆TF卡中的系统到NMVe SSD中,我们还可以直接烧录linux镜像文件到NVMe SSD中,这里大概说下步骤:
烧写Linux镜像到SPIFlash+USB存储设备中的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi OS Arch这样的Linux发行版镜像。
- 首先需要准备一个USB存储设备,比如一个U盘。
- 然后请参考基于Windows PC将Linux镜像烧写到TF卡的方法和基于Ubuntu PC将Linux镜像烧写到TF卡的方法两小节的说明将Linux镜像烧录到USB存储设备中。烧录Linux镜像到USB存储设备中和烧录Linux镜像到TF卡的方法是没有任何区别的(当TF卡插入读卡器后,其实此时的读卡器就相当于一个U盘了)。
- 然后把烧录好Linux系统的USB存储设备插入开发板的USB接口中,注意,只有下图所示的2个USB2.0接口才支持启动Linux系统,蓝色USB3.0接口不支持。
SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
烧录u-boot镜像到SPIFlash中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见基于Windows PC将Linux镜像烧写到TF卡的方法和基于Ubuntu PC将Linux镜像烧写到TF卡的方法两小节的说明。
使用TF卡启动linux系统后,就可以烧录u-boot镜像到SPI Flash中了。
首先运行下nand-sata-install,普通用户记得加sudo权限。
orangepi@orangepi:~$ sudo nand-sata-install
然后选择7 Install/Update ther bootloader on SPI Flash。
- 然后选择<Yes>。
- 然后请耐心等待烧录完成,烧录完成后显示如下所示(左下角会显示一个Done):
OPi OS Arch系统中没有nand-sata-install这个脚本,请使用下面的命令将u-boot镜像到SPI Flash中:
[orangepi@orangepi ~]$ sudo dd if=/boot/rkspi_loader.img of=/dev/mtdblock0
此时就可以使用poweroff命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动SPIFlash+USB存储设备中的linux系统了。
启动USB存储设备中的系统后,使用df -h命令可以看到USB存储设备实际的容量大小。
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 8.0K 3.8G 1% /dev
tmpfs 769M 588K 769M 1% /run
/dev/sda2 15G 1.6G 13G 11% /
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/zram2 3.7G 60K 3.5G 1% /tmp
/dev/sda1 256M 111M 146M 44% /boot
/dev/zram1 194M 9.0M 171M 5% /var/log
tmpfs 769M 0 769M 0% /run/user/1000
烧录Android镜像到TF卡中的方法
使用RKDevTool烧录的方法
首先需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和烧录工具RKDevTool_Release_v3.15.zip。
然后从Orange Pi的资料下载页面下载Android的镜像,打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择TF卡和eMMC启动镜像文件夹中的镜像进行下载。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”
然后开始烧录Android镜像到TF卡中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
然后插入TF卡到开发板,并确保开发板没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后请选择高级功能。
然后点击下图所示的位置。
再选择前面下载的MiniLoader文件夹中的MiniLoaderAll.bin,再点击打开。
然后点击下载。
下载完MiniLoaderAll.bin后的显示如下图所示:
然后选择存储设备为SD,再点击切换存储。
切换成功的显示如下图所示:
然后点击烧录工具的”升级固件”一栏。
接着点击”固件”按钮选择需要烧录的Android镜像的路径。
最后点击”升级”按钮就会开始烧录,烧录过程中的log如下图所示。烧录完成后Android系统会自动启动。
烧录Android镜像到eMMC中的方法
使用RKDevTool烧录的方法
注意,下面所有的操作都是在Windows电脑中进行的。
开发板预留了eMMC的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。
eMMC模块和插入开发板的方法如下所示:
还需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和烧录工具RKDevTool_Release_v3.15.zip。
然后从Orange Pi的资料下载页面下载Android的镜像,打开Android镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择TF卡和eMMC启动镜像文件夹中的镜像进行下载。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录安卓镜像到eMMC中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
确保开发板没有连接电源和插入TF卡。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后点击烧录工具的”升级固件”一栏。
接着点击”固件”按钮选择需要烧录的Android镜像的路径。
最后点击”升级”按钮就会开始烧录,烧录过程中的log如下图所示。烧录完成后Android系统会自动启动。
烧录Android镜像到SPIFlash+NVMe SSD中的方法
注意,下面所有的操作都是在Windows电脑中进行的。
首先需要准备一个NVMe SSD固态硬盘。
然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好。
请确保开发板已经贴有SPI Flash,SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
还需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和烧录工具RKDevTool_Release_v3.15.zip。
然后下载Android的镜像,打开Android镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择SPIFlash-NVME SSD文件夹中的镜像进行下载。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录Android镜像到SPIFlash+NVMe SSD中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
确保开发板没有插入TF卡,没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后点击烧录工具的”升级固件”一栏。
接着点击”固件”按钮选择需要烧录的Android镜像。
最后点击”升级”按钮就会开始烧录,烧录的过程如下图所示,可以看到,首先会烧录固件到SPIFlash中,然后烧录固件到PCIE中。烧录完成后Android系统会自动启动。
烧录Orange Pi OS (Droid)镜像到TF卡中的方法
注意,下面所有的操作都是在Windows电脑中进行的。
首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为class10或以上,建议使用闪迪等品牌的TF卡。
然后使用读卡器把TF卡插入电脑。
然后从Orange Pi的资料下载页面下载SDDiskTool烧写工具,请确保SDDiskTool工具的版本为最新的v1.72。
然后从Orange Pi的资料下载页面下载Orange Pi OS (Droid)的镜像。
然后使用解压软件解压下载的Orange Pi OS (Droid)镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Orange Pi OS (Droid)镜像文件,大小在1GB以上。
然后使用解压软件解压SDDiskTool_v1.72.zip,此软件无需安装,在解压后的文件夹中找到SD_Firmware_Tool.exe打开即可。
打开SDDiskTool后,如果TF卡识别正常,会在”选择可移动磁盘设备”一栏中显示插入的磁盘设备,请务必确认显示的磁盘设备和你想烧录的TF卡的盘符是一致的,如果没有显示可以尝试拔插下TF卡。
确认完盘符后,可以先格式化下TF卡,点击SDDiskTool中的恢复磁盘按钮即可,也可使用前面提到的SD Card Formatter进行TF卡的格式化。
然后开始将Orange Pi OS (Droid)镜像写入TF卡。
烧录完后即可退出SDDiskTool软件,然后就可以把TF卡从电脑中拔出来插到开发板中启动了。
烧录Orange Pi OS (Droid)镜像到SPIFlash+NVMe SSD中
注意,下面所有的操作都是在Windows电脑中进行的。
首先需要准备一个NVMe SSD固态硬盘。
然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好。
请确保开发板已经贴有SPI Flash,SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置。
还需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip,烧录工具RKDevTool_Release_v3.15.zip。
然后下载Orange Pi OS (Droid)的镜像。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后开始烧录Orange Pi OS (Droid)镜像到SPIFlash+NVMe SSD中。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB烧录口的位置如下图所示:
确保开发板没有插入TF卡,没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后点击烧录工具的”升级固件”一栏。
接着点击”固件”按钮选择需要烧录的Orange Pi OS (Droid)镜像。
最后点击”升级”按钮就会开始烧录,烧录的过程如下图所示,可以看到,首先会烧录固件到SPIFlash中,然后烧录固件到PCIE中。烧录完成后Orange Pi OS (Droid)系统会自动启动。
使用RKDevTool清空SPIFlash的方法
SPI Flash在开发板上的位置如下图所示:
首先需要准备一根品质良好的USB2.0公对公数据线。
然后从Orange Pi的资料下载页面下载瑞芯微驱动DriverAssitant_v5.12.zip和MiniLoader以及烧录工具RKDevTool_Release_v3.15.zip。
在Orange Pi的资料下载页面首先选择官方工具,然后进入下面的文件夹中。
然后下载下面的所有文件。
注意,“MiniLoader-烧录Linux镜像才需要用到的东西”文件夹下文简称为MiniLoader文件夹。
然后用解压软件解压DriverAssitant_v5.12.zip,再在解压后的文件夹中找到DriverInstall.exe可执行文件并打开即可。
打开DriverInstall.exe后安装瑞芯微驱动的步骤如下所示:
然后解压RKDevTool_Release_v3.15.zip,此软件无需安装,在解压后的文件夹中找到 RKDevTool打开即可。
打开RKDevTool 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”没有发现设备”。
然后就可以开始清空SPI FLASH中的内容。
首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB接口的位置如下图所示:
确保开发板没有插入TF卡,没有连接电源。
然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:
然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了。
如果前面的步骤顺利,此时开发板会进入MASKROM模式,在烧录工具的界面上会提示”发现一个MASKROM设备”。
然后请选择高级功能。
然后点击下图所示的位置。
再选择前面下载的MiniLoader文件夹中的MiniLoaderAll.bin,再点击打开。
然后点击下载。
下载完MiniLoaderAll.bin后的显示如下图所示:
然后选择存储设备为SPINOR。
然后点击切换存储。
然后点击擦除所有就会开始擦除SPIFlash了。
擦除SPIFlash后的显示log如下图所示:
启动香橙派开发板
- 将烧录好镜像的TF卡插入香橙派开发板的TF卡插槽中。如果SPIFlash+NVMe SSD或者eMMC模块已经烧录好镜像了,那么就不需要插入TF卡了,只需确保NVMe SSD或者eMMC模块正常插入到开发板中即可。
- 开发板有HDMI接口,可以通过HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。如果有购买LCD屏幕,也可以使用LCD屏幕来显示开发板的系统界面。
- 接上USB鼠标和键盘,用于控制香橙派开发板。
- 开发板有以太网口,可以插入网线用来上网。
- 连接一个5V/4A或者5V/5A的USB Type-C接口的高品质的电源适配。
切记不要插入电压输出大于5V的电源适配器,会烧坏开发板。
系统上电启动过程中很多不稳定的现象基本都是供电有问题导致的,所以一个靠谱的电源适配器很重要。如果启动过程中发现有不断重启的现象,请更换下电源或者Type-C数据线再试下。
Type-C电源接口是不支持PD协商的。
另外请不要接到电脑的USB接口来给开发板供电。
然后打开电源适配器的开关,如果一切正常,此时HDMI显示器或者LCD屏幕就能看到系统的启动画面了。
如果想通过调试串口查看系统的输出信息,请使用串口线将开发板连接到电脑,串口的连接方法请参看调试串口的使用方法一节。
调试串口的使用方法
调试串口的连接说明
- 首先需要准备一个3.3V的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中。
为了更好的兼容性,推荐使用CH340 USB转TTL模块,请不要使用CP2102、PL2303类型的USB转TTL模块。
购买USB转TTL模块前,请确认模块支持1500000速率的波特率。
开发板的调试串口GND、RXD和TXD引脚的对应关系如下图所示:
USB转TTL模块GND、TXD和RXD引脚需要通过杜邦线连接到开发板的调试串口上。
USB转TTL模块的GND接到开发板的GND上。
USB转TTL模块的RX接到开发板的TX上。
USB转TTL模块的TX接到开发板的RX上。
USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示:
串口的TX和RX是需要交叉连接的,如果不想仔细区分TX和RX的顺序,可以把串口的TX和RX先随便接上,如果测试没有输出再交换下TX和RX的顺序,这样就总有一种顺序是对的
Ubuntu平台调试串口的使用方法
Linux下可以使用的串口调试软件有很多,如putty、minicom等,下面演示putty的使用方法。
首先将USB转TTL模块插入Ubuntu电脑的USB接口,如果USB转TTL模块连接识别正常,在Ubuntu PC的/dev下就可以看到对应的设备节点名,记住这个节点名,后面设置串口软件时会用到。
test@test:~$ ls /dev/ttyUSB*
/dev/ttyUSB0
然后使用下面的命令在Ubuntu PC上安装下putty。
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y putty
然后运行putty,记得加sudo权限。
test@test:~$ sudo putty
执行putty命令后会弹出下面的界面。
首先选择串口的设置界面。
然后设置串口的参数。
在串口的设置界面设置完后,再回到Session界面。
启动开发板后,就能从打开的串口终端中看到系统输出的Log信息了。
Windows平台调试串口的使用方法
Windows下可以使用的串口调试软件有很多,如SecureCRT、MobaXterm等,下面演示MobaXterm的使用方法,这款软件有免费版本,无需购买序列号即可使用。
下载MobaXterm。
下载MobaXterm网址如下:
进入MobaXterm下载网页后点击GET XOBATERM NOW!。
然后选择下载Home版本。
然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用。
下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开。
打开软件后,设置串口连接的步骤如下:
打开会话的设置界面。
选择串口类型。
选择串口的端口号(根据实际的情况选择对应的端口号),如果看不到端口号,请使用360驱动大师扫描安装USB转TTL串口芯片的驱动。
选择串口的波特率为1500000。
最后点击”OK”按钮完成设置。
使用开发板40pin接口中的5v引脚供电说明
我们推荐的开发板的供电方式是使用5V/5A的Type C接口的电源线插到开发板的Type-C电源接口来供电的。如果需要使用40pin接口中的5V引脚来给开发板供电,请确保使用的电源线和电源适配器能满足开发板的供电需求。如果有使用不稳定的情况,请换回Type-C电源供电。
首先需要准备一根下图所示的电源线。
上图所示的电源线在淘宝可以买到,请自行搜索购买。
使用40pin接口中的5V引脚来给开发板供电,电源线的接法如下所示:
Ubuntu/Debian Server和Xfce桌面系统使用说明
本章内容是基于Linux服务器版本的镜像和Xfce桌面版本镜像编写的。
如果使用的是OPi OS Arch镜像,请查看Orange Pi OS Arch系统使用说明一章的内容。
已支持的Linux镜像类型和内核版本
Linux镜像类型 | 内核版本 | 服务器版 | 桌面版 |
Debian 11 - Bullseye | Linux5.10 | 支持 | 支持 |
Debian 12 - Bookworm | Linux5.10 | 支持 | 支持 |
Ubuntu 20.04 - Focal | Linux5.10 | 支持 | 支持 |
Ubuntu 22.04 - Jammy | Linux5.10 | 支持 | 支持 |
Debian 12 - Bookworm | Linux6.1 | 支持 | 支持 |
Ubuntu 22.04 - Jammy | Linux6.1 | 支持 | 支持 |
Linux 5.10系统适配情况
功能 | Debian11 | Debian12 | Ubuntu20.04 | Ubuntu22.04 |
HDMI TX视频 | OK | OK | OK | OK |
HDMI TX音频 | OK | OK | OK | OK |
HDMI RX视频 | OK | OK | OK | OK |
HDMI RX音频 | OK | OK | OK | OK |
USB2.0x2 | OK | OK | OK | OK |
USB3.0x2 | OK | OK | OK | OK |
2.5G网口 | OK | OK | OK | OK |
网口状态灯 | OK | OK | OK | OK |
WIFI | OK | OK | OK | OK |
蓝牙 | OK | OK | OK | OK |
调试串口 | OK | OK | OK | OK |
RTC芯片 | OK | OK | OK | OK |
FAN风扇接口 | OK | OK | OK | OK |
eMMC扩展接口 | OK | OK | OK | OK |
GPIO(40pin) | OK | OK | OK | OK |
UART(40pin) | OK | OK | OK | OK |
SPI(40pin) | OK | OK | OK | OK |
I2C(40pin) | OK | OK | OK | OK |
CAN(40pin) | OK | OK | OK | OK |
PWM(40pin) | OK | OK | OK | OK |
OV13850摄像头 | OK | OK | OK | OK |
OV13855摄像头 | OK | OK | OK | OK |
SPI+NVME启动 | OK | OK | OK | OK |
LCD | OK | OK | OK | OK |
MIC | OK | OK | OK | OK |
耳机播放 | OK | OK | OK | OK |
耳机录音 | OK | OK | OK | OK |
三色LED 灯 | OK | OK | OK | OK |
GPU | OK | OK | OK | OK |
NPU | OK | OK | OK | OK |
VPU | OK | OK | OK | OK |
开关机按键 | OK | OK | OK | OK |
看门狗测试 | OK | OK | OK | OK |
Chromium硬解视频 | OK | OK | OK | OK |
Linux 6.1系统适配情况
功能 | Debian12 | Ubuntu22.04 |
HDMI TX视频 | OK | OK |
HDMI TX音频 | OK | OK |
HDMI RX视频 | OK | OK |
HDMI RX音频 | OK | OK |
USB2.0 x 2 | OK | OK |
USB3.0 x 2 | OK | OK |
千兆网口 | OK | OK |
网口状态灯 | OK | OK |
WIFI | OK | OK |
蓝牙 | OK | OK |
调试串口 | OK | OK |
RTC芯片 | OK | OK |
FAN风扇接口 | OK | OK |
eMMC扩展接口 | OK | OK |
GPIO(40pin) | OK | OK |
UART(40pin) | OK | OK |
SPI(40pin) | OK | OK |
I2C(40pin) | OK | OK |
CAN(40pin) | NO | NO |
PWM(40pin) | OK | OK |
OV13850摄像头 | OK | OK |
OV13855摄像头 | OK | OK |
SPI+NVME启动 | OK | OK |
LCD | OK | OK |
MIC | OK | OK |
耳机播放 | OK | OK |
耳机录音 | OK | OK |
三色LED 灯 | OK | OK |
GPU | OK | OK |
NPU | OK | OK |
VPU | OK | OK |
开关机按键 | OK | OK |
看门狗测试 | OK | OK |
Chromium硬解视频 | OK | OK |
本手册linux命令格式说明
本手册中所有需要在Linux系统中输入的命令都会使用下面的方框框起来。
如下所示,黄色方框里内容表示需要特别注意的内容,这里面的命令除外。
命令前面的提示符类型说明。
命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是linux命令的一部分,所以在linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。
orangepi@orangepi:~$ sudo apt update
root@orangepi:~# vim /boot/boot.cmd
test@test:~$ ssh root@192.168.1.xxx
root@test:~# ls
root@orangepi:~$ 提示符表示这个命令是在开发板的linux系统中输入的, 提示符最后的 $ 表示系统当前用户为普通用户,当执行特权命令时,需要加上sudo。
root@orangepi:~# 提示符表示这个命令是在开发板的linux系统中输入的, 提示符最后的 # 表示系统当前用户为root用户,可以执行任何想要执行的命令。
test@test:~$ 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 $ 表示系统当前用户为普通用户,当执行特权命令时,需要加上sudo。
root@test:~# 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 # 表示系统当前用户为root用户,可以执行任何想要执行的命令。
哪些是需要输入的命令?
如下所示,黑色加粗部分是需要输入的命令,命令下面的是输出的内容(有些命令有输出,有些可能没有输出),这部分内容是不需要输入的。
root@orangepi:~# cat /boot/orangepiEnv.txt
verbosity=7
bootlogo=false
console=serial
如下所示,有些命令一行写不下会放到下一行,只要黑色加粗的部分就都是需要输入的命令。当这些命令输入到一行的时候,每行最后的”\”是需要去掉的,这个不是命令的一部分。另外命令的不同部分都是有空格的,请别漏了。
orangepi@orangepi:~$ echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
linux系统登录说明
linux系统默认登录账号和密码
账号 | 密码 |
root | orangepi |
orangepi | orangepi |
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
当输入密码提示错误,或者ssh连接有问题,请注意,只要使用的是Orange Pi提供的Linux镜像,就请不要怀疑上面的密码不对,而是要找其它的原因。
设置linux系统终端自动登录的方法
linux系统默认就是自动登录终端的,默认登录的用户名是orangepi。
使用下面的命令可以设置root用户自动登录终端。
orangepi@orangepi:~$ sudo auto_login_cli.sh root
使用下面的命令可以禁止自动登录终端。
orangepi@orangepi:~$ sudo auto_login_cli.sh -d
使用下面的命令可以再次设置orangepi用户自动登录终端。
orangepi@orangepi:~$ sudo auto_login_cli.sh orangepi
linux桌面版系统自动登录说明
桌面版系统启动后会自动登录进入桌面,无需输入密码。
运行下面的命令可以禁止桌面版系统自动登录桌面。
orangepi@orangepi:~$ sudo disable_desktop_autologin.sh
然后重启系统就会出现登录对话框,此时需要输入密码才能进入系统。
Linux桌面版系统root用户自动登录的设置方法
执行下面的命令可以设置桌面版系统使用root用户自动登录。
orangepi@orangepi:~$ sudo desktop_login.sh root
然后重启系统,就会自动使用root用户登录桌面了。
注意,如果使用root用户登录桌面系统,是无法使用右上角的pulseaudio来管理音频设备的。
另外请注意这并不是一个bug,因为pulseaudio本来就不允许在root用户下运行。
执行下面的命令可以再次设置桌面版系统使用orangepi用户自动登录。
orangepi@orangepi:~$ sudo desktop_login.sh orangepi
Linux桌面版系统禁用桌面的方法
首先在命令行中输入下面的命令,请记得加sudo权限。
orangepi@orangepi:~$ sudo systemctl disable lightdm.service
然后重启Linux系统就会发现不会显示桌面了。
orangepi@orangepi:~$ sudo reboot
重新打开桌面的步骤如下所示:
首先在命令行中输入下面的命令,请记得加sudo权限。
orangepi@orangepi:~$ sudo systemctl start lightdm.service
orangepi@orangepi:~$ sudo systemctl enable lightdm.service
选择完后显示器就会显示桌面了。
板载LED灯测试说明
开发板上有一个红绿蓝三色灯,所在位置如下图所示:
只要开发板打开了电源,红色的LED灯就会常亮,这是由硬件控制的,软件无法关闭。通过红色的LED灯可以确定开发板的电源是否已正常开启。
绿色和蓝色的的LED灯在内核启动后会一直闪烁,这是由软件控制的。
设置绿灯亮灭和闪烁的方法如下所示:
注意,下面的操作请在root用户下进行。
首先进入绿灯的设置目录。
root@orangepi:~# cd /sys/class/leds/green_led
设置绿灯停止闪烁的命令如下:
root@orangepi:/sys/class/leds/green_led# echo none > trigger
设置绿灯常亮的命令如下:
root@orangepi:/sys/class/leds/green_led# echo default-on > trigger
设置绿灯闪烁的命令如下:
root@orangepi:/sys/class/leds/green_led# echo heartbeat > trigger
使用命令设置蓝灯亮灭和闪烁的方法如下所示:
注意,下面的操作请在root用户下进行。
首先进入蓝灯的设置目录。
root@orangepi:~# cd /sys/class/leds/blue_led
设置蓝灯停止闪烁的命令如下:
root@orangepi:/sys/class/leds/blue_led# echo none > trigger
设置蓝灯常亮的命令如下:
root@orangepi:/sys/class/leds/blue_led# echo default-on > trigger
设置蓝灯闪烁的命令如下:
root@orangepi:/sys/class/leds/blue_led# echo heartbeat > trigger
如果开机后不需要LED灯闪烁,可以使用下面的方法来关闭绿灯和蓝灯。
网络连接测试
以太网口测试
首先将网线的一端插入开发板的以太网接口,网线的另一端接入路由器,并确保网络是畅通的。
系统启动后会通过DHCP自动给以太网卡分配IP地址,不需要其他任何配置。
在开发板的Linux系统中查看IP地址的命令如下所示:
orangepi@orangepi:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enP3p49s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:e0:4c:68:00:0f brd ff:ff:ff:ff:ff:ff
inet 10.31.2.249/16 brd 10.31.255.255 scope global dynamic noprefixroute enP3p49s0
valid_lft 42670sec preferred_lft 42670sec
inet6 fe80::d5aa:9a6:cd41:942e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000
link/ether 50:41:1c:f1:0f:7e brd ff:ff:ff:ff:ff:ff
当使用ifconfig查看IP地址时,如果提示下面的信息,是因为没有加sudo导致的,正确的命令是:sudo ifconfig。
orangepi@orangepi:~$ ifconfig
Command 'ifconfig' is available in the following places
* /sbin/ifconfig
* /usr/sbin/ifconfig
The command could not be located because '/sbin:/usr/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
ifconfig: command not found
开发板启动后查看IP地址有三种方法:
- 接HDMI显示器,然后登录系统使用ip addr show命令查看IP地址。
- 在调试串口终端输入ip addr show命令来查看IP地址。
- 如果没有调试串口,也没有HDMI显示器,还可以通过路由器的管理界面来查看开发板网口的IP地址。不过这种方法经常有人会无法正常看到开发板的IP地址。如果看不到,调试方法如下所示:
首先检查Linux系统是否已经正常启动,如果开发板的三色灯在闪烁了,一般是正常启动了,如果只亮红灯,说明系统都没正常启动;
检查网线有没有插紧,或者换根网线试下;
换个路由器试下(路由器的问题有遇到过很多,比如路由器无法正常分配IP地址,或者已正常分配IP地址但在路由器中看不到);
如果没有路由器可换就只能连接HDMI显示器或者使用调试串口来查看IP地址。
另外需要注意的是开发板DHCP自动分配IP地址是不需要任何设置的。
测试网络连通性的命令如下,ping命令可以通过Ctrl+C快捷键来中断运行。
orangepi@orangepi:~$ ping www.baidu.com -I enP3p49s0
PING www.a.shifen.com (183.2.172.185) from 10.31.2.249 enP3p49s0: 56(84) bytes of data.
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=53 time=39.5 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=53 time=33.1 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=53 time=32.4 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms
WIFI连接测试
请不要通过修改/etc/network/interfaces配置文件的方式来连接WIFI,通过这种方式连接WIFI网络使用会有问题。
服务器版镜像通过命令连接WIFI
当开发板没有连接以太网,没有连接HDMI显示器,只连接了串口时,推荐使用此小节演示的命令来连接WIFI网络。因为nmtui在某些串口软件(如minicom)中只能显示字符,无法正常显示图形界面。当然,如果开发板连接了以太网或者HDMI显示屏,也可以使用此小节演示的命令来连接WIFI网络的。
先登录linux系统,有下面三种方式:
- 如果开发板连接了网线,可以通过ssh远程登录linux系统。
如果开发板连接好了调试串口,可以使用串口终端登录linux系统。
如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统。
首先使用nmcli dev wifi命令扫描周围的WIFI热点。
orangepi@orangepi:~$ nmcli dev wifi
然后使用nmcli 命令连接扫描到的WIFI热点,其中:
wifi_name需要换成想连接的WIFI热点的名字。
wifi_passwd需要换成想连接的WIFI热点的密码。
orangepi@orangepi:~$ sudo nmcli dev wifi connect wifi_name password wifi_passwd
Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.
通过ip addr show wlan0命令可以查看wifi的IP地址。
orangepi@orangepi:~$ ip addr show wlan0
11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 259192sec preferred_lft 259192sec
inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute
valid_lft 259192sec preferred_lft 172792sec
inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用ping命令可以测试wifi网络的连通性,ping命令可以通过Ctrl+C快捷键来中断运行。
orangepi@orangepi:~$ ping www.orangepi.org -I wlan0
PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms
^C
--- www.orangepi.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms
服务器版镜像通过图形化方式连接WIFI
先登录linux系统,有下面三种方式:
如果开发板连接了网线,可以通过ssh远程登录linux系统。
如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)。
如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统。
然后在命令行中输入nmtui命令打开wifi连接的界面。
orangepi@orangepi:~$ sudo nmtui
输入nmtui命令打开的界面如下所示:
选择Activate a connect后回车。
然后就能看到所有搜索到的WIFI热点。
选择想要连接的WIFI热点后再使用Tab键将光标定位到Activate后回车。
然后会弹出输入密码的对话框,在Password内输入对应的密码然后回车就会开始连接WIFI。
WIFI连接成功后会在已连接的WIFI名称前显示一个”*”
通过ip addr show wlan0命令可以查看wifi的IP地址。
orangepi@orangepi:~$ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 259069sec preferred_lft 259069sec
inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute
valid_lft 259071sec preferred_lft 172671sec
inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用ping命令可以测试wifi网络的连通性,ping命令可以通过Ctrl+C快捷键来中断运行。
orangepi@orangepi:~$ ping www.orangepi.org -I wlan0
PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms
^C
--- www.orangepi.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms
桌面版镜像的测试方法
点击桌面右上角的网络配置图标(测试WIFI时请不要连接网线)。
在弹出的下拉框中点击More networks可以看到所有扫描到的WIFI热点,然后选择想要连接的WIFI热点。
然后输入WIFI热点的密码,再点击Connect就会开始连接WIFI。
连接好WIFI后,可以打开浏览器查看是否能上网,浏览器的入口如下图所示:
打开浏览器后如果能打开其他网页说明WIFI连接正常。
设置静态IP地址的方法
请不要通过修改/etc/network/interfaces配置文件的方式来设置静态IP地址。
使用nmtui命令来设置静态IP地址
首先运行nmtui命令。
orangepi@orangepi:~$ sudo nmtui
然后选择Edit a connection并按下回车键。
然后选择需要设置静态IP地址的网络接口,比如设置Ethernet接口的静态IP地址选择Wired connection 1就可以了。
然后通过Tab键选择Edit并按下回车键。
然后通过Tab键将光标移动到下图所示的<Automatic>位置进行IPv4的配置。
- 然后回车,通过上下方向键选择Manual,然后回车确定。
选择完后的显示如下图所示:
然后通过Tab键将光标移动到<Show>。
然后回车,回车后会弹出下面的设置界面。
然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),请根据自己的具体需求来设置,下图中设置的值只是一个示例。
设置完后将光标移动到右下角的<OK>,然后回车确认。
然后点击<Back>回退到上一级选择界面。
然后选择Activate a connection,再将光标移动到<OK>,最后点击回车。
然后选择需要设置的网络接口,比如Wired connection 1,然后将光标移动到<Deactivate>,再按下回车键禁用Wired connection 1。
然后请不要移动光标,再按下回车键重新使能Wired connection 1,这样前面设置的静态IP地址就会生效了。
然后通过<Back>和Quit按钮就可以退出nmtui。
然后通过ip addr show enP3p49s0就能看到网口的IP地址已经变成前面设置的静态IP地址了。
orangepi@orangepi:~$ ip addr show enP3p49s0
2: enP3p49s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:e0:4c:68:00:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.177/24 brd 192.168.1.255 scope global noprefixroute enP3p49s0
valid_lft forever preferred_lft forever
inet6 fe80::d5aa:9a6:cd41:942e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
然后就可以测试网络的连通性来检查IP地址是否配置OK了,ping命令可以通过Ctrl+C快捷键来中断运行。
orangepi@orangepi:~$ ping 192.168.1.47 -I enP3p49s0
PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.
64 bytes from 192.168.1.47: icmp_seq=1 ttl=64 time=0.233 ms
64 bytes from 192.168.1.47: icmp_seq=2 ttl=64 time=0.263 ms
64 bytes from 192.168.1.47: icmp_seq=3 ttl=64 time=0.273 ms
64 bytes from 192.168.1.47: icmp_seq=4 ttl=64 time=0.269 ms
64 bytes from 192.168.1.47: icmp_seq=5 ttl=64 time=0.275 ms
^C
--- 192.168.1.47 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4042ms
rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms
通过create_ap创建WIFI热点的方法
create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下:
https://github.com/oblique/create_ap
如果使用的是最新的镜像,那么就已经预装了create_ap脚本,可以通过create_ap命令来创建WIFI热点,create_ap的基本命令格式如下所示:
create_ap [options] <wifi-interface> [<interface-with-internet>] [<access-point-name> [<passphrase>]]
* options:可以通过该参数指定加密方式、WIFI热点的频段、频宽模式、网络共享方式等,具体可以通过create_ap -h获取到有哪些option
* wifi-interface:无线网卡的名称
* interface-with-internet:可以联网的网卡名称,一般是eth0
* access-point-name:热点名称
* passphrase:热点的密码
create_ap以NAT模式创建WIFI热点的方法
- 输入下面的命令以NAT模式创建名称为orangepi、密码为orangepi的WIFI热点。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 enP3p49s0 orangepi orangepi
如果有下面的信息输出,说明WIFI热点创建成功。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 enP3p49s0 orangepi orangepi
Config dir: /tmp/create_ap.wlan0.conf.Ks6HobEw
PID: 5405
Network Manager found, set ap0 as unmanaged device... DONE
Creating a virtual WiFi interface... ap0 created.
Sharing Internet using method: nat
hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.Ks6HobEw/hostapd_ctrl
ap0: interface state UNINITIALIZED->ENABLED
ap0: AP-ENABLED
此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为orangepi的WIFI热点,然后可以点击 orangepi连接热点,密码就是上面设置的orangepi。
连接成功后的显示如下图所示:
在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X。
orangepi@orangepi:~$ ifconfig enP3p49s0
enP3p49s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.150 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link>
ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)
RX packets 25370 bytes 2709590 (2.7 MB)
RX errors 0 dropped 50 overruns 0 frame 0
TX packets 3798 bytes 1519493 (1.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 83
而开发板的DHCP服务默认会给接入热点的设备分配192.168.12.0/24的IP地址,这时点击已经连接的WIFI热点orangepi,然后就可以看到手机的IP地址是192.168.12.X。
如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 enP3p49s0 orangepi orangepi -g 192.168.2.1
此时通过手机连接到热点后,点击已经连接的WIFI热点orangepi,然后可以看到手机的IP地址是192.168.2.X。
- 在不指定--freq-band参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过--freq-band 5参数指定,具体命令如下:
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 enP3p49s0 orangepi orangepi --freq-band 5
- 如果需要隐藏SSID,可以指定--hidden参数,具体命令如下:
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 enP3p49s0 orangepi orangepi --hidden
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点。
create_ap以bridge模式创建WIFI热点的方法
- 输入下面的命令以bridge模式创建名称为orangepi、密码为orangepi的WIFI热点。
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 enP3p49s0 orangepi orangepi
如果有下面的信息输出,说明WIFI热点创建成功。
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 enP3p49s0 orangepi orangepi
[sudo] password for orangepi:
Config dir: /tmp/create_ap.wlan0.conf.fg9U5Xgt
PID: 3141
Network Manager found, set ap0 as unmanaged device... DONE
Creating a virtual WiFi interface... ap0 created.
Sharing Internet using method: bridge
Create a bridge interface... br0 created.
hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.fg9U5Xgt/hostapd_ctrl
ap0: interface state UNINITIALIZED->ENABLED
ap0: AP-ENABLED
此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为orangepi的WIFI热点,然后可以点击orangepi连接热点,密码就是上面设置的orangepi。
连接成功后的显示如下图所示:
在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是192.168.1.X。
orangepi@orangepi:~$ ifconfig enP3p49s0
enP3p49s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.150 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link>
ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)
RX packets 25370 bytes 2709590 (2.7 MB)
RX errors 0 dropped 50 overruns 0 frame 0
TX packets 3798 bytes 1519493 (1.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 83
而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点orangepi,然后就可以看到手机的IP地址也是192.168.1.X。
在不指定--freq-band参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过--freq-band 5参数指定,具体命令如下:
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 enP3p49s0 orangepi orangepi --freq-band 5
- 如果需要隐藏SSID,可以指定--hidden参数,具体命令如下:
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 enP3p49s0 orangepi orangepi --hidden
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点。
SSH远程登录开发板
Linux系统默认都开启了ssh远程登录,并且允许root用户登录系统。ssh登录前首先需要确保以太网或者wifi网络已连接,然后使用ip addr命令或者通过查看路由器的方式获取开发板的IP地址。
Ubuntu下SSH远程登录开发板
- 获取开发板的IP地址。
- 然后就可以通过ssh命令远程登录linux系统。
test@test:~$ ssh root@192.168.x.xxx #需要替换为开发板的IP地址
root@192.168.x.xx's password: #在这里输入密码,默认密码为orangepi
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
如果提示拒绝连接,只要使用的是Orange Pi提供的镜像,就请不要怀疑orangepi这个密码是不是不对,而是要找其他原因。
成功登录系统后的显示如下图所示:
如果ssh无法正常登陆linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录linux系统然后在开发板上输入下面的命令后再尝试是否能连接:
root@orangepi:~# reset_ssh.sh
如果还不行,请重烧系统试下。
Windows下SSH远程登录开发板
首先获取开发板的IP地址。
在windows下可以使用MobaXterm远程登录开发板,首先新建一个ssh会话。
然后会提示输入密码,默认root和orangepi用户的密码都为orangepi。
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
- 成功登录系统后的显示如下图所示:
ADB的使用方法
网络adb的使用方法
系统启动后请先确认下adbd已经启动了。
orangepi@orangepi:~$ ps -ax | grep "adbd"
808 ? Sl 0:00 /usr/bin/adbd
3707 ttyFIQ0 S+ 0:00 grep --color=auto adbd
然后查看下开发板的IP地址,并记下来。
然后在Ubuntu PC上安装adb工具。
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y adb
然后使用下面的命令连接网络adb。
test@test:~$ adb connect 192.168.1.xx:5555 #IP地址请替换为开发板的IP地址
- daemon not running; starting now at tcp:5037
- daemon started successfully
connected to 192.168.1.xx:5555
test@test:~$ adb devices
List of devices attached
192.168.1.xx:5555 device
- 然后使用下面的命令就可以登录开发板的linux系统。
test@test:~$ adb shell
root@orangepi5ultra:/# <--- 看到这个提示符后说明已成功登录开发板
使用adb上传文件到开发板的命令如下所示:
test@test:~$ adb push filename /root
filename: 1 file pushed. 3.7 MB/s (1075091 bytes in 0.277s)
使用adb重启开发板的命令如下所示:
test@test:~$ adb reboot
如果您的Windows系统中没有adb工具,可以使用RKDevTool软件(烧录Android镜像到SPIFlash+NVMe SSD中的方法一小节有用到这个软件)中的adb程序。
在Windows中使用adb的示例如下所示:
使用USB公对公数据线连接adb
首先准备一根品质良好的USB公对公数据线。
然后通过USB公对公数据线连接好开发板与Ubuntu PC,开发板支持device功能的USB接口的位置如下图所示:
然后运行下面的命令将USB接口设置为device模式。
orangepi@orangepi:~$ sudo set_device.sh
如果linux系统中不存在set_device.sh脚本,请直接使用下面的命令:
orangepi@orangepi:~$ sudo bash -c "echo device > /sys/kernel/debug/usb/fc000000.usb/mode"
orangepi@orangepi:~$ sudo systemctl restart usbdevice
然后请确认下adbd已经启动了。
orangepi@orangepi:~$ ps -ax | grep "adbd"
808 ? Sl 0:00 /usr/bin/adbd
3707 ttyFIQ0 S+ 0:00 grep --color=auto adbd
然后在Ubuntu PC上安装下adb工具。
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y adb
然后使用下面的命令查看下有没有识别到adb设备。
test@test:~$ adb devices
List of devices attached
e0f9f71bc343c305 device
- 然后使用下面的命令就可以登录开发板的linux系统。
test@test:~$ adb shell
root@orangepi5ultra:/# <--- 看到这个提示符后说明已成功登录开发板
使用adb上传文件到开发板的命令如下所示:
test@test:~$ adb push filename /root
filename: 1 file pushed. 3.7 MB/s (1075091 bytes in 0.277s)
如果您的Windows系统中没有adb工具,可以使用RKDevTool软件(烧录Android镜像到SPIFlash+NVMe SSD中的方法一小节有用到这个软件)中的adb程序。
在Windows中使用adb的示例如下所示:
上传文件到开发板Linux系统中的方法
在Ubuntu PC中上传文件到开发板Linux系统中的方法
使用scp命令上传文件的方法
使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示:
file_path:需要替换为要上传文件的路径。
orangepi:为开发板linux系统的用户名,也可以替换成其它的,比如root。
192.168.xx.xx: 为开发板的IP地址,请根据实际情况进行修改。
/home/orangepi: 开发板linux系统中的路径,也可以修改为其它的路径。
test@test:~$ scp file_path orangepi@192.168.xx.xx:/home/orangepi/
如果要上传文件夹,需要加上-r参数。
test@test:~$ scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/
scp还有更多的用法,请使用下面的命令查看man手册。
test@test:~$ man scp
使用filezilla上传文件的方法
首先在Ubuntu PC中安装filezilla。
test@test:~$ sudo apt install -y filezilla
然后使用下面的命令打开filezilla。
test@test:~$ filezilla
filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的。
连接开发板的方法如下图所示:
- 连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了。
- 然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。
上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了。
上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了。
在Windows PC中上传文件到开发板Linux系统中的方法
使用filezilla上传文件的方法
- 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示:
https://filezilla-project.org/download.php?type=client
下载的安装包如下所示,然后双击直接安装即可。
FileZilla_Server_1.5.1_win64-setup.exe
安装过程中,下面的安装界面请选择Decline,然后再选择Next>。
- filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的。
- 连接开发板的方法如下图所示:
- 然后选择保存密码,再点击确定。
- 然后选择总是信任该主机,再点击确定。
- 连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了。
- 然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。
上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了。
上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了。
HDMI测试
HDMI显示测试
注意,很多笔记本电脑虽然带有HDMI接口,但是笔记本的HDMI接口一般只有输出功能,并没有HDMI in的功能,也就是说并不能将其他设备的HDMI输出显示到笔记本的屏幕上。
当想把开发板的HDMI接到笔记本电脑HDMI接口时,请先确认清楚您的笔记本是支持HDMI in的功能。
当HDMI没有显示的时候,请先检查下HDMI线有没有插紧,确认接线没问题后,可以换一个不同的屏幕试下有没有显示。
HDMI分辨率设置方法
首先在Settings中打开Display。
然后就能看到系统当前的分辨率。
点击Resolution(分辨率)的下拉框,就可以看到显示器当前支持的所有分辨率。
然后选择想要设置的分辨率,再点击Apply。
等新的分辨率设置完后再选择Keep the configuration即可。
HDMI RX的测试方法
开发板HDMI RX接口的所在位置如下所示:
首先使用下图所示的HDMI转HDMI线将其它设备的HDMI输出接到开发板的HDMI RX接口上
然后在桌面上打开一个终端,然后运行下test_hdmiin.sh脚本
[orangepi@orangepi ~]$ sudo test_hdmiin.sh
然后就能看到HDMI RX的输入画面了(下图中HDMI RX显示的是opi5开发板HDMI输出的画面,此时正在播放一个视频)。test_hdmiin.sh脚本默认会将HDMI RX输入的音频播放到开发板的HDMI_TX和耳机中去。
蓝牙使用方法
桌面版镜像的测试方法
点击桌面右上角的蓝牙图标。
然后选择适配器。
如果有提示下面的界面,请选择Yes。
然后在蓝牙的适配器设置界面中设置Visibility Setting为Always visible,然后关闭即可。
然后打开蓝牙设备的配置界面。
点击Search即可开始扫描周围的蓝牙设备。
然后选择想要连接的蓝牙设备,再点击鼠标右键就会弹出对此蓝牙设备的操作界面,选择Pair即可开始配对,这里演示的是和Android手机配对。
配对时,桌面的右上角会弹出配对确认框,选择Confirm确认即可,此时手机上也同样需要进行确认。
和手机配对完后,可以选择已配对的蓝牙设备,然后右键选择Send a File即可开始给手机发送一张图片。
发送图片的界面如下所示:
USB接口测试
USB接口是可以接USB hub来扩展USB接口的数量的。
连接USB鼠标或键盘测试
- 将USB接口的键盘插入Orange Pi开发板的USB接口中
- 连接Orange Pi开发板到HDMI显示器
- 如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用)
连接USB存储设备测试
- 首先将U盘或者USB移动硬盘插入Orange Pi开发板的USB接口中
- 执行下面的命令如果能看到sdX的输出说明U盘识别成功
orangepi@orangepi:~$ cat /proc/partitions | grep "sd*"
major minor #blocks name
8 0 30044160 sda
8 1 30043119 sda1
- 使用mount命令可以将U盘挂载到/mnt中,然后就能查看U盘中的文件了
orangepi@orangepi:~$ sudo mount /dev/sda1 /mnt/
orangepi@orangepi:~$ ls /mnt/
test.txt
- 挂载完后通过df -h命令就能查看U盘的容量使用情况和挂载点
orangepi@orangepi:~$ df -h | grep "sd"
/dev/sda1 29G 208K 29G 1% /mnt
USB无线网卡测试
目前测试过的能用的USB无线网卡如下所示,其他型号的USB无线网卡请自行测试,如果无法使用就需要移植对应的USB无线网卡驱动
序号 | 型号 | |
1 | RTL8723BU
支持2.4G WIFI+BT4.0 |
文件:Orange Pi 5 Ultra-image2 48.png |
2 | RTL8811
支持2.4G +5G WIFI |
文件:Orange Pi 5 Ultra-image2 49.png |
3 | RTL8821CU
支持2.4G +5G WIFI 支持BT 4.2 |
RTL8723BU测试
首先将RTL8723BU无线网卡模块插入开发板的USB接口中
然后linux系统会自动加载RTL8723BU蓝牙和WIFI相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载
orangepi@orangepi:~$ lsmod
Module Size Used by
rfcomm 57344 16
rtl8xxxu 106496 0
rtk_btusb 61440 0
通过dmesg命令可以看到RTL8723BU模块的加载信息
orangepi@orangepi:~$ dmesg
......
[ 83.438901] usb 2-1: new high-speed USB device number 2 using ehci-platform
[ 83.588375] usb 2-1: New USB device found, idVendor=0bda, idProduct=b720, bcdDevice= 2.00
[ 83.588403] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 83.588422] usb 2-1: Product: 802.11n WLAN Adapter
[ 83.588443] usb 2-1: Manufacturer: Realtek
[ 83.588460] usb 2-1: SerialNumber: 00e04c000001
[ 83.601974] Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
[ 83.603894] Bluetooth: hci0: RTL: rom_version status=0 version=1
[ 83.603920] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_fw.bin
[ 83.610108] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_config.bin
[ 83.611274] Bluetooth: hci0: RTL: cfg_sz 68, total sz 22564
[ 83.658494] rtk_btusb: Realtek Bluetooth USB driver ver 3.1.6d45ddf.20220519-142432
[ 83.658651] usbcore: registered new interface driver rtk_btusb
[ 83.667124] usb 2-1: This Realtek USB WiFi dongle (0x0bda:0xb720) is untested!
[ 83.667137] usb 2-1: Please report results to Jes.Sorensen@gmail.com
[ 83.890140] usb 2-1: Vendor: Realtek
[ 83.890153] usb 2-1: Product: 802.11n WLAN Adapter
[ 83.890159] usb 2-1: rtl8723bu_parse_efuse: dumping efuse (0x200 bytes):
......
[ 83.890412] usb 2-1: RTL8723BU rev E (SMIC) 1T1R, TX queues 3, WiFi=1, BT=1, GPS=0, HI PA=0
[ 83.890417] usb 2-1: RTL8723BU MAC: 00:13:ef:f4:58:ae
[ 83.890421] usb 2-1: rtl8xxxu: Loading firmware rtlwifi/rtl8723bu_nic.bin
[ 83.895289] usb 2-1: Firmware revision 35.0 (signature 0x5301)
[ 84.050893] Bluetooth: hci0: RTL: fw version 0x0e2f9f73
[ 84.266905] Bluetooth: RFCOMM TTY layer initialized
[ 84.266949] Bluetooth: RFCOMM socket layer initialized
[ 84.266999] Bluetooth: RFCOMM ver 1.11
[ 84.884270] usbcore: registered new interface driver rtl8xxxu
[ 84.912046] rtl8xxxu 2-1:1.2 wlx0013eff458ae: renamed from wlan0
然后通过sudo ifconfig命令可以看到RTL8723BU WIFI的设备节点,WIFI的连接和测试方法请参看WIFI连接测试一节,这里不再赘述
orangepi@orangepi:~$ sudo ifconfig wlx0013eff458ae
wlx0013eff458ae: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:13:ef:f4:58:ae txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后通过hciconfig命令可以看到USB的蓝牙设备
orangepi@orangepi:~$ sudo apt update && sudo apt -y install bluez
orangepi@orangepi:~$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:13:EF:F4:58:AE ACL MTU: 820:8 SCO MTU: 255:16
DOWN
RX bytes:1252 acl:0 sco:0 events:125 errors:0
TX bytes:23307 acl:0 sco:0 commands:125 errors:0
在桌面中也可以看到出现了蓝牙图标,此时蓝牙还未打开,所以会显示一个红色的x
点击Turn Bluetooth On可以打开蓝牙
打开蓝牙后的显示如下所示
蓝牙的测试方法请参看蓝牙使用方法一节,这里不再赘述
RTL8811测试
首先将RTL8811无线网卡模块插入开发板的USB接口中
然后linux系统会自动加载RTL8811 WIFI相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载
orangepi@orangepi:~$ lsmod
Module Size Used by
8821cu 1839104 0
通过dmesg命令可以看到RTL8811模块的加载信息
orangepi@orangepi:~$ dmesg
[ 118.618194] usb 2-1: new high-speed USB device number 2 using ehci-platform
[ 118.767152] usb 2-1: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00
[ 118.767181] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 118.767199] usb 2-1: Product: 802.11ac NIC
[ 118.767219] usb 2-1: Manufacturer: Realtek
[ 118.767235] usb 2-1: SerialNumber: 123456
[ 119.500530] usbcore: registered new interface driver rtl8821cu
[ 119.525498] rtl8821cu 2-1:1.0 wlx1cbfced9d260: renamed from wlan0
然后通过sudo ifconfig命令可以看到WIFI的设备节点,WIFI的连接和测试方法请参看WIFI连接测试一节,这里不再赘述
orangepi@orangepi:~$ sudo ifconfig wlx1cbfced9d260
wlx1cbfced9d260: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 1c:bf:ce:d9:d2:60 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RTL8821CU测试
首先将rtl8821cu 无线网卡模块插入开发板的usb 接口中
然后使用lsusb命令就可以看到rtl8821cu usb wifi模块的设备信息,请确保USB模块没有处于Driver CDROM Mode
orangepi@orangepi:~$ lsusb | grep "Realtek"
Bus 002 Device 003: ID 0bda:c820 Realtek Semiconductor Corp. 802.11ac NIC
orangepi@orangepi:~$ lsusb | grep "Realtek"
Bus 002 Device 002: ID 0bda:1a2b Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
如果lsusb命令看到的USB WIFI模块处于Driver CDROM Mode,请重新拔插下USB WIFI模块。如果还不行,请手动执行下面的命令切换下模式:
orangepi@orangepi:~$ sudo usb_modeswitch -KW -v 0bda -p 1a2b
linux系统会自动加载rtl8821cu蓝牙和wifi相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载
orangepi@orangepi:~$ lsmod
Module Size Used by
8821cu 1839104 0
rtk_btusb 61440 0
通过dmesg命令可以看到rtl8821cu模块的加载信息
orangepi@orangepi:~$ dmesg
......
[ 57.083693] usb 2-1: new high-speed USB device number 2 using ehci-platform
[ 57.231888] usb 2-1: New USB device found, idVendor=0bda, idProduct=1a2b, bcdDevice= 2.00
[ 57.231916] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 57.231937] usb 2-1: Product: DISK
[ 57.231956] usb 2-1: Manufacturer: Realtek
[ 57.242594] usb-storage 2-1:1.0: USB Mass Storage device detected
[ 57.245674] scsi host0: usb-storage 2-1:1.0
[ 58.069172] usb 2-1: USB disconnect, device number 2
[ 58.440025] usb 2-1: new high-speed USB device number 3 using ehci-platform
[ 58.587819] usb 2-1: New USB device found, idVendor=0bda, idProduct=c820, bcdDevice= 2.00
[ 58.587827] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 58.587833] usb 2-1: Product: 802.11ac NIC
[ 58.587838] usb 2-1: Manufacturer: Realtek
[ 58.587844] usb 2-1: SerialNumber: 123456
[ 58.610463] rtk_btusb: Realtek Bluetooth USB driver ver 3.1.6d45ddf.20220519-142432
[ 58.610656] usbcore: registered new interface driver rtk_btusb
[ 58.634631] Bluetooth: hci0: RTL: examining hci_ver=08 hci_rev=000c lmp_ver=08 lmp_subver=8821
[ 58.636729] Bluetooth: hci0: RTL: rom_version status=0 version=1
[ 58.636740] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_fw.bin
[ 58.664190] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_config.bin
[ 58.664746] Bluetooth: hci0: RTL: cfg_sz 10, total sz 31990
[ 59.122471] Bluetooth: hci0: RTL: fw version 0x829a7644
[ 59.265513] usbcore: registered new interface driver rtl8821cu
[ 59.280119] rtl8821cu 2-1:1.2 wlx90de80521825: renamed from wlan0
然后通过sudo ifconfig命令可以看到rtl8821cu wifi的设备节点,wifi的连接和测试方法请参看WIFI连接测试一节,这里不再赘述
orangepi@orangepi:~$ sudo ifconfig wlx90de80521825
wlx90de80521825: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:13:ef:f4:58:ae txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后通过hciconfig命令可以看到USB的蓝牙设备
orangepi@orangepi:~$ sudo apt-get update && sudo apt-get install -y bluez
orangepi@orangepi:~$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:13:EF:F4:58:AE ACL MTU: 820:8 SCO MTU: 255:16
DOWN
RX bytes:1252 acl:0 sco:0 events:125 errors:0
TX bytes:23307 acl:0 sco:0 commands:125 errors:0
在桌面中也可以看到出现了蓝牙图标,此时蓝牙还未打开,所以会显示一个红色的x
点击Turn Bluetooth On可以打开蓝牙
打开蓝牙后的显示如下所示
蓝牙的测试方法请参看蓝牙使用方法一节,这里不再赘述
USB摄像头测试
首先需要准备一个下图所示的或者类似的支持UVC协议的USB摄像头,然后将USB摄像头插入到Orange Pi开发板的USB接口中
通过v4l2-ctl命令可以看到USB摄像头的设备节点信息为/dev/video0
orangepi@orangepi:~$ v4l2-ctl --list-devices
Q8 HD Webcam: Q8 HD Webcam (usb-fc880000.usb-1):
/dev/video0
/dev/video1
/dev/media0
注意v4l2中的l是小写字母l,不是数字1。
另外video的序号不一定都是video0,请以实际看到的为准。
在桌面系统中可以使用Cheese直接打开USB摄像头,Cheese打开方法如下图所示:
如果cheese没有预装,可以使用下面的命令安装一下:
orangepi@orangepi:~$ sudo apt-get install -y cheese
Cheese打开USB摄像头后的界面如下图所示:
使用fswebcam测试USB摄像头的方法
安装fswebcam
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt-get install -y fswebcam
安装完fswebcam后可以使用下面的命令来拍照
-d 选项用于指定USB摄像头的设备节点
--no-banner用于去除照片的水印
-r 选项用于指定照片的分辨率
-S 选项用设置于跳过前面的帧数
./image.jpg 用于设置生成的照片的名字和路径
orangepi@orangepi:~$ sudo fswebcam -d /dev/video0 \
--no-banner -r 1280x720 -S 5 ./image.jpg
在服务器版的linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu PC上镜像观看
orangepi@orangepi:~$ scp image.jpg test@192.168.1.55:/home/test (根据实际情况修改IP地址和路径)
在桌面版的linux系统中,可以通过HDMI显示器直接查看拍摄的图片
音频测试
在桌面系统中测试音频方法
首先打开文件管理器。
然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)。
然后选中audio.wav文件,右键选择使用vlc或者mpv打开就可以开始播放。
切换HDMI播放和耳机播放等不同音频设备的方法。
使用命令播放音频的方法
耳机接口播放音频测试
首先将耳机插入开发板的耳机孔中。
然后可以通过aplay -l命令可以查看下linux系统支持的声卡设备,从下面的输出可知,card 2为es8388的声卡设备,也就是耳机的声卡设备。
orangepi@orangepi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rockchiphdmi1 [rockchip-hdmi1], device 0: rockchip-hdmi1 i2s-hifi-0 [rockchip-hdmi1 i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: rockchipes8388 [rockchip,es8388], device 0: dailink-multicodecs ES8323.7-0011-0 [dailink-multicodecs ES8323.7-0011-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
然后使用aplay命令播放下系统自带的音频文件,如果耳机能听到声音说明硬件能正常使用。
orangepi@orangepi:~$ aplay -D hw:2,0 /usr/share/sounds/alsa/audio.wav
Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
HDMI音频播放测试
首先使用HDMI 转HDMI线将Orange Pi开发板连接到电视机上(其他的HDMI显示器需要确保可以播放音频)
然后查看下HDMI的声卡序号,从下面的输出可以知道HDMI TX的声卡为card 0
orangepi@orangepi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rockchiphdmi1 [rockchip-hdmi1], device 0: rockchip-hdmi1 i2s-hifi-0 [rockchip-hdmi1 i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
......
然后使用aplay命令播放下系统自带的音频文件,如果HDMI显示器或者电视能听到声音说明硬件能正常使用
orangepi@orangepi:~$ aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav
使用命令测试录音的方法
开发板上有板载MIC,位置如下所示:
运行test_record.sh main命令会通过板载MIC录制一段音频,然后播放到HDMI和耳机。
orangepi@orangepi:~$ test_record.sh main
Start recording: /tmp/test.wav
Recording WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Start playing
Playing WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
除了板载MIC,我们还可以通过带MIC功能的耳机来录制音频。将带MIC功能的耳机插入开发板后,运行test_record.sh headset命令会通过耳机录制一段音频,然后播放到HDMI和耳机。
orangepi@orangepi:~$ test_record.sh headset
Start recording: /tmp/test.wav
Recording WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Start playing
Playing WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE '/tmp/test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
温度传感器
- 查看系统温度传感器的命令为:
orangepi@orangepi:~$ sensors
gpu_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
littlecore_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
bigcore0_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
tcpm_source_psy_6_0022-i2c-6-22
Adapter: rk3x-i2c
in0: 0.00 V (min = +0.00 V, max = +0.00 V)
curr1: 0.00 A (max = +0.00 A)
npu_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
center_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
bigcore1_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C
soc_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C (crit = +115.0°C)
查看nvme ssd固态硬盘当前温度的命令为:
orangepi@orangepi:~$ sudo smartctl -a /dev/nvme0 | grep "Temperature:"
Temperature: 40 Celsius
40 Pin接口引脚说明
Orange Pi 5 Ultra开发板40 pin接口引脚的顺序请参考下图
Orange Pi 5 Ultra开发板40 pin接口引脚的功能如下表所示
40pin接口中总共有28个GPIO口,所有GPIO口的电压都是3.3v
安装wiringOP的方法
注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。
编译好的wiringOP的deb包在orangepi-build中的存放路径为:
orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb
进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。
下载wiringOP的代码
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install -y git
orangepi@orangepi:~$ git clone https://github.com/orangepi-xunlong/wiringOP.git -b next
注意,Orange Pi 5 Ultra需要下载wiringOP next分支的代码,请别漏了-b next这个参数。
如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。
编译安装wiringOP
orangepi@orangepi:~$ cd wiringOP
orangepi@orangepi:~/wiringOP$ sudo ./build clean
orangepi@orangepi:~/wiringOP$ sudo ./build
测试gpio readall命令的输出如下
40pin接口GPIO、I2C、UART、SPI、CAN和PWM测试
40pin GPIO口测试
Orange Pi发布的linux系统中有预装一个blink_all_gpio程序,这个程序会设置40pin中的所有28个GPIO口不停的切换高低电平。
运行blink_all_gpio程序后,当用万用表去测量GPIO口的电平时,会发现GPIO引脚会在0和3.3v之间不停的切换。使用这个程序我们可以来测试GPIO口是否能正常工作。
运行blink_all_gpio程序的方式如下所示:
orangepi@orangepi:~$ sudo blink_all_gpio #记得加sudo权限
[sudo] password for orangepi: #在这里需要输入密码
开发板40pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO1_A7 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平
首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号
root@orangepi:~/wiringOP# gpio mode 2 out
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
root@orangepi:~/wiringOP# gpio write 2 0
使用gpio readall可以看到7号引脚的值(V)变为了0
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
root@orangepi:~/wiringOP# gpio write 2 1
使用gpio readall可以看到7号引脚的值(V)变为了1
其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可
40pin GPIO口上下拉电阻的设置方法
注意,Orange Pi 5 Ultra下面10个GPIO引脚因为外部有3.3V上拉,所以设置下拉是无效的。
下面以11号引脚——对应GPIO为GPIO1_A0 ——对应wPi序号为5——为例演示如何设置GPIO口的上下拉电阻
首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号
root@orangepi:~# gpio mode 5 in
设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式
root@orangepi:~# gpio mode 5 up
然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功
root@orangepi:~# gpio read 5
1
然后执行下面的命令可以设置GPIO口为下拉模式
root@orangepi:~# gpio mode 5 down
然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功
root@orangepi:~# gpio read 5
0
40pin SPI测试
S PI0_M2对应40pin | S PI1_M1对应40pin | S PI4_M2对应40pin | |
* *MOSI** | 19号引脚 | 40号引脚 | 13号引脚 |
* *MISO** | 21号引脚 | 38号引脚 | 11号引脚 |
CLK | 23号引脚 | 29号引脚 | 15号引脚 |
CS0 | 24号引脚 | 35号引脚 | 16号引脚 |
CS1 | 26号引脚 | 无 | 无 |
dtb o配置 | spi 0-m2-cs0-spidev
spi 0-m2-cs1-spidev spi0-m2 -cs0-cs1-spidev |
spi 1-m1-cs0-spidev | spi 4-m2-cs0-spidev |
在linux系统中,40 pin中的SPI默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
重启后进入系统先查看下linux系统中是否存在spidevx.x的设备节点,如果存在,说明SPI已经设置好了,可以直接使用。
orangepi@orangepi:~$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0 /dev/spidev4.0
上面是打开spi0-m2-cs0-cs1-spidev、spi1-m1-cs0-spidev和spi4-m2-cs0-spidev后显示的结果。
先不短接SPI0或者SPI1或者SPI4的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev0.0 #spi0的命令
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev1.0 #spi1的命令
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev4.0 #spi4的命令
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….
然后短接SPI0或者SPI4的mosi和miso两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev0.0 #spi0的命令
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev1.0 #spi1的命令
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev4.0 #spi4的命令
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
40pin I2C测试
由下表可知,Orange Pi 5 Ultra可用的i2c为i2c2、i2c4、i2c5和i2c8共四组 i2c总线
4组I2C总线在40pin中对应的引脚如下表所示。I2C2_M0和I2C2_M4同一时间只能使用其中一组,不能同时使用,它们都是同一个I2C,只是接到不同的引脚上去了而已,请不要以为它们是两组不同的I2C总线。
I2C总线 | SDA对应40pin | SCL对应40pin | dtbo对应配置 |
I2C2_M0 | 3号引脚 | 5号引脚 | i2c2-m0 |
I2C2_M4 | 11号引脚 | 13号引脚 | i2c2-m4 |
I2C4_M3 | 15号引脚 | 16号引脚 | i2c4-m3 |
I2C5_M2 | 37号引脚 | 12号引脚 | i2c5-m2 |
I2C8_M3 | 27号引脚 | 28号引脚 | i2c8-m3 |
在linux系统中,40 pin中的I2C总线默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
启动linux系统后,先确认下/dev下存在需要使用I2C的设备节点
orangepi@orangepi:~$ ls /dev/i2c-*
然后在40pin接头的i2c引脚上接一个i2c设备
然后使用i2cdetect -y命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用
orangepi@orangepi:~$ sudo i2cdetect -y 2 #i2c2的命令
orangepi@orangepi:~$ sudo i2cdetect -y 4 #i2c4的命令
orangepi@orangepi:~$ sudo i2cdetect -y 5 #i2c5的命令
orangepi@orangepi:~$ sudo i2cdetect -y 8 #i2c8的命令
40pin的UART测试
由下表可知,Orange Pi 5 Ultra可用的uart为uart3、uart4和uart6共三组uart总线,uart2用于调试串口功能没有计算在里面。
四组UART总线在40pin中对应的引脚如下表所示。
UART总线 | RX对应40pin | TX对应40pin | dtbo对应配置 |
UART3_M1 | 33号引脚 | 31号引脚 | uart3-m1 |
UART4_M2 | 19号引脚 | 23号引脚 | uart4-m2 |
UART6_M1 | 11号引脚 | 13号引脚 | uart6-m1 |
在linux系统中,40 pin中的UART默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
进入linux系统后,先确认下/dev下是否存在对应uart的设备节点
orangepi@orangepi:~$ ls /dev/ttyS*
然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx
使用gpio serial命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常(ttySX需要替换为对应uart的节点名,请不要照抄)
orangepi@orangepi:~$ sudo gpio serial /dev/ttySX
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3
Out: 4: -> 4
Out: 5: -> 5^C
使用/sys/class/pwm测试PWM的方法
由下表可知,Orange Pi 5 Ultra可用的pwm有pwm0、pwm1、pwm3、pwm6、pwm12、pwm13和pwm14共七路pwm
PWM在40pin中对应的引脚如下表所示。PWM0_M0和PWM0_M2、PWM1_M0和PWM1_M2同一时间只能使用其中一个,不能同时使用,它们都是同一个PWM,只是接到不同的引脚上去了而已,请不要以为它们是两个不同的PWM总线。
PWM总线 | 对应40pin | dtbo对应配置 |
PWM0_M0 | 5号引脚 | pwm0-m0 |
PWM0_M2 | 15号引脚 | pwm0-m2 |
PWM1_M0 | 3号引脚 | pwm1-m0 |
PWM1_M2 | 16号引脚 | pwm1-m2 |
PWM3_M3 | 7号引脚 | pwm3-m3 |
PWM6_M1 | 27号引脚 | pwm6-m1 |
PWM12_M0 | 31号引脚 | pwm12-m0 |
PWM13_M0 | 33号引脚 | pwm13-m0 |
PWM14_M0 | 35号引脚 | pwm14-m0 |
在linux系统中,40 pin中的PWM默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
当打开一个pwm后,在/sys/class/pwm/中就会多出一个pwmchipX(X为具体的的数字),比如打开pwm3后,查看/sys/class/pwm/下的pwmchipX会由两个变成了三个
orangepi@orangepi:~$ ls /sys/class/pwm/
pwmchip0 pwmchip1 pwmchip2
上面哪个pwmchip对应pwm3呢,我们先查看下 ls /sys/class/pwm/ -l命令的输出,如下所示:
然后由下表可知,pwm3寄存器的基地址为fd8b0030,再看 ls /sys/class/pwm/ -l命令的输出,可以看到pwmchip0中链接到了fd8b0030.pwm,所以pwm3对应pwmchip为pwmchip0
然后使用下面的命令可以让pwm3输出一个50Hz的方波(请先切换到root用户,再执行下面的命令)
root@orangepi:~# echo 0 > /sys/class/pwm/pwmchip0/export
root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip0/pwm0/period
root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
- 上面演示的pwm3的测试方法,其他pwm测试方法都是类似的。
CAN的测试方法
只有Linux5.10内核的镜像才支持CAN功能,Linux6.1内核的镜像不支持。
打开CAN的方法
由下表可知,Orange Pi 5 Ultra可用的CAN总线为CAN0和CAN1
在linux系统中,40 pin中的CAN默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
进入linux系统后,使用sudo ifconfig -a命令如果能看到CAN的设备,就说明CAN已正确打开了
orangepi@orangepi:~$ sudo ifconfig -a
can0: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 91
can1: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 92
CAN0和CAN1对应的引脚为
CAN0 | CAN1 | |
TX引脚 | 对应5号引脚 | 对应33号引脚 |
RX引脚 | 对应3号引脚 | 对应31号引脚 |
使用CANalyst-II分析仪测试收发消息
测试使用的CANalyst-II分析仪如下图所示
CANalyst-II分析仪资料下载链接
首先要安装USBCANToolSetup这个软件
USBCANToolSetup安装后的快捷方式为
另外还需要安装一下USB驱动程序
CANalyst-II分析仪的USB接口那端需要接到电脑的USB接口中
测试CAN功能还需要准备一个下图所示的CAN收发器,CAN收发器主要功能是将CAN控制器的TTL信号转换成CAN总线的差分信号
然后可以打开USB-CAN软件
然后点击启动设备
然后点击确定
再设置波特率为1000k bps
成功打开后USB-CAN软件会显示序列号等信息
开发板接收CAN消息测试
首先在开发板的Linux系统中设置下CAN总线的波特率为1000kbps
orangepi@orangepi:~$ sudo ip link set can0 down
orangepi@orangepi:~$ sudo ip link set can0 type can bitrate 1000000
orangepi@orangepi:~$ sudo ip link set can0 up
然后运行candump can0命令准备接收消息
orangepi@orangepi:~$ sudo candump can0
然后在USB-CAN软件中发送一个消息给开发板
如果开发板中可以接收到分析仪发送的消息说明CAN总线能正常使用
orangepi@orangepi5ultra:~$ sudo candump can0
can0 001 [8] 01 02 03 04 05 06 07 08
开发板发送CAN消息测试
首先在Linux系统中设置下CAN的波特率为1000kbps
orangepi@orangepi:~$ sudo ip link set can0 down
orangepi@orangepi:~$ sudo ip link set can0 type can bitrate 1000000
orangepi@orangepi:~$ sudo ip link set can0 up
再开发板中执行cansend命令,发送一个消息
orangepi@orangepi:~$ sudo cansend can0 123#1122334455667788
如果USB-CAN软件可以接收到开发板发过来的消息说明通信成功
wiringOP硬件PWM的使用方法
使用wiringOP操作PWM前,请确保Linux系统已经安装了wiringOP。如果gpio readall命令能正常使用,说明wiringOP已经安装了。如果提示找不到命令,请参考安装wiringOP的方法一小节的说明先安装下wiringOP。
使用wiringOP的gpio命令设置PWM的方法
设置对应引脚为PWM模式
如下表所示,开发板可以使用PWM0、PWM1、PWM3、PWM6、PWM12、PWM13和PWM14共七路PWM。PWM0_M0和PWM0_M2、PWM1_M0和PWM1_M2同一时间只能使用其中一个,不能同时使用,它们都是同一个PWM,只是接到不同的引脚上去了而已,请不要以为它们是两个不同的PWM总线。
PWM引脚对应的wPi序号如下所示:
PWM引脚 | wPi序号 | 引脚序号 | GPIO序号 |
PWM0_M0 | 1 | 5 | 15 |
PWM0_M2 | 8 | 15 | 34 |
PWM1_M0 | 0 | 3 | 16 |
PWM1_M2 | 9 | 16 | 35 |
PWM3_M3 | 2 | 7 | 39 |
PWM6_M1 | 17 | 27 | 145 |
PWM12_M0 | 20 | 31 | 109 |
PWM13_M0 | 22 | 33 | 110 |
PWM14_M0 | 23 | 35 | 114 |
设置引脚为PWM模式的命令如下,以PWM0_M0为例,其中第三个参数需要输入PWM0_M0引脚对应的wPi的序号。
orangepi@orangepi:~$ gpio mode 1 pwm
引脚设置为PWM模式后,默认会输出一个频率为200Hz,周期为5ms,占空比为50%的方波,此时,我们使用示波器测量对应的PWM引脚,就可以看到下面的波形。
调节PWM频率的方法
PWM频率的计算公式如下所示:
PWM频率 = 时钟频率 / (分频系数 * 周期寄存器的值)
其中:
- 时钟频率的默认值是24000000Hz。
- 分频系数的取值范围是2 ~ 512之间的偶数,默认值是120。如果设置的分频系数为奇数,则实际的分频系数为设置值减一。
- 周期寄存器的默认值是1000。
- PWM频率的默认值是24000000 / (120 * 1000) = 200Hz。
通过设置分频系数来调节PWM频率的方法
我们可以使用下面的命令设置PWM0_M0引脚的分频系数为4。
orangepi@orangepi:~$ gpio pwmc 1 4
根据上面的公式得到PWM频率的计算值为6000Hz, 通过示波器可以观察到PWM频率测量值为6010Hz,误差可以忽略。
直接设置PWM频率的方法
我们可以使用gpio pwmTone命令来设置PWM引脚的频率,比如使用下面的命令可以设置PWM0_M0引脚的PWM频率为500Hz。
orangepi@orangepi:~$ gpio pwmTone 1 500
在设置PWM频率时,需要保证:
设置的频率值 < 24000000 / (分频系数 * 2)。
比如,默认的分频系数为120,在没有修改分频系数的情况下,设置的频率值应小于100000Hz。
如果设置值过大,会出现如下报错:
gpio: The PWM frequency you set is too high to be possible
然后通过示波器可以观察到PWM频率变为500Hz了。
调节PWM占空比的方法
PWM占空比的计算公式如下所示,我们可以通过设置占空比寄存器的值和周期寄存器的值来调节PWM占空比。
PWM占空比 = 占空比寄存器的值 / 周期寄存器的值
其中:
占空比寄存器的默认值是500。
周期寄存器的默认值是1000。
需要注意的是,占空比寄存器的值需要小于周期寄存器的值,因为占空比不能大于1。
当设置占空比寄存器的值 > 周期寄存器的值时,会提示如下错误信息:
gpio: CCR should be less than or equal to ARR (XXX)
当设置周期寄存器的值 < 占空比寄存器的值时,会提示如下错误信息:
gpio: ARR should be greater than or equal to CRR (XXX)
我们可以使用下面的命令设置PWM0_M0引脚的周期寄存器的值为2000。
orangepi@orangepi:~$ gpio pwmr 1 2000
运行上面的命令后,通过示波器可以观察到PWM占空比从默认的50%(500/1000)变为25%(500/2000)。
我们可以使用下面的命令设置PWM0_M0引脚的占空比寄存器的值为1000。
orangepi@orangepi:~$ gpio pwm 1 1000
运行上面的命令后,通过示波器可以观察到PWM占空比从25%(500/2000)变为50%(1000/2000)。
PWM测试程序的使用方法
在wiringOP的example目录下,有一个名为pwm.c的程序,此程序演示了使用wiringOP中PWM相关的API来操作PWM的方法。
orangepi@orangepi:~$ cd /usr/src/wiringOP/examples/
orangepi@orangepi:/usr/src/wiringOP/examples$ ls pwm.c
pwm.c
编译pwm.c为可执行程序的命令如下所示:
orangepi@orangepi:/usr/src/wiringOP/examples$ gcc -o pwm pwm.c -lwiringPi
然后就可以执行PWM测试程序了,在执行PWM测试程序时,需要指定PWM引脚,比如可以使用下面的命令对PWM0_M0引脚进行测试:
orangepi@orangepi:/usr/src/wiringOP/examples$ sudo ./pwm 1
pwm程序执行后会对以下内容依次进行测试:
通过设置周期寄存器的值来调节PWM占空比。
通过设置占空比寄存器的值调节PWM占空比。
通过设置分频系数调节PWM频率。
直接设置PWM频率。
在每完成一项测试后,会停止输出pwm波形5秒钟,在完成所有测试内容后,会重新开始新一轮测试。
PWM测试程序的详细执行过程如下所示:
通过设置周期寄存器的值调节PWM占空比:通过示波器可以观察到PWM波形每隔0.5秒产生变化,在变化了8次后,PWM占空比从50%变为25%,保持5秒,然后PWM波形每隔0.5秒产生变化,在变化了8次后,PWM占空比从25%变为50%,保持5秒。
通过设置占空比寄存器的值调节PWM占空比:通过示波器可以观察到PWM波形每隔0.5秒产生变化,在变化了8次后,PWM占空比从50%变为100%,保持5秒,然后PWM波形每隔0.5秒产生变化,在变化了8次后,PWM占空比从100%变为50%,保持5秒。
通过设置分频系数调节PWM频率:通过示波器可以观察到PWM波形每隔0.5秒产生变化,在变化了9次后,PWM频率会从2000hz变成200hz,保持5秒,然后PWM波形每隔0.5秒产生变化,在变化了9次后,PWM频率又会变为2000Hz,保持5秒。
直接设置PWM频率:通过示波器可以观察到PWM频率首先变为2000Hz,然后每隔两秒PWM频率增加2000Hz,在变化了9次后,PWM频率变为20000Hz,保持5秒。
wiringOP-Python的安装使用方法
wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。
另外请注意下面部分命令是在root用户下操作的。
wiringOP-Python的安装方法
首先安装依赖包
root@orangepi:~# sudo apt-get update
root@orangepi:~# sudo apt-get -y install git swig python3-dev python3-setuptools
然后使用下面的命令下载wiringOP-Python的源码
注意,下面的git clone--recursive命令会自动下载wiringOP的源码,因为wiringOP-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。
如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP-Python源码,存放位置为:/usr/src/wiringOP-Python。
root@orangepi:~# git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# git submodule update --init --remote
然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# python3 generate-bindings.py > bindings.i
root@orangepi:~/wiringOP-Python# sudo python3 setup.py install
然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下q键可以退出帮助信息的界面
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; help(wiringpi)"
Help on module wiringpi:
NAME
wiringpi
DESCRIPTION
- This file was automatically generated by SWIG (http://www.swig.org).
- Version 4.0.2
- Do not make changes to this file unless you know what you are doing--modify
- the SWIG interface file instead.
在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:
- 首先使用python3命令进入python3的命令行模式
root@orangepi:~# python3
- 然后导入wiringpi的python模块
>>> import wiringpi;
- 最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下q键可以退出帮助信息的界面
>>> help(wiringpi)
Help on module wiringpi:
NAME
wiringpi
DESCRIPTION
- This file was automatically generated by SWIG (http://www.swig.org).
- Version 4.0.2
- Do not make changes to this file unless you know what you are doing--modify
- the SWIG interface file instead.
CLASSES
builtins.object
GPIO
I2C
Serial
nes
class GPIO(builtins.object)
| GPIO(pinmode=0)
|
>>>
40pin GPIO口测试
wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。
下面以7号引脚——对应GPIO为GPIO1_A7 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平
直接用命令测试的步骤如下所示:
首先设置GPIO口为输出模式,其中pinMode函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \
wiringpi.pinMode(2, GPIO.OUTPUT) ; "
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.LOW)"
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.HIGH)"
在python3的命令行中测试的步骤如下所示:
首先使用python3命令进入python3的命令行模式
root@orangepi:~# python3
然后导入wiringpi的python模块
>>> import wiringpi
>>> from wiringpi import GPIO
然后设置GPIO口为输出模式,其中pinMode函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式
>>> wiringpi.wiringPiSetup()
0
>>> wiringpi.pinMode(2, GPIO.OUTPUT)
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
>>> wiringpi.digitalWrite(2, GPIO.LOW)
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
>>> wiringpi.digitalWrite(2, GPIO.HIGH)
wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的blink.py测试程序,blink.py测试程序会设置开发板26 pin中所有的GPIO口的电压不断的高低变化
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# ls blink.py
blink.py
root@orangepi:~/wiringOP-Python/examples# python3 blink.py
40pin SPI测试
S PI0_M2对应40pin | S PI1_M1对应40pin | S PI4_M2对应40pin | |
* *MOSI** | 19号引脚 | 40号引脚 | 13号引脚 |
* *MISO** | 21号引脚 | 38号引脚 | 11号引脚 |
CLK | 23号引脚 | 29号引脚 | 15号引脚 |
CS0 | 24号引脚 | 35号引脚 | 16号引脚 |
CS1 | 26号引脚 | 无 | 无 |
dtb o配置 | spi 0-m2-cs0-spidev
spi 0-m2-cs1-spidev spi0-m2 -cs0-cs1-spidev |
spi 1-m1-cs0-spidev | spi 4-m2-cs0-spidev |
在linux系统中,40 pin中的SPI默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
重启后进入系统先查看下linux系统中是否存在spidevx.x的设备节点,如果存在,说明SPI已经设置好了,可以直接使用。
orangepi@orangepi:~$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev4.0
上面是打开spi0-m2-cs0-cs1-spidev和spi4-m2-cs0-spidev后显示的结果。
然后可以使用examples中的spidev_test.py程序测试下SPI的回环功能,spidev_test.py程序需要指定下面的两个参数:
--channel:指定SPI的通道号
--port:指定SPI的端口号
先不短接 SPI 的 mosi 和 miso 两个引脚,运行 spidev_test.py 的输出结果如下所示,可以看到 TX 和 RX 的数据不一致
--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py --channel x --port x
spi mode: 0x0
max speed: 500000 Hz (500 KHz)
Opening device /dev/spidev0.0
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|
然后使用杜邦线短接SPI的txd和rxd两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI回环测试正常
--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py --channel x --port x
spi mode: 0x0
max speed: 500000 Hz (500 KHz)
Opening device /dev/spidev0.0
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
40pin I2C测试
由下表可知,Orange Pi 5 Ultra可用的i2c为i2c2、i2c4、i2c5和i2c8共四组 i2c总线
4组I2C总线在40pin中对应的引脚如下表所示。I2C2_M0和I2C2_M4同一时间只能使用其中一组,不能同时使用,它们都是同一个I2C,只是接到不同的引脚上去了而已,请不要以为它们是两组不同的I2C总线。
I2C总线 | SDA对应40pin | SCL对应40pin | dtbo对应配置 |
I2C2_M0 | 3号引脚 | 5号引脚 | i2c2-m0 |
I2C2_M4 | 11号引脚 | 13号引脚 | i2c2-m4 |
I2C4_M3 | 15号引脚 | 16号引脚 | i2c4-m3 |
I2C5_M2 | 37号引脚 | 12号引脚 | i2c5-m2 |
I2C8_M3 | 27号引脚 | 28号引脚 | i2c8-m3 |
在linux系统中,40 pin中的I2C总线默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
启动linux系统后,先确认下/dev下存在i2c的设备节点
orangepi@orangepi:~$ ls /dev/i2c-*
然后在40pin接头的i2c引脚上接一个i2c设备,这里以ds1307 RTC模块为例
然后使用i2cdetect -y命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用
orangepi@orangepi:~$ sudo i2cdetect -y 2 #i2c2的命令
orangepi@orangepi:~$ sudo i2cdetect -y 4 #i2c4的命令
orangepi@orangepi:~$ sudo i2cdetect -y 5 #i2c5的命令
orangepi@orangepi:~$ sudo i2cdetect -y 8 #i2c8的命令
然后可以运行examples中的ds1307.py测试程序读取RTC的时间
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 ds1307.py --device /dev/i2c-2
Thu 2023-01-05 14:57:55
Thu 2023-01-05 14:57:56
Thu 2023-01-05 14:57:57
^C
exit
40pin的UART测试
由下表可知,Orange Pi 5 Ultra可用的uart为uart3、uart4和uart6共三组uart总线,uart2用于调试串口功能没有计算在里面。
四组UART总线在40pin中对应的引脚如下表所示:
UART总线 | RX对应40pin | TX对应40pin | dtbo对应配置 |
UART3_M1 | 33号引脚 | 31号引脚 | uart3-m1 |
UART4_M2 | 19号引脚 | 23号引脚 | uart4-m2 |
UART6_M1 | 11号引脚 | 13号引脚 | uart6-m1 |
在linux系统中,40 pin中的UART默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:
进入linux系统后,先确认下/dev下是否存在对应uart的设备节点
orangepi@orangepi:~$ ls /dev/ttyS*
然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx
使用examples中的serialTest.py程序测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常
/dev/ttySX中的X需要替换为具体的uart设备节点的序号。
root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device /dev/ttySX
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3
Out: 4:^C
exit
硬件看门狗测试
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:
第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启
我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功
orangepi@orangepi:~$ sudo watchdog_test 10
open success
options is 33152,identity is sunxi-wdt
put_usr return,if 0,success:0
The old reset time is: 16
return ENOTTY,if -1,success:0
return ENOTTY,if -1,success:0
put_user return,if 0,success:0
put_usr return,if 0,success:0
keep alive
keep alive
keep alive
查看RK3588芯片的序列号
查看RK3588芯片序列号的命令如下所示,每个芯片的序列号都是不同的,所以可以使用序列号来区分多个开发板。
orangepi@orangepi:~$ cat_serial.sh
Serial : 1404a7682e86830c
安装Docker的方法
Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开
使用enable_docker.sh脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务
orangepi@orangepi:~$ enable_docker.sh
然后可以使用下面的命令测试下docker,如果能运行hello-world说明docker能正常使用了
orangepi@orangepi:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
256ab8fe8778: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
.….
下载安装arm64版本balenaEtcher的方法
balenaEtcher arm64版本的下载地址为:
deb版本balenaEtcher的安装使用方法:
deb版本的balenaEtcher安装命令如下所示:
orangepi@orangepi:~$ sudo apt install -y --fix-broken ./balena-etcher-electron_1.7.9+5945ab1f_arm64.deb
deb版本的balenaEtcher安装完成后,在Application中就可以打开了
balenaEtcher打开后的界面如下所示:
AppImage版本的balenaEtcher的使用方法:
宝塔Linux面板的安装方法
宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自宝塔官网)
宝塔Linux系统兼容性推荐的顺序为
Debian11 > Ubuntu 22.04 > Debian12
然后在linux系统中输入下面的命令就可以开始宝塔的安装
orangepi@orangepi:~$ sudo install_bt_panel.sh
然后宝塔安装程序会提醒是否安装Bt-Panel到/www文件夹,此时输入y即可
+----------------------------------------------------------------------
| Bt-WebPanel FOR CentOS/Ubuntu/Debian
+----------------------------------------------------------------------
| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.
+----------------------------------------------------------------------
| The WebPanel URL will be http://SERVER_IP:8888 when installed.
+----------------------------------------------------------------------
Do you want to install Bt-Panel to the /www directory now?(y/n): y
然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时6分钟,根据网络速度的不同可能会有一些差别
==================================================================
Congratulations! Installed successfully!
=============注意:首次打开面板浏览器将提示不安全=================
请选择以下其中一种方式解决不安全提醒
1、下载证书,地址:https://dg2.bt.cn/ssl/baota_root.pfx,双击安装,密码【www.bt.cn】
2、点击【高级】-【继续访问】或【接受风险并继续】访问
教程:https://www.bt.cn/bbs/thread-117246-1-1.html
mac用户请下载使用此证书:https://dg2.bt.cn/ssl/mac.crt
========================面板账户登录信息==========================
【云服务器】请在安全组放行 31402 端口
外网面板地址: https://183.17.125.22:31402/d1f7cff0
内网面板地址: https://10.31.2.175:31402/d1f7cff0
username: a8vazvbh
password: bc7bb4b7
浏览器访问以下链接,添加宝塔客服
https://www.bt.cn/new/wechat_customer
==================================================================
Time consumed: 14 Minute!
此时在浏览器中输入上面显示的面板地址就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的username和password就可以登录进宝塔
成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了
进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网(https://www.bt.cn)注册一个
最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等
测试宝塔的SSH终端登录
在宝塔的软件商店中可以安装Apache、MySQL和PHP等软件,也可以一键部署各种应用程序,这部分功能请自行探索,这里就不一一演示了
宝塔的更多功能可以参考下面资料自行探索
使用手册:http://docs.bt.cn
GitHub链接:https://github.com/aaPanel/BaoTa
设置中文环境以及安装中文输入法
注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。
Debian系统的安装方法
首先设置默认locale为中文
输入下面的命令可以开始配置locale
orangepi@orangepi:~$ sudo dpkg-reconfigure locales
然后在弹出的界面中选择zh_CN.UTF-8 UTF-8(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到<OK>,然后回车即可)
然后设置默认locale为zh_CN.UTF-8
退出界面后就会开始locale的设置,命令行显示的输出如下所示
orangepi@orangepi:~$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
en_US.UTF-8... done
zh_CN.UTF-8... done
Generation complete.
然后打开Input Method
然后选择OK
然后选择Yes
然后选择fcitx
然后选择OK
然后重启Linux系统才能使配置生效
然后打开Fcitx configuration
然后点击下图所示位置的+号
然后搜索Google Pinyin再点击OK
注意,如果看不到Google Pinyin选项,请尝试把Only Show Current Languageq前的√去掉试下。
然后将Google Pinyin放到最前面
然后打开Geany这个编辑器测试下中文输入法
中文输入法测试如下所示
通过Ctrl+Space快捷键可以切换中英文输入法
如果需要整个系统都显示为中文,可以将/etc/default/locale中的变量都设置为zh_CN.UTF-8
orangepi@orangepi:~$ sudo vim /etc/default/locale
# File generated by update-locale
LC_MESSAGES=zh_CN.UTF-8
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN.UTF-8
然后重启系统就能看到系统显示为中文了
Ubuntu 20.04系统的安装方法
注意,这一步不是很好拖动的,请耐心多试几次。
然后选择Apply System-Wide将中文设置应用到整个系统
然后设置Keyboard input method system为fcitx
然后重启Linux系统使配置生效
重新进入系统后,在下面的界面请选择不要再次询问我,然后请根据自己的喜好决定标准文件夹是否也要更新为中文
然后可以看到桌面都显示为中文了
然后我们可以打开Geany测试下中文输入法,打开方式如下图所示
打开Geany后,默认还是英文输入法,我们可以通过Ctrl+Space快捷键来切换成中文输入法,然后就能输入中文了
Ubuntu 22.04系统的安装方法
注意,这一步不是很好拖动的,请耐心多试几次。
然后选择Apply System-Wide将中文设置应用到整个系统
然后重启Linux系统使配置生效
重新进入系统后,在下面的界面请选择不要再次询问我,然后请根据自己的喜好决定标准文件夹是否也要更新为中文
然后可以看到桌面都显示为中文了
然后打开Fcitx5配置程序
然后选择使用拼音输入法
选择后的界面如下所示,再点击确定即可
然后我们可以打开Geany测试下中文输入法,打开方式如下图所示
打开Geany后,默认还是英文输入法,我们可以通过Ctrl+Space快捷键来切换成中文输入法,然后就能输入中文了
远程登录Linux系统桌面的方法
Ubuntu Gnome Wayland镜像不支持使用此处介绍的Nomachine和VNC来远程登录桌面。
使用NoMachine远程登录
请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:
https://knowledgebase.nomachine.com/DT10R00166
NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。
操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。
首先下载NoMachine软件Linux arm64 deb版本的安装包,然后安装到开发板的Linux系统中
- 由于RK3588是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载NoMachine for ARM ARMv8 DEB安装包,下载链接如下所示:
注意,这个下载链接可能会变,请认准Armv8/Arm64版本的deb包。
https://downloads.nomachine.com/download/?id=114&distro=ARM
另外在官方工具中也可以下载到NoMachine的安装包
然后将下载的nomachine_x.x.x_x_arm64.deb上传到开发板的Linux系统中
然后使用下面的命令在开发板的Linux系统中安装NoMachine
orangepi@orangepi:~$ sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb
- 然后下载NoMachine软件Windows版本的安装包,下载地址如下所示
注意,这个下载链接可能会变。
https://downloads.nomachine.com/download/?id=9
然后在Windows中安装NoMachine,安装完后请重启下电脑
然后在Window中打开NoMachine
NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面
然后点击OK
然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击OK开始登陆
然后在接下来的界面中都点击OK
最后就能看到开发板Linux系统的桌面了
使用VNC远程登录
操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。
Ubuntu20.04测试VNC很多问题,请不要使用这种方法。
首先运行set_vnc.sh脚本设置下vnc,记得加sudo权限
orangepi@orangepi:~$ sudo set_vnc.sh
You will require a password to access your desktops.
Password: #在这里设置vnc的密码,8位字符
Verify: #在这里设置vnc的密码,8位字符
Would you like to enter a view-only password (y/n)? n
xauth: file /root/.Xauthority does not exist
New 'X' desktop is orangepi5ultra:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/orangepi5ultra:1.log
Killing Xtightvnc process ID 3047
New 'X' desktop is orangepi5ultra:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/orangepi5ultra:1.log
使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:
- 首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认
Linux系统支持的部分编程语言测试
Debian Bullseye系统
Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Debian Bullseye默认安装有Python3
Python具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Debian Bullseye默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk,Debian Bullseye中最新版本为openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Debian Bookworm系统
Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Debian Bookworm默认安装有Python3
Python具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Ctrl+D快捷键可退出python的交互模式。
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Debian Bookworm默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Ubuntu Focal系统
Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Ubuntu Focal默认安装有Python3
Python3具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Ubuntu Focal默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-1ubuntu220.04)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-1ubuntu220.04, mixed mode, sharing)
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Ubuntu Jammy系统
Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Ubuntu Jammy默认安装有Python3
Python3具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Ubuntu Jammy默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk-18
orangepi@orangepi:~$ sudo apt install -y openjdk-18-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
openjdk 18.0.2-ea 2022-07-19
OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
QT的安装方法
使用下面的脚本可以安装QT5和QT Creator
orangepi@orangepi:~$ install_qt.sh
安装完后会自动打印QT的版本号
Ubuntu20.04自带的qt版本为5.12.8
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.12.8 in /usr/lib/aarch64-linux-gnu
Ubuntu22.04自带的QT版本为5.15.2
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.2 in /usr/lib/aarch64-linux-gnu
Debian11自带的QT版本为5.15.2
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.2 in /usr/lib/aarch64-linux-gnu
Debian12自带的QT版本为5.15.8
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.8 in /usr/lib/aarch64-linux-gnu
然后在Applications中就可以看到QT Creator的启动图标
也可以使用下面的命令打开QT Creator
orangepi@orangepi:~$ qtcreator
在QT和QT应用的启动过程中,如果提示下面的错误,请直接忽略,此错误对应用的运行不会有影响。
libGL error: failed to create dri screen
libGL error: failed to load driver: rockchip
libGL error: failed to create dri screen
libGL error: failed to load driver: rockchip
QT Creator打开后的界面如下所示
QT Creator的版本如下所示
然后设置下QT
然后就可以打开一个示例代码
点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明
然后点击下Configure Project
然后点击左下角的绿色三角形编译运行下示例代码
等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行
参考资料
https://wiki.qt.io/Install_Qt_5_on_Ubuntu
ROS安装方法
Ubuntu20.04安装ROS 1 Noetic的方法
- ROS 1当前活跃的版本如下所示,推荐版本为Noetic Ninjemys
https://wiki.ros.org/Distributions
ROS 1 Noetic Ninjemys官方安装文档链接如下所示:
ROS Noetic Ninjemys官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为Ubuntu20.04桌面版系统
然后使用下面的脚本安装ros1
orangepi@orangepi5ultra:~$ install_ros.sh ros1
使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件
注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。
install_ros.sh脚本会尝试修改/etc/hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
ERROR: error loading sources list:
The read operation timed out
orangepi@orangepi:~$ source /opt/ros/noetic/setup.bash
orangepi@orangepi:~$ sudo rosdep init
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update
orangepi@orangepi:~$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Add distro "foxy"
Add distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/orangepi/.ros/rosdep/sources.cache
然后在桌面中打开一个命令行终端窗口,再使用test_ros.sh脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用
orangepi@orangepi:~$ test_ros.sh
运行完test_ros.sh脚本后,会弹出下图所示的一个小海龟
然后请保持刚才打开终端窗口在最上面
Ubuntu20.04安装ROS 2 Galactic的方法
ROS 2当前活跃的版本如下所示,推荐版本为Galactic Geochelone
ROS 2 Galactic Geochelone官方安装文档链接如下所示:
docs.ros.org/en/galactic/Installation.html
http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html
ROS 2 Galactic Geochelone官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为Ubuntu20.04桌面版系统。安装ROS 2有几种方法,下面演示下通过Debian packages的方式来安装ROS 2 Galactic Geochelone
使用install_ros.sh脚本可以安装ros2
orangepi@orangepi:~$ install_ros.sh ros2
install_ros.sh脚本安装完ros2后会自动运行下ros2 -h命令,如果能看到下面的打印,说明ros2安装完成
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
optional arguments:
-h, --help show this help message and exit
Commands:
action Various action related sub-commands
bag Various rosbag related sub-commands
component Various component related sub-commands
daemon Various daemon related sub-commands
doctor Check ROS setup and other potential issues
interface Show information about ROS interfaces
launch Run a launch file
lifecycle Various lifecycle related sub-commands
multicast Various multicast related sub-commands
node Various node related sub-commands
param Various param related sub-commands
pkg Various package related sub-commands
run Run a package specific executable
security Various security related sub-commands
service Various service related sub-commands
topic Various topic related sub-commands
wtf Use `wtf` as alias to `doctor`
Call `ros2 <command> -h` for more detailed usage.
然后可以使用 test_ros.sh脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行
orangepi@orangepi5ultra:~$ test_ros.sh
[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'
[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]
[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'
[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]
[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
运行下面的命令可以打开rviz2
orangepi@orangepi:~$ source /opt/ros/galactic/setup.bash
orangepi@orangepi:~$ ros2 run rviz2 rviz2
ROS的使用方法请参考下ROS 2的文档
Ubuntu22.04安装ROS 2 Humble的方法
使用install_ros.sh脚本可以安装ros2
orangepi@orangepi:~$ install_ros.sh ros2
install_ros.sh脚本安装完ros2后会自动运行下ros2 -h命令,如果能看到下面的打印,说明ros2安装完成
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
optional arguments:
-h, --help show this help message and exit
Commands:
action Various action related sub-commands
bag Various rosbag related sub-commands
component Various component related sub-commands
daemon Various daemon related sub-commands
doctor Check ROS setup and other potential issues
interface Show information about ROS interfaces
launch Run a launch file
lifecycle Various lifecycle related sub-commands
multicast Various multicast related sub-commands
node Various node related sub-commands
param Various param related sub-commands
pkg Various package related sub-commands
run Run a package specific executable
security Various security related sub-commands
service Various service related sub-commands
topic Various topic related sub-commands
wtf Use `wtf` as alias to `doctor`
Call `ros2 <command> -h` for more detailed usage.
然后可以使用 test_ros.sh脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行
orangepi@orangepi5ultra:~$ test_ros.sh
[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'
[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]
[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'
[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]
[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
运行下面的命令可以打开rviz2
orangepi@orangepi:~$ source /opt/ros/humble/setup.bash
orangepi@orangepi:~$ ros2 run rviz2 rviz2
参考文档
http://docs.ros.org/en/humble/index.html
http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
安装内核头文件的方法
OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为/opt/
不同内核版本的内核头文件的deb包的名字可能不同,请以实际看到的为准。
orangepi@orangepi:~$ ls /opt/linux-headers*
/opt/linux-headers-legacy-rockchip-rk3588_x.x.x_arm64.deb
使用下面的命令可以安装内核头文件的deb包
内核头文件deb包的名字需要替换为实际的名字,请不要照抄。
orangepi@orangepi:~$ sudo dpkg -i /opt/linux-headers-legacy-rockchip-rk3588_1.x.x_arm64.deb
安装完后在/usr/src下就能看到内核头文件所在的文件夹
orangepi@orangepi:~$ ls /usr/src
linux-headers-5.10.160-rockchip-rk3588
然后可以编写一个hello内核模块测试下内核头文件
首先编写hello内核模块的代码,如下所示:
orangepi@orangepi:~$ vim hello.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk("Hello Orange Pi -- init\n");
return 0;
}
static void hello_exit(void)
{
printk("Hello Orange Pi -- exit\n");
return;
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
然后编写编译hello内核模块的Makefile文件,如下所示:
orangepi@orangepi:~$ vim Makefile
ifneq ($(KERNELRELEASE),)
obj-m:=hello.o
else
KDIR :=/lib/modules/$(shell uname -r)/build
PWD :=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order
endif
然后使用make命令编译hello内核模块,编译过程的输出如下所示:
如果复制的代码这里编译如果有问题,可以直接使用linux系统中预装的源码,hello源码的路径为:/usr/src/hello。
orangepi@orangepi:~$ sudo make
make -C /lib/modules/5.10.160-rockchip-rk3588/build M=/home/orangepi modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk3588'
CC [M] /home/orangepi/hello.o
MODPOST /home/orangepi/Module.symvers
CC [M] /home/orangepi/hello.mod.o
LD [M] /home/orangepi/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk3588'
编译完后会生成hello.ko内核模块
orangepi@orangepi:~$ ls *.ko
hello.ko
使用insmod命令可以将hello.ko内核模块插入内核中
orangepi@orangepi:~$ sudo insmod hello.ko
然后使用demsg命令可以查看下hello.ko内核模块的输出,如果能看到下面的输出说明hello.ko内核模块加载正确
orangepi@orangepi:~$ dmesg | grep "Hello"
[ 2871.893988] Hello Orange Pi -- init
使用rmmod命令可以卸载hello.ko内核模块
orangepi@orangepi:~$ sudo rmmod hello
orangepi@orangepi:~$ dmesg | grep "Hello"
[ 2871.893988] Hello Orange Pi -- init
[ 3173.800892] Hello Orange Pi -- exit
10.1寸MIPI LCD屏幕的使用方法
10.1寸MIPI 屏幕的组装方法
首先准备需要的配件
按照下图将12pin 触摸屏排线、31pin转40pin排线、30pin MIPI排线接到屏幕转接板上,注意触摸屏排线蓝色的绝缘面朝下,其它两根排线绝缘面朝上,如果接错会导致无显示或者不能触摸的问题
按照下图将连接好排线的转接板置于MIPI LCD屏上面,并通过31pin转40pin排线连接MIPI LCD屏与转接板
打开10.1寸MIPI LCD屏幕配置的方法
- linux镜像默认是没有打开mipi lcd屏幕的配置的,如果需要使用mipi lcd屏幕,需要手动打开才行。
- 开发板上mipi lcd屏幕的接口的位置如下图所示:
打开mipi lcd配置的步骤如下所示:
首先运行下orangepi-config,普通用户记得加sudo权限
orangepi@orangepi:~$ sudo orangepi-config
然后选择System
然后选择Hardware
然后使用键盘的方向键定位到opi5ultra-lcd,再使用空格选中
然后选择<Save>保存
然后选择<Back>
然后选择<Reboot>重启系统使配置生效
上面的设置最终会在/boot/orangepiEnv.txt中加入overlays=opi5ultra-lcd。设置完后可以先检查下。如果不存在这行配置,那么设置就是有问题。
如果觉得使用orangepi-config比较麻烦,也可以使用vim编辑器打开/boot/orangepiEnv.txt,然后加入overlays=opi5ultra-lcd这行配置也是可以。
orangepi@orangepi:~$ cat /boot/orangepiEnv.txt | grep "lcd"
overlays=opi5ultra-lcd #示例配置
启动后可以看到lcd屏幕的显示如下所示(默认为竖屏):
服务器版镜像旋转显示方向的方法
在/boot/orangepiEnv.txt中加入extraargs=fbcon=rotate:要旋转的方向这行配置就可以设置服务器版本的linux系统显示的方向,其中fbcon=rotate:后面的数字可以设置为:
0: 正常屏(默认为竖屏)
1: 顺时钟转90度
2: 翻转180度
3: 顺时钟转270度
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
extraargs=cma=128M fbcon=rotate:3
overlays=opi5ultra-disable-leds
注意,/boot/orangepiEnv.txt中如果默认有extraargs=cma=128M这行配置,fbcon=rotate:3这个配置添加到extraargs=cma=128M的后面即可(需要用空格隔开)。
然后重启linux系统就能看到lcd屏幕显示的方向已经旋转了
桌面版镜像旋转显示和触摸方向的方法
首先在linux系统中打开Display设置
然后在Rotation中选择想要旋转的方向
然后点击Apply
然后选择Keep this configuration
此时屏幕显示就已旋转完成,然后关闭掉Display程序即可
上面的步骤只会选择显示方向,并不会旋转触摸的方向,使用set_lcd_rotate.sh脚本可以旋转下触摸的方向,此脚本设置完后会自动重启,然后就可以测试触摸是否已经能正常使用了
None: 不旋转
orangepi@orangepi:~$ set_lcd_rotate.sh none
Left: 向左旋转90度
orangepi@orangepi:~$ set_lcd_rotate.sh left
Inverted: 上下翻转,相当于旋转180度
orangepi@orangepi:~$ set_lcd_rotate.sh inverted
Right: 向右旋转90度
orangepi@orangepi:~$ set_lcd_rotate.sh right
set_lcd_rotate.sh脚本主要做四件事:
旋转framebuffer显示的方向
旋转触摸的方向
关闭开机logo
重启系统
旋转触摸的方向是通过在/usr/share/X11/xorg.conf.d/40-libinput.conf中加入Option "TransformationMatrix" "x x x x x x x x x"这行配置来实现的。其中"x x x x x x x x x"不同的方向配置不同。
开关机logo使用说明
开关机logo默认只在桌面版的系统中才会显示
在/boot/orangepiEnv.txt中设置bootlogo变量为false可以关闭开关机logo
orangepi@orangepi:~$ vim /boot/orangepiEnv.txt
verbosity=1
bootlogo=false
在/boot/orangepiEnv.txt中设置bootlogo变量为true可以开启开关机logo
orangepi@orangepi:~$ vim /boot/orangepiEnv.txt
verbosity=1
bootlogo=true
开机logo图片在linux系统中的位置为
/usr/share/plymouth/themes/orangepi/watermark.png
替换开机logo图片后需要运行下命令才能生效
orangepi@orangepi:~$ sudo update-initramfs -u
OV13850和OV13855 MIPI摄像头的测试方法
请注意,在Linux 系统中,为了确保3A服务能够正常运行并获取正常的摄像头图像,需要禁用Docker服务。如果Docker服务未被禁用,摄像头捕捉的图像将不包含3A效果,呈现为偏暗的图像。禁用Docker服务的方法如下所示:
orangepi@orangepi:~$ sudo systemctl disable docker.socket docker.service containerd.service
orangepi@orangepi:~$ sudo reboot
目前开发板支持两款MIPI摄像头,OV13850和OV13855,具体的图片如下所示:
1300万MIPI接口的OV13850摄像头
1300万MIPI接口的OV13855摄像头
OV13850和OV13855摄像头使用的转接板和FPC排线是一样的,只是两款摄像头接在转接板上的位置不一样。FPC排线如下图所示,请注意FPC排线是有方向的,标注TO MB那端需要插到开发板的摄像头接口中,标注TO CAMERA那端需要插到摄像头转接板上。
摄像头转接板上总共有3个摄像头的接口,同一时间只能接一个使用,如下图所示,其中:
1号接口接OV13850摄像头
2号接口接OV13855摄像头
3号接口未使用,忽略即可
Orange Pi 5 Ultra开发板上总共有3个摄像头接口,我们定义Cam0、Cam1和Cam2的位置如下图所示:
摄像头插在开发板的Cam0接口的方法如下所示:
摄像头插在开发板的Cam1接口的方法如下所示:
摄像头插在开发板的Cam2接口的方法如下所示:
连接好摄像头到开发板上后,我们可以使用下面的方法来测试下摄像头:
首先运行下orangepi-config,普通用户记得加sudo权限
orangepi@orangepi:~$ sudo orangepi-config
然后选择System
然后选择Hardware
然后使用使用键盘的方向键定位到下图所示的位置,再使用空格选中想要打开的摄像头,其中opi5ultra-cam0表示在开发板的Cam0接口中使用ov13850或ov13855摄像头,opi5ultra-cam1表示在开发板的Cam1接口中使用ov13850或ov13855摄像头,opi5ultra-cam2表示在开发板的Cam2接口中使用ov13850或ov13855摄像头。
然后选择<Save>保存
然后选择<Back>
然后选择<Reboot>重启系统使配置生效
然后在桌面系统中打开一个终端,再运行下面的脚本
orangepi@orangepi:~$ test_camera.sh
然后就能看到摄像头的预览画面了
除了单摄外, 我们还可以同时使用两个摄像头或者三个摄像头(支持ov13850和ov13855混搭)。接好三摄后,然后和前面步骤一样,通过orangepi-config打开Cam0+Cam1+Cam2的配置,再重启系统,然后在桌面中打开终端运行test_camera.sh脚本即可看到三个摄像头的预览画面,如下图所示:
ZFS文件系统的使用方法
安装ZFS的方法
安装zfs前,请先确保使用的linux镜像为最新版本。另外,如果系统中已经安装了zfs,就无需重复安装了。
安装zfs前首先需要安装内核头文件,安装内核头文件的方法请参考安装内核头文件的方法小节的说明。
在Ubuntu20.04、Ubuntu22.04和Debian11系统中,zfs是无法通过apt直接安装的,这是因为默认的apt源中zfs版本低于2.1.6,存在和rk linux5.10内核不兼容的问题,这个问题在zfs的2.1.6及以后的版本中得到了修复。
为了解决这个问题,我们提供了能正常安装的zfs的deb包,可以从开发板的官方工具中下载到。打开官方工具,然后进入Ubuntu和Debian系统使用的zfs相关的deb包文件夹后,可以看到Ubuntu20.04、Ubuntu22.04和Debian11三种类型的deb包,请下载需要的版本。
下载完对应版本的zfs deb包后,请将它们上传到开发板的Linux系统中。上传方法请参考上传文件到开发板Linux系统中的方法小节的说明。
上传完成后,再在开发板linux系统的命令行中使用cd命令进入deb包的目录,然后使用下面的命令就可以安装zfs的deb包。
orangepi@orangepi:~$ sudo apt -y install ./*.deb
然后重启下linux系统就能看到zfs内核模块会自动加载了:
orangepi@orangepi:~$ lsmod | grep "zfs"
zfs 2801664 0
zunicode 327680 1 zfs
zzstd 471040 1 zfs
zlua 139264 1 zfs
zcommon 69632 1 zfs
znvpair 61440 2 zfs,zcommon
zavl 16384 1 zfs
icp 221184 1 zfs
spl 77824 6 zfs,icp,zzstd,znvpair,zcommon,zavl
在Debian12中,zfs的默认版本为2.1.11,所以我们可以通过下面的命令直接安装zfs,再次提醒下,安装前需要确保系统已安装内核头文件的deb包。
orangepi@orangepi:~$ sudo apt install -y zfsutils-linux zfs-dkms
创建ZFS池的方法
ZFS是基于存储池的,我们可以将多个物理存储设备添加到池中,然后从这个池中分配存储空间。
下面的内容是基于开发板接了一个NVMe SSD和一个U盘来演示的。
首先我们可以通过lsblk命令查看下开发板所有的存储设备,当前开发板接了一个NVMe SSD以及一个U盘,输出如下所示:
然后输入下面的命令可以创建一个ZFS池,包含NVMe SSD和U盘两个存储设备
orangepi@orangepi:~$ sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda
然后使用zpool list命令可以看到系统已经创建了一个名为pool1的ZFS池,并且ZFS池pool1的大小是NVME SSD的大小加上U盘的大小
然后执行df -h可以看到pool1被挂载到了/pool1目录
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 18M 1.6G 2% /run
/dev/mmcblk0p2 29G 6.0G 22G 22% /
tmpfs 7.7G 46M 7.7G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.7G 944K 7.7G 1% /tmp
/dev/mmcblk0p1 1022M 115M 908M 12% /boot
/dev/zram1 188M 4.5M 169M 3% /var/log
tmpfs 1.6G 80K 1.6G 1% /run/user/1000
pool1 489G 9.3M 489G 1% /pool1
使用下面的命令可以看到pool1的文件系统类型为zfs
orangepi@orangepi:~$ mount | grep pool1
pool1 on /pool1 type zfs (rw,xattr,noacl)
然后我们可以测试下拷贝一个文件到ZFS池中
orangepi@orangepi:~$ sudo cp -v /usr/local/test.mp4 /pool1/
'/usr/local/test.mp4' -> '/pool1/test.mp4'
测试ZFS的数据去重功能
ZFS的数据去重功能默认是关闭的,我们需要执行下面的命令打开
orangepi@orangepi:~$ sudo zfs set dedup=on pool1
然后做一个简单的测试,首先进入pool1中,再执行下面的命令生成1个1G大小的随机文件
orangepi@orangepi:~$ cd /pool1/
root@orangepi:/pool1$ sudo dd if=/dev/urandom of=test.1g bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/s
然后使用下面的命令将1G大小的随机文件拷贝1000份
root@orangepi:/pool1$ for ((i=0; i<1000; i++)); do sudo cp test.1g $i.test.1g; done
- 然后用du -lh可以看到目前池中总共有1002G的数据,但实际上ZFS池的大小只有504GB(SSD+U盘的总容量),是装不下那么大的数据的
root@orangepi:/pool1$ du -lh
1002G
测试ZFS的数据压缩功能
- 因为存储的数据不同,压缩节省的磁盘空间也会有所不同,所以我们选择压缩比较大的纯文本文件来进行压缩测试,执行下面的命令将/var/log/和/etc/目录打包成tar包
orangepi@orangepi:~$ cd /pool1/
root@orangepi:/pool1$ sudo tar -cf text.tar /var/log/ /etc/
然后通过ls -lh命令可以看到的文件大小以及在ZFS池中占用的空间都是27M
然后我们在ZFS池pool1中启用压缩功能
root@orangepi:/pool1$ sudo zfs set compression=lz4 pool1
然后再次执行下面的命令将/var/log/和/etc/目录打包成tar包
root@orangepi:/pool1$ sudo tar -cf text.tar /var/log/ /etc/
- 这时可以看到text.tar文件大小还是27M,但是在ZFS池中只占用9.47M的空间,说明文件被压缩了
CasaOS安装和使用方法
CasaOS是一个基于Docker生态系统的开源家庭云系统,它可以让您在自己的开发板上运行各种各样的家庭应用程序,例如NAS、家庭自动化、媒体服务器等。
CasaOS的安装方法
首先需要安装docker,Orangepi Pi发布的系统中已经预装了docker,这步可以跳过,可以使用下面的命令查看安装的docker的版本
orangepi@orangepi:~$ docker --version
然后在linux系统中输入下面的命令就可以开始CasaOS的安装
orangepi@orangepi:~$ curl -fsSL https://get.casaos.io | sudo bash
当看到终端输出下面的打印信息时,说明CasaOS已经安装完成
CasaOS的使用方法
安装完CasaOS后,在浏览器中输入http://开发板的IP地址就可以打开CasaOS
打开CasaOS后会弹出下面的欢迎界面,点击”Go”进入下一步
当第一次登录CasaOS时,登录界面是设置账号密码的界面,以后再登录时,就只会出现输入账号密码的界面了,在设置好账号密码后,点击”Create”进入下一步
在下面的界面中直接点击”Accept”进入下一步
现在就进入到CasaOS的主页面了,左上角有三个图标,可以进行功能设置,左边是性能面板,可以显示当前时间以及显示CPU、RAM、存储、网络的状态信息,右边是功能面板,有搜索、应用推荐、应用商店和文件管理等功能
可以点击左上角的第一个图标修改账号和密码
可以点击第二个图标进行基本功能的设置
左上角的第三个图标主要有两个功能,分别是切换到命令行模式和打印日志信息,在切换到命令行模式时,需要输入账号和密码,这里的账号和密码是指开发板Linux系统的账号和密码,端口系统默认选择22号
然后点击”Connect”,就可以进入命令行界面:
在第三个图标下另一个功能是打印CasaOS的日志,点击”Logs”即可进入,界面如下所示:
点击左下角的”Widget settings”,可以设置在主页面是否显示性能面板的小部件
点击主界面中”APP Store”可以打开应用商店,目前在应用商店中总共有70+款APP可以使用
这里以Home Assistant为例进行下载,在APP Store中找到Home Assistant,然后点击对应的”install”
下载完成后HostAssitant会出现在主页面中
点击主界面中的”Files”可以打开CasaOS自带的文件系统,然后就可以上传并保存文件
请确保其他设备和开发板在同一局域网内。
上传文件时需要切换到目标文件夹下,然后拖拽本地文件到图中指示区域,或者点击右上角的”Upload or Create”选择文件进行上传
如果想要卸载CasaOS,可以使用下面的命令:
orangepi@orangepi:~$ sudo casaos-uninstall
使用NPU的方法
准备工具
- 一台装有Ubuntu20.04操作系统的PC
根据RKNN-Toolkit2的官方文档,RKNN-Toolkit2目前版本支持的操作系统如下所示:
a. Ubuntu18.04 (x64)
b. Ubuntu20.04 (x64)
c. Ubuntu22.04 (x64)
在本文档中我们使用Ubuntu20.04 (x64)操作系统进行演示,其他版本的操作系统请自行测试。
一块装有Debian 11系统的RK3588开发板
准备一根品质良好的USB2.0公对公数据线,用于使用adb功能
在Ubuntu PC端安装RKNN-Toolkit2
Toolkit2是一款在Ubuntu PC平台上使用的开发套件,用户使用该工具提供的Python接口可以便捷地完成模型转换、推理和性能评估等功能。
在Ubuntu PC端,打开一个命令行窗口,然后输入以下命令来安装python3和pip3
test@test:~$ sudo apt-get install -y python3 python3-dev python3-pip
可以使用以下命令来查看已安装的python3的版本
test@test:~$ python3 --version
Python 3.8.10
然后输入以下命令来安装RKNN-Toolkit2的依赖包
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get -y install libxslt1-dev zlib1g-dev libglib2.0 \
libsm6 libgl1-mesa-glx libprotobuf-dev gcc
然后输入以下命令来下载1.5.2版本的RKNN-Toolkit2
test@test:~$ git clone https://github.com/airockchip/rknn-toolkit2 -b v1.5.2
然后输入以下命令安装python3相应版本的依赖包,这个命令将使用pip3安装文件requirements_cp38-1.5.2.txt中列出的依赖项。如果依赖安装不全的话就不指定安装源单独安装里面的每个包。
test@test:~$ pip3 install -r rknn-toolkit2/doc/requirements_cp38-1.5.2.txt -i https://mirror.baidu.com/pypi/simple
然后输入以下命令使用pip3来安装RKNN-Toolkit2软件包,安装完成后就可以使用RKNN-Toolkit2了
test@test:~$ pip3 install -r rknn-toolkit2/doc/requirements_cp38-1.5.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
使用RKNN-Toolkit2进行模型转换和模型推理
RKNN-Toolkit2支持将Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch等模型转为RKNN模型,然后在Ubuntu PC端通过仿真或使用开发板的NPU运行RKNN模型来进行推理。
在RKNN-Toolkit2的example文件夹中提供了相关的示例,以帮助用户更好地理解如何操作,我们以具有yolov5功能的ONNX模型为例进行说明。
在Ubuntu PC端仿真运行模型
RKNN-Toolkit2搭载了内置模拟器,可以让用户在Ubuntu PC端模拟模型在Rockchip NPU上的推理过程。
这样模型转换和推理均可以在Ubuntu PC端完成,从而帮助用户更快地测试和验证他们的模型。
- 首先切换到rknn-toolkit2/examples/onnx/yolov5目录
test@test:~$ cd rknn-toolkit2/examples/onnx/yolov5/
- 然后运行test.py脚本,该脚本首先将yolov5s_relu.onnx模型转换为可以在模拟器上运行的RKNN模型,然后使用模拟器仿真运行该模型对当前目录下的bus.jpg图片进行推理
test@test:~/rknn-toolkit2/examples/onnx/yolov5$ python3 test.py
- test.py脚本成功运行后将看到如下打印信息,表明该模型在bus.jpg图片中成功检测到了四个人和一辆公交车
done
--> Running model
W inference: The 'data_format' has not been set and defaults is nhwc!
done
class: person, score: 0.884139358997345
box coordinate left,top,right,down: [209.1040009856224, 244.4304337501526, 286.5742521882057, 506.7466902732849]
class: person, score: 0.8676778078079224
box coordinate left,top,right,down: [478.5757632255554, 238.58572268486023, 559.5273861885071, 526.479279756546]
class: person, score: 0.8246847987174988
box coordinate left,top,right,down: [110.57257843017578, 238.58099019527435, 230.54625701904297, 534.0008579492569]
class: person, score: 0.3392542004585266
box coordinate left,top,right,down: [79.96397459506989, 354.9062474966049, 122.13020265102386, 516.2529321908951]
class: bus , score: 0.7012234926223755
box coordinate left,top,right,down: [94.43931484222412, 129.53470361232758, 553.1492471694946, 468.0852304697037]
D NPUTransfer: Transfer client closed, fd = 3
转换得到的模型文件yolov5s_relu.rknn和推理的图片结果result.jpg保存在当前目录下
result.jpg图片展示了使用yolov5s_relu.rknn模型在bus.jpg图片中检测到的物体类别和置信率
在Ubuntu PC端使用开发板的NPU运行模型
RKNN-Toolkit2为用户提供了通过adb使用开发板的NPU进行推理的Python接口,可以让用户在Ubuntu PC端使用开发板的NPU来运行模型进行推理。
这样Ubuntu PC端可以根据模型在开发板的NPU上运行时的实际效果,使用Python提供的机器学习库,对模型进行优化和调整。
使用USB公对公数据线连接adb
在Ubuntu PC端通过adb对开发板进行操作,adb的使用方法请见ADB的使用方法一小节的说明。
更新开发板的rknn_server和librknnrt.so
librknnrt.so是一个板端的runtime库。
rknn_server是一个运行在开发板上的后台代理服务,用于接收PC通过USB传输过来的协议,然后执行板端runtime库中对应的接口,并返回结果给PC。
首先在Ubuntu PC端输入以下命令下载1.5.2版本的RKNPU2
test@test:~$ git clone https://github.com/rockchip-linux/rknpu2 -b v1.5.2
然后在Ubuntu PC端输入以下命令通过adb工具更新开发板的rknn_server
test@test:~$ adb push rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/* /usr/bin
然后在Ubuntu PC端输入以下命令通过adb工具更新开发板的librknnrt.so库
test@test:~$ adb push rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so /usr/lib
通过adb工具打开开发板的终端
test@test:~$ adb shell
打开开发板的rknn_server服务
root@orangepi:/# sudo restart_rknn.sh
root@orangepi:/# start rknn server,version:1.5.2(8babfeabuild@2023-08-25T10:30:31)
I NPUTransfer: Starting NPU TransferServer,Transfer version 2.1.0(b5861e7@2020-11-23T11:50:51)
可以使用下面的命令检查下,如果出现rknn_server的进程id,说明rknn_server已经打开,这样开发板的运行环境就搭建好了
root@orangepi:/# pgrep rknn_server
3131
修改示例中的参数
在Ubuntu PC端通过下面的命令可以查看到连接到Ubuntu PC的开发板的设备ID,这个ID在下面会用到
test@test:~$ adb devices
List of devices attached
4f9f859e5a120324 device
切换到rknn-toolkit2/examples/onnx/yolov5目录
test@test:~$ cd rknn-toolkit2/examples/onnx/yolov5/
- 使用vim编辑器对test.py文件进行修改
test@test:~/rknn-toolkit2/examples/onnx/yolov5$ vim test.py
在test.py文件中,我们需要对以下内容进行修改:
- 在预处理配置中,将目标平台修改为rk3588,这样模型转换后得到的是适用于RK3588开发板的NPU的RKNN模型
- 在初始化运行环境中,增加对目标平台和设备ID的说明,目标平台是rk3588,设备ID是前面通过adb得到的开发板的设备ID,运行模型进行推理的操作将会在RK3588开发板的NPU上进行
- 修改完毕后,保存退出
在Ubuntu PC端运行示例
- 输入以下命令运行test.py脚本,该脚本首先转换yolov5s_relu.onnx模型为RKNN模型,然后加载该模型到开发板的NPU上来对当前目录下的out.jpg图片进行推理
test@test:~/rknn-toolkit2/examples/onnx/yolov5$ python3 test.py
- 在打印信息中,我们可以看到Ubuntu PC通过adb工具使用开发板的NPU运行模型进行推理
--> Init runtime environment
I target set by user is: rk3588
I Check RK3588 board npu runtime version
I Starting ntp or adb, target is RK3588
I Device [4f9f859e5a120324] not found in ntb device list.
I Start adb...
I Connect to Device success!
I NPUTransfer: Starting NPU Transfer Client, Transfer version 2.1.0 (b5861e7@2020-11-23T11:50:36)
test.py脚本成功运行后,转换得到的模型文件yolov5s_relu.rknn和推理的图片结果result.jpg保存在当前目录下
运行的结果和在Ubuntu PC端仿真运行模型一小节是一样的
调用C接口部署RKNN模型到开发板上运行
RKNPU2为带有Rockchip NPU的芯片平台提供C编程接口,能够帮助用户部署使用RKNN-Toolkit2导出的RKNN模型,加速AI应用的落地。
在RKNPU2的example文件夹中,提供了将不同功能的RKNN模型部署到开发板的示例,我们以部署具有yolov5功能的RKNN模型到RK3588 Debian11平台为例进行说明。
下载交叉编译工具
由于开发板运行的是Linux系统,因此需要使用gcc交叉编译器来编译。推荐使用gcc-9.3.0-x86_64_arrch64-linux-gnu这个版本的gcc。
输入以下命令即可下载该版本的gcc,下载后会得到一个名为gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu的文件夹。
test@test:~$ git clone https://github.com/airockchip/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
修改脚本中的编译工具路径
切换到rknpu2/examples/rknn_yolov5_demo目录
test@test:~$ cd ~/rknpu2/examples/rknn_yolov5_demo
使用vim编辑器修改build-linux_RK3588.sh文件中的内容、
test@test:~/rknpu2/examples/rknn_yolov5_demo$ vim build-linux_RK3588.sh
在build-linux_RK3588.sh文件中,我们需要将变量TOOL_CHAIN的值更改为gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu文件夹的路径。这样,在运行build-android_RK3588.sh脚本时,会使用gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu文件夹中的交叉编译工具来进行编译。
修改完毕后,保存退出。
编译rknn_yolov5_demo
运行build-linux_RK3588.sh,该脚本通过交叉编译生成了适用于RK3588开发板并能够在其上运行RKNN模型进行推理的程序
test@test:~/rknpu2/examples/rknn_yolov5_demo$ sudo apt install cmake
test@test:~/rknpu2/examples/rknn_yolov5_demo$ sudo apt-get install g++-aarch64-linux-gnu
test@test:~/rknpu2/examples/rknn_yolov5_demo$ ./build-linux_RK3588.sh
运行build-linux_RK3588.sh完成后,在当前目录下会多出一个名为install的文件夹,该文件夹下的rknn_yoov5_demo_Linux文件夹中包含了通过交叉编译生成的程序以及与其相关的文件
test@test:~/rknpu2/examples/rknn_yolov5_demo$ ls install
rknn_yolov5_demo_Linux
部署rknn_yolov5_demo到开发板
在Ubuntu PC端,可以使用以下命令通过adb工具将rknn_yolov5_demo_Linux文件夹上传至开发板中,从而实现rknn_yolov5_demo在开发板上的部署。
test@test:~/rknpu2/examples/rknn_yolov5_demo$ adb push \
install/rknn_yolov5_demo_Linux /data/rknn_yolov5_demo_Linux
在开发板上运行rknn_yolov5_demo
在Ubuntu PC端通过adb shell进入开发板的文件系统
test@test:~$ adb shell
root@orangepi:/#
切换到rknn_yolov5_demo_Linux目录
root@orangepi:/# cd /data/rknn_yolov5_demo_Linux/
root@orangepi:/data/rknn_yolov5_demo_Linux# ls
lib model rknn_yolov5_demo rknn_yolov5_video_demo
然后运行rknn_yolov5_demo程序来进行推理,在下面的命令中该程序使用yolov5s-640-640.rknn模型对bus.jpg图片进行推理,整个运行过程将在开发板上完成
root@orangepi:/data/rknn_yolov5_demo_Linux# ./rknn_yolov5_demo \
./model/RK3588/yolov5s-640-640.rknn ./model/bus.jpg
运行完成后,推理的结果out.jpg图片保存在当前目录下
root@orangepi:/data/rknn_yolov5_demo_Linux# ls
lib model out.jpg rknn_yolov5_demo rknn_yolov5_video_demo
在Ubuntu PC端,我们可以使用以下命令通过adb工具下载out.jpg图片,然后使用图像查看器进行查看
test@test:~$ adb pull /data/rknn_yolov5_demo_Linux/out.jpg ~/Desktop/
/data/rknn_yolov5_demo_Linux/out.jpg: ...led. 1.9 MB/s (191507 bytes in 0.095s)
out.jpg图片展示了使用yolov5s-640-640.rknn模型在bus.jpg图片中检测到的物体类别和置信率
RK3588使用百度飞浆的方法
在rk3588开发板上使用百度飞浆,包括在PC端转换pdmodel模型为rknn模型和在板端使用百度飞浆开发的FastDeploy部署工具部署rknn模型。以下内容是在PC端系统为Ubuntu22.04,板端系统为Debian 11的环境下实现的,其他环境请自行测试。
Ubuntu PC端环境搭建
在Ubuntu PC端需要安装的工具及用途如下所示
工具名 | 用途 |
Anaconda3 | 用于创建和管理Python环境 |
Paddle2ONNX | 用于转换pdmodel模型为ONNX模型 |
RKNN-Toolkit2 | 用于转换ONNX模型为RKNN模型 |
PC端安装Anaconda3
- 在ubuntu PC端打开浏览器,在地址栏输入下面的网址下载安装Anaconda3的脚本,下载完成后将得到Anaconda3-2023.07-1-Linux-x86_64.sh文件
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.07-1-Linux-x86_64.sh
- 然后打开终端,运行Anaconda3-2023.07-1-Linux-x86_64.sh脚本安装Anaconda3
test@test:~/Downloads$ sh Anaconda3-2023.07-1-Linux-x86_64.sh
- 然后安装脚本会输出下面的提示信息,此时点击回车键继续安装
- 在点击回车键后,会出现Anaconda3的一些介绍信息,一直点击”↓“键
- 然后安装脚本会提醒是否接受许可证条款,此时输入yes按回车键既可
- 当看到终端中出现如下打印时,说明已经成功安装Anaconda3了
PC端安装RKNN-Toolkit2
- 在ubuntu PC端打开终端,通过Anaconda3工具创建python版本为3.8的环境
(base)test@test:~$ conda create -n fastdeploy python=3.8
- 激活刚才创建的python3.8的环境
(base)test@test:~$ conda activate fastdeploy
- 然后安装pip3开发工具和包管理工具
(fastdeploy)test@test:~$ sudo apt-get install python3-dev python3-pip
- 然后安装RKNN-Toolkit2的依赖包
(fastdeploy)test@test:~$ sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
- rknn_toolkit2对numpy存在特定依赖,因此需要先安装numpy==1.16.6
(fastdeploy)test@test:~$ pip install numpy==1.16.6
- 安装git工具
(fastdeploy)test@test:~$ sudo apt install -y git
- 然后执行下面的命令下载RKNN-Toolkit2,下载完成后会得到rknn-toolkit2文件夹
(fastdeploy)test@test:~$ git clone https://github.com/rockchip-linux/rknn-toolkit2
- 然后执行下面的命令,即可安装python3.8版本对应的RKNN-Toolkit2了
(fastdeploy)test@test:~$ pip install rknn-toolkit2/rknn-toolkit2/packages/rknn_toolkit2-1.6.0+81f21f4d-cp38-cp38-linux_x86_64.whl
PC端安装Paddle2ONNX
可以执行下面的命令安装paddle2onnx
(fastdeploy)test@test:~$ pip install paddle2onnx
板端环境搭建
在板端需要安装的工具及用途如下所示:
工具名 | 用途 |
Anaconda3 | 用于创建和管理Python环境 |
rknpu2 | rknpu2的基础驱动 |
FastDeploy | 编译后得到FastDeploy推理库 |
板端安装Anaconda3
- 在板端打开浏览器,在地址栏输入下面的网址下载安装Anaconda3的脚本,下载完成后将得到Anaconda3-2023.07-1-Linux-aarch64.sh文件
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.07-1-Linux-aarch64.sh
- 打开终端,运行Anaconda3-2023.07-1-Linux-aarch64.sh脚本安装Anaconda3
orangepi@orangepi:~/Downloads$ sh Anaconda3-2023.07-1-Linux-aarch64.sh
- 然后安装脚本会输出下面的提示信息,点击回车键继续安装
在点击回车键后,会出现Anaconda3的一些介绍信息,一直点击”↓“键
然后安装脚本会提醒是否接受许可证条款,此时输入yes按回车键既可
- 然后安装脚本会提醒安装Anaconda3到家目录,此时按回车键确认
然后安装脚本会提示是否初始化Anaconda3时,输入yes,然后按回车键
当看到终端中出现如下打印时,说明已经成功安装Anaconda3了
- 如果在终端使用conda命令,显示命令不存在,需要修改~/.bashrc文件
orangepi@orangepi:~$ vi ~/.bashrc
- 在~/.bashrc文件末尾加上下面一句代码
export PATH=/home/orangepi/anaconda3/bin:$PATH
- 然后在终端中输入下面的命令让刚才的修改生效
orangepi@orangepi:~$ source ~/.bashrc
- 然后在终端中输入下面的命令进行conda的初始化
(base)orangepi@orangepi:~$ conda init bash
- 然后关闭当前终端,重新打开一个终端,此时就可以正常使用conda命令了
板端安装rknpu2驱动
- 在板端打开终端,通过Anaconda3工具创建python版本为3.9的环境
(base)orangepi@orangepi:~$ conda create -n fastdeploy python=3.9
- 激活刚才创建的python3.9的环境
(base)orangepi@orangepi:~$ conda activate fastdeploy
- 通过wget下载rknpu2_device_install_1.4.0.zip文件
(fastdeploy)orangepi@orangepi:~$ wget https://bj.bcebos.com/fastdeploy/third_libs/rknpu2_device_install_1.4.0.zip
- 然后执行的下面的命令解压rknpu2_device_install_1.4.0.zip, 解压后会得到 rknpu2_device_install_1.4.0文件夹和__MACOSX文件夹
(fastdeploy)orangepi@orangepi:~$ unzip rknpu2_device_install_1.4.0.zip
- 切换到rknpu2_device_install_1.4.0目录下
(fastdeploy)orangepi@orangepi:~$ cd rknpu2_device_install_1.4.0/
- 在该目录下有rknn_install_rk3588.sh脚本,运行该脚本,即可完成板端rknpu2驱动的安装
(fastdeploy)orangepi@orangepi:~/rknpu2_device_install_1.4.0$ sudo bash rknn_install_rk3588.sh
板端编译FastDeploy C++ SDK
- 在编译时需要用到cmake命令,可以执行下面的命令安装cmake工具
(fastdeploy)orangepi@orangepi:~$ sudo apt-get install -y cmake
- 然后下载FastDeploy SDK,命令执行完成后会得到FastDeploy文件夹
(fastdeploy)orangepi@orangepi:~$ git clone https://github.com/PaddlePaddle/FastDeploy.git
- 切换到FastDeploy目录
(fastdeploy)orangepi@orangepi:~$ cd FastDeploy
- 创建编译目录build并切换build目录下
(fastdeploy)orangepi@orangepi:~/FastDeploy$ mkdir build && cd build
- 在编译前需要使用cmake来配置需要编译的项目信息,执行完下面的命令后,当前目录下会多出一些文件,其中就有用来编译的Makefile文件
(fastdeploy)orangepi@orangepi:~/FastDeploy/build$ cmake .. -DENABLE_ORT_BACKEND=ON \
-DENABLE_RKNPU2_BACKEND=ON \
-DENABLE_VISION=ON \
-DRKNN2_TARGET_SOC=RK3588 \
-DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy-0.0.3
- 执行下面的命令开始编译
(fastdeploy)orangepi@orangepi:~/FastDeploy/build$ make -j8
- 编译完成后,使用下面的命令将编译得到的文件安装到指定的路径
(fastdeploy)orangepi@orangepi:~/FastDeploy/build$ make install
- 编译完成后主要得到了fastdeploy-0.0.3文件夹,在该文件夹中,有配置环境变量的脚本文件fastdeploy_init.sh,使用该脚本配置环境变量后就可以使用编译得到的一些库文件了
(fastdeploy)orangepi@orangepi:~/FastDeploy/build$ source fastdeploy-0.0.3/fastdeploy_init.sh
使用FastDeploy部署模型示例
ResNet50_vd模型是一种用来进行目标分类的模型,下面以ResNet50_vd模型为例说明使用FastDeploy部署pdmodel模型的流程
Ubuntu PC端模型转换
- 在PC端打开终端,激活之前使用Anaconda3创建的python3.8的环境
test@test:~$ conda activate fastdeploy
- 在模型转换的脚本中,需要导入yaml模块和six模块,可以执行下面的命令进行安装
(fastdeploy)test@test:~$ pip install pyyaml six
- 执行下面的命令,可以下载得到ResNet50_vd_infer.tgz文件
(fastdeploy)test@test:~$ wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz
- 解压ResNet50_vd_infer.tgz文件后可以得到ResNet50_vd_infer文件夹,在这个文件夹中包含pdmodel模型文件inference.pdmodel以及其他相关的文件
(fastdeploy)test@test:~$ tar -xvf ResNet50_vd_infer.tgz
- 可以使用下面的命令通过paddle2onnx将pdmodel模型转换为onnx模型,执行完该命令后在ResNet50_vd_infer文件夹中会多出转换得到的onnx模型文件ResNet50_vd_infer.onnx
(fastdeploy)test@test:~$ paddle2onnx --model_dir ResNet50_vd_infer \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ResNet50_vd_infer/ResNet50_vd_infer.onnx \
--enable_dev_version True \
--opset_version 10
- 然后再使用下面的命令固定shape为[1,3,224,224],执行完命令后,会对ResNet50_vd_infer.onnx文件进行修改
(fastdeploy)test@test:~$ python -m paddle2onnx.optimize --input_model \
ResNet50_vd_infer/ResNet50_vd_infer.onnx \
--output_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
--input_shape_dict "{'inputs':[1,3,224,224]}"
- onnx模型转换为rknn模型需要使用FastDeploy SDK中的脚本,执行下面的命令下载FastDeploy
(fastdeploy)test@test:~$ git clone https://github.com/PaddlePaddle/FastDeploy.git
- 然后转移ResNet50_vd_infer文件夹到FastDeploy的对应目录下
(fastdeploy)test@test:~$ mv ResNet50_vd_infer \
FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/
- 切换到进行模型转换的目录下
(fastdeploy)test@test:~$ cd FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/
- 执行下面的命令,就可以将onnx模型转换为rknn模型了,最终在ResNet50_vd_infer目录下得到了rknn模型文件ResNet50_vd_infer_rk3588_unquantized.rknn
(fastdeploy)test@test:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/$ python ./rknpu2_tools/export.py \
--config_path ./rknpu2_tools/config/ResNet50_vd_infer_rknn.yaml \
--target_platform rk3588
- 在板端部署时,使用的rknn模型文件名称为ResNet50_vd_infer_rk3588.rknn,所以需要将ResNet50_vd_infer_rk3588_unquantized.rknn文件改名为ResNet50_vd_infer_rk3588.rknn
(fastdeploy)test@test:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/$ mv ResNet50_vd_infer/ResNet50_vd_infer_rk3588_unquantized.rknn \
ResNet50_vd_infer/ResNet50_vd_infer_rk3588.rknn
板端模型部署
- 在板端打开终端,激活之前使用Anaconda3创建的python3.9的环境
orangepi@orangepi:~$ conda activate fastdeploy
- 运行fastdeploy_init.sh脚本配置环境
(fastdeploy)orangepi@orangepi:~$ source FastDeploy/build/fastdeploy-0.0.3/fastdeploy_init.sh
- 切换到FastDeploy中部署ResNet50模型的示例目录
(fastdeploy)orangepi@orangepi:~$ cd FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp
- 在该目录下创建目录结构
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp$ mkdir build images ppclas_model_dir thirdpartys
- 将编译得到的fastdeploy-0.0.3文件夹拷贝到thirdpartys文件夹
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp$ cp -r ~/FastDeploy/build/fastdeploy-0.0.3/ thirdpartys/
将PC端中的ResNet50_vd_infer文件夹中的文件拷贝到ppclas_model_dir目录下
切换到images目录
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp$ cd images
- 通过wget在images目录下载测试图片
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/images$ wget https://gitee.com/paddlepaddle/PaddleClas/raw/release/2.4/deploy/images/ImageNet/ILSVRC2012_val_00000010.jpeg
- 然后切换到编译目录build下
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/images$ cd ../build/
- 使用cmake配置需要编译的内容,在执行完该命令后,当前目录下会出现一些文件,其中包括Makefile文件
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/build$ cmake ..
- 执行下面的命令开始编译
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/build$ make -j8
- 执行下面的命令将编译得到的文件安装到指定的路径,在执行完该命令后,在当前目录下会多出install目录
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/build$ make install
- 切换到install目录,使用模型进行推理就是在这里完成的
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/build$ cd install
- 使用下面的命令,便可以使用转换得到的rknn模型对ILSVRC2012_val_00000010.jpeg图片中的内容进行分类
(fastdeploy)orangepi@orangepi:~/FastDeploy/examples/vision/classification/paddleclas/rockchip/rknpu2/cpp/build/install$ ./rknpu_test \
./ppclas_model_dir/ ./images/ILSVRC2012_val_00000010.jpeg
- 在执行完该命令后,回显信息中会出现如下打印,表示图片中物体的类别ID号为644,置信率为0.072998
ClassifyResult(
label_ids: 644,
scores: 0.072998,
)
RK3588运行RKLLM大模型的方法
本小节中所使用的代码和模型都可以在开发板的官方工具中下载到。
RKLLM介绍
更详细的RKLLM介绍资料可以参考瑞芯微RKLLM官方资料。
RKLLM可以帮助用户快速将LLM模型部署到RK3588开发板中,整体框架如下图所示:
RKLLM工具链介绍
RKLLM-Toolkit 功能介绍
RKLLM-Toolkit是为用户提供在计算机上进行大语言模型的量化、转换的开发套件。通过该工具提供的Python接口可以便捷地完成以下功能:
- 模型转换:支持将Hugging Face格式的大语言模型(Large Language Model, LLM)转换为RKLLM模型,目前我们测试能够运行的模型包括TinyLLAMA、Qwen、Qwen2、Phi-3、ChatGLM3、Gemma、InternLM2和MiniCPM,转换后的RKLLM模型能够在RK3588平台上加载使用。
- 量化功能:支持将浮点模型量化为定点模型,目前支持的量化类型为w8a8,w8a8表示权重和激活都被量化为8位宽度。
RKLLM Runtime 功能介绍
RKLLM Runtime主要负责加载RKLLM-Toolkit转换得到的RKLLM模型,并在RK3588 板端通过调用NPU驱动在RK3588 NPU上实现RKLLM模型的推理。在推理RKLLM模型时,用户可以自行定义RKLLM模型的推理参数设置,定义不同的文本生成方式,并通过预先定义的回调函数不断获得模型的推理结果。更详细的说明可以参考瑞芯微RKLLM官方资料。
RKLLM开发流程介绍
RKLLM的整体开发步骤主要分为2个部分:模型转换和板端部署运行。
- 在Ubuntu PC端进行模型转换。在这一阶段,用户提供的Hugging Face格式的大语言模型将会被转换为RKLLM格式,以便在RK3588开发板上进行高效的推理。这一步骤包括:
a. 搭建RKLLM-Toolkit环境:在Ubuntu PC端用Conda搭建RKLLM-Toolkit的运行环境。
b. 模型转换:用RKLLM-Toolkit对获取的Hugging Face格式的大语言模型,或是自行训练得到的大语言模型(注意,模型保存的结构要与Hugging Face平台上的模型结构一致。)转换成能在RK3588开发板上运行的.rkllm 格式文件。
c. 编译测试代码:用rkllm-runtime编译能运行在RK3588开发板上的推理程序。
在Ubuntu PC端进行模型转换的具体开发流程请见Ubuntu PC端进行模型转换和编译源码的详细步骤小节的说明。
- 在开发板端部署运行。这个阶段涵盖了模型在RK3588开发板上的的实际部署和运行。它通常包括以下步骤:
a. 升级内核NPU版本:将开发板内核的NPU版本升级到v0.9.6。
b. 模型推理:将在Ubuntu PC端上用rkllm-runtime编译出来的推理程序和用RKLLM-Toolkit转换的.rkllm格式文件放在开发板上进行模型推理。可以在开发板上直接运行推理,具体开发流程请见本章的开发板端部署运行的详细步骤小节。也可以在开发板上进行板端Server服务的部署,在同一网段下的Ubuntu PC就可以通过访问对应地址来调用RKLLM模型进行推理,具体开发流程请见本章的开发板端Server的部署运行的详细步骤小节。
以上这两个步骤构成了完整的RKLLM开发流程,确保大语言模型能够成功转换、调试,并最终在RK3588 NPU上实现高效部署。
准备工具
- 一台装有Ubuntu 22.04操作系统的PC。在本文档中我们使用Ubuntu22.04(x64)操作系统进行演示,其他版本的操作系统请自行测试。
- 一块RK3588开发板。
Ubuntu PC端进行模型转换和编译源码的详细步骤
搭建RKLLM-Toolkit环境
- 首先下载RKLLM工具链。
test@test:~$ git clone https://github.com/airockchip/rknn-llm.git
- 下载后用ls命令检查下载的文件是否无误
test@test:~/test$ ls
rknn-llm
test@test:~$ cd rknn-llm
test@test:~/rknn-llm$ ls
CHANGELOG.md doc LICENSE README.md res rkllm-runtime rkllm-toolkit rknpu-driver
- rknn-llm中具体的文件目录如下所示:
test@test:~/rknn-llm$ sudo apt install tree
test@test:~/rknn-llm$ tree
doc
└──Rockchip_RKLLM_SDK_CN.pdf # RKLLM SDK说明文档
rkllm-runtime
├──examples
│ └── rkllm_api_demo # 板端推理调用示例工程
│ └── rkllm_server_demo # RKLLM-Server部署示例工程
├──runtime
│ └── Android
│ └── librkllm_api
│ └──arm64-v8a
│ └── librkllmrt.so # RKLLM Runtime库
│ └──include
│ └── rkllm.h # Runtime头文件
│ └── Linux
│ └── librkllm_api
│ └──aarch64
│ └── librkllmrt.so # RKLLM Runtime库
│ └──include
│ └── rkllm.h # Runtime头文件
rkllm-toolkit
├──examples
│ └── huggingface
│ └── test.py
├──packages
│ └── md5sum.txt
│ └── rkllm_toolkit-x.x.x-cp38-cp38-linux_x86_64.whl
rknpu-driver
└──rknpu_driver_0.9.6_20240322.tar.bz2
- 然后下载安装miniforge3安装包。
test@test:~$ wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh
test@test:~$ chmod 777 Miniforge3-Linux-x86_64.sh
test@test:~$ bash Miniforge3-Linux-x86_64.sh
镜像网站有时候会崩溃,导致miniforge3包下载不了,在开发板的官方工具中已经给出了下载好的miniforge3安装包。
运行bash Miniforge3-Linux-x86_64.sh时所有的选项直接按Enter就可以了。
- 然后进入Conda base环境。
test@test:~$ source ~/miniforge3/bin/activate
(base) test@test:~$
- 然后创建一个Python3.8版本(建议版本)名为RKLLM-Toolkit的Conda环境。
(base) test@test:~$ conda create -n RKLLM-Toolkit python=3.8
- 然后进入RKLLM-Toolkit Conda环境。
(base) test@test:~$ conda activate RKLLM-Toolkit
(RKLLM-Toolkit) test@test:~$
- 然后使用pip命令安装之前下载的RKLLM工具链中的whl包,目录为:rknn-llm/rkllm-toolkit/packages/ rkllm_toolkit-1.0.1-cp38-cp38-linux_x86_64.whl。在安装过程中,安装工具会自动下载 RKLLM-Toolkit 工具所需要的相关依赖包。
(base) test@test:~$ pip3 install rknn-llm/rkllm-toolkit/packages/rkllm_toolkit-1.0.1-cp38-cp38-linux_x86_64.whl
- 最后执行以下命令如果没有报错,则说明安装成功。
(RKLLM-Toolkit) test@test:~$ python
>>> from rkllm.api import RKLLM
模型转换
在此部分,我们提供了八种模型转换的示例供用户选择。若用户在从Hugging Face下载模型时遇到网络问题,我们的开发板官方工具中已经集成了下载的模型文件以及相应的.rkllm转换文件。
转换TinyLLAMA模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载TinyLLAMA模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的TinyLlama-1.1B-Chat-v1.0文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./TinyLlama.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/TinyLlama-1.1B-Chat-v1.0" #填你自己的路径
ret = llm.export_rkllm("./TinyLlama.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到TinyLlama.rkllm文件,大小约为1.09G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py TinyLlama.rkllm
转换Qwen模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载Qwen模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的Qwen-1_8B-Chat文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./Qwen.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/Qwen-1_8B-Chat" #填你自己的路径
ret = llm.export_rkllm("./Qwen.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下得到Qwen.rkllm文件,大小约为2.01G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py Qwen.rkllm
转换Qwen2模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载Qwen2模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/Qwen/Qwen1.5-0.5B
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的Qwen1.5-0.5B文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./Qwen2.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/Qwen1.5-0.5B" #填你自己的路径
ret = llm.export_rkllm("./Qwen2.rkllm")
- 用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下得到Qwen2.rkllm文件,大小约为746M。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py Qwen2.rkllm
转换Phi-3模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载Phi-3模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/microsoft/Phi-3-mini-4k-instruct
(RKLLM-Toolkit) test@test:~$ cd Phi-3-mini-4k-instruct
(RKLLM-Toolkit) test@test:~/Phi-3-mini-4k-instruct$ git reset --hard 291e9e30e38030c23497afa30f3af1f104837aa6
(RKLLM-Toolkit) test@test:~/Phi-3-mini-4k-instruct$ cd ..
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的Phi-3-mini-4k-instruct文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./Phi3.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/Phi-3-mini-4k-instruct" #填你自己的路径
ret = llm.export_rkllm("./Phi3.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到Phi3.rkllm文件,大小约为3.66G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py Phi3.rkllm
转换ChatGLM3模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载ChatGLM3模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/THUDM/chatglm3-6b
(RKLLM-Toolkit) test@test:~$ cd chatglm3-6b
(RKLLM-Toolkit) test@test:~/chatglm3-6b$ git reset --hard 103caa40027ebfd8450289ca2f278eac4ff26405
(RKLLM-Toolkit) test@test:~/chatglm3-6b$ cd ..
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的chatglm3-6b文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./chatglm3.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/chatglm3-6b" #填你自己的路径
ret = llm.export_rkllm("./chatglm3.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到chatglm3.rkllm文件,大小约为6.07G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py chatglm3.rkllm
转换Gemma模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载Gemma模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/google/gemma-2b-it
(RKLLM-Toolkit) test@test:~$ cd gemma-2b-it
(RKLLM-Toolkit) test@test:~/gemma-2b-it$ git reset --hard de144fb2268dee1066f515465df532c05e699d48
(RKLLM-Toolkit) test@test:~/gemma-2b-it$ cd ..
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的gemma-2b-it文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./Gemma.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/gemma-2b-it" #填你自己的路径
ret = llm.export_rkllm("./Gemma.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到Gemma.rkllm文件,大小约为3.81G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py Gemma.rkllm
转换InternLM2模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载InternLM2模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/internlm/internlm2-chat-1_8b
(RKLLM-Toolkit) test@test:~$ cd internlm2-chat-1_8b
(RKLLM-Toolkit) test@test:~/internlm2-chat-1_8b$ git reset --hard ecccbb5c87079ad84e5788baa55dd6e21a9c614d
(RKLLM-Toolkit) test@test:~/internlm2-chat-1_8b$ cd ..
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的internlm2-chat-1_8b文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./InternLM2.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/internlm2-chat-1_8b" #填你自己的路径
ret = llm.export_rkllm("./InternLM2.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到InternLM2.rkllm文件,大小约为1.94G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py InternLM2.rkllm
转换MiniCPM模型
- 先在Ubuntu操作系统上安装Git LFS,如果已安装可跳过这一步。
(RKLLM-Toolkit) test@test:~$ sudo apt update
(RKLLM-Toolkit) test@test:~$ sudo apt install curl git
(RKLLM-Toolkit) test@test:~$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
(RKLLM-Toolkit) test@test:~$ sudo apt install git-lfs
(RKLLM-Toolkit) test@test:~$ git lfs install
- 接着下载MiniCPM模型。
(RKLLM-Toolkit) test@test:~$ git clone https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16
(RKLLM-Toolkit) test@test:~$ cd MiniCPM-2B-sft-bf16
(RKLLM-Toolkit) test@test:~/MiniCPM-2B-sft-bf16$ git reset --hard 79fbb1db171e6d8bf77cdb0a94076a43003abd9e
(RKLLM-Toolkit) test@test:~/MiniCPM-2B-sft-bf16$ cd ..
-
修改rknn-llm/rkllm-toolkit/examples/huggingface/test.py里面的modelpath变量的值为下载的MiniCPM-2B-sft-bf16文件夹所在的绝对路径,然后修改ret
llm.export_rkllm("./qwen.rkllm")括号中的值为要保存的.rkllm格式文件路径,我们将其修改为ret = llm.export_rkllm("./MiniCPM.rkllm")。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-toolkit/examples/huggingface/test.py
modelpath = "/path/your/MiniCPM-2B-sft-bf16" #填你自己的路径
ret = llm.export_rkllm("./MiniCPM.rkllm")
- 然后用python运行rknn-llm/rkllm-toolkit/examples/huggingface/test.py文件来转换大模型。
(RKLLM-Toolkit) test@test:~$ cd ~/rknn-llm/rkllm-toolkit/examples/huggingface
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ python test.py
- 转换成功的输出如下所示:
- 最后转换成功会在当前目录下会得到MiniCPM.rkllm文件,大小约为3.07G。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ ls
test.py MiniCPM.rkllm
编译测试代码
- 首先切换回~目录然后下载交叉编译工具链并解压。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-toolkit/examples/huggingface$ cd ~
(RKLLM-Toolkit) test@test:~$ sudo apt install cmake
(RKLLM-Toolkit) test@test:~$ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
(RKLLM-Toolkit) test@test:~$ tar -xJf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
- 然后修改rknn-llm/rkllm-runtime/examples/rkllm_api_demo/build-linux.sh中的GCC_COMPILER_PATH为~/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-runtime/examples/rkllm_api_demo/build-linux.sh
- 然后用rknn-llm/rkllm-runtime/examples/rkllm_api_demo/ build-linux.sh编译测试代码。
(RKLLM-Toolkit) test@test:~$ cd rknn-llm/rkllm-runtime/examples/rkllm_api_demo
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-runtime/examples/rkllm_api_demo$ bash build-linux.sh
- 最后编译完查看生成的llm_demo文件。
(RKLLM-Toolkit) test@test:~/rknn-llm/rkllm-runtime/examples/rkllm_api_demo$ ls build/build_linux_aarch64_Release
CMakeCache.txt CMakeFiles cmake_install.cmake llm_demo Makefile
开发板端部署运行的详细步骤
模型推理
建议使用内存为8GB或8GB以上的开发板进行测试。内存为4GB的开发板可能因为内存不足而导致模型无法运行。
TinyLLAMA模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和TinyLlama.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo TinyLlama.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./TinyLlama.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下:
注意,TinyLLAMA模型只支持英文问答,用中文提问的话模型会胡言乱语。在开发板端运行TinyLLAMA的话模型的回答比较随机,不能很好地交互。
- 最后输入exit就可以退出了。
user: exit
Qwen模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和Qwen.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo Qwen.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./Qwen.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下:
- 最后输入exit就可以退出了。
user: exit
Qwen2模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和Qwen2.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo Qwen2.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./Qwen2.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
Phi-3模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和Phi3.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo Phi3.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./Phi3.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
ChatGLM3模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和chatglm3.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo chatglm3.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./chatglm3.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
Gemma模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和Gemma.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo Gemma.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./Gemma.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
InternLM2模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和InternLM2.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo InternLM2.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./InternLM2.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
MiniCPM模型推理
- 首先将在Ubuntu PC端编译好的llm_demo程序和MiniCPM.rkllm模型文件上传到开发板中。
orangepi@orangepi:~$ ls
llm_demo MiniCPM.rkllm
- 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
orangepi@orangepi:~$ ulimit -HSn 102400
- 然后运行下面的命令来启动模型。
orangepi@orangepi:~$ chmod 777 llm_demo
orangepi@orangepi:~$ ./llm_demo ./MiniCPM.rkllm
- 运行成功的话就会弹出以下界面。
- 如果运行完弹出以下失败界面的话,reboot重启开发板就可以了。第四步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
- 在交互界面输入问题后按回车,测试成功的结果如下
- 最后输入exit就可以退出了
user: exit
开发板端Server的部署运行的详细步骤
运行此小节开发板和Ubuntu PC必须处于同一网段。
在使用RKLLM-Toolkit完成模型转换并得到RKLLM模型后,用户可以使用该模型在Linux开发板上进行板端Server服务的部署,即在Linux设备上设置服务端并向局域网内的所有人暴露网络接口,其他人通过访问对应地址即可调用RKLLM模型进行推理,实现高效简洁的交互。有两种不同的Server部署实现:
- 基于Flask搭建的RKLLM-Server-Flask,用户能够在客户端通过request请求的方式实现与服务端间的API访问。
- 基于Graio搭建的RKLLM-Server-Gradio,能够快速实现网页服务端的搭建,进行可视化交互。
基于 Flask 搭建服务器
服务器端(开发板端)
- 首先将之前下载的RKLLM工具链rknn-llm中的rkllm-runtime/examples/rkllm_server_demo/rkllm_server文件夹和转换好的.rkllm模型文件上传到开发板中,想用哪个大模型就上传哪个.rkllm模型文件。
orangepi@orangepi:~$ ls
Qwen2.rkllm Qwen.rkllm rkllm_server TinyLlama.rkllm chatglm3.rkllm Gemma.rkllm InternLM2.rkllm MiniCPM.rkllm Phi3.rkllm
- 然后将rkllm_server/flask_server.py文件中的rkllm_lib = ctypes.CDLL('lib/librkllmrt.so')修改为rkllm_lib = ctypes.CDLL('/usr/lib/librkllmrt.so'),将rknnllm_param.use_gpu= True修改为rknnllm_param.use_gpu = False。
orangepi@orangepi:~$ vim rkllm_server/flask_server.py
rkllm_lib = ctypes.CDLL('/usr/lib/librkllmrt.so')
rknnllm_param.use_gpu = False
- 然后在开发板上安装pip库和flask库。
如果使用的是Debian12系统,则需要将在命令pip install flask==2.2.2 Werkzeug==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple后面加上--break-system-packages
即以下命令:
pip install flask==2.2.2 Werkzeug==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple --break-system-packages
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install python3-pip -y
orangepi@orangepi:~$ pip install flask==2.2.2 Werkzeug==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 然后切换到rkllm_server目录下运行flask_server.py 启动服务
rkllm_model_path是转换后模型的绝对路径。
如果想使用TinyLlama就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/TinyLlama.rkllm。
如果想使用Qwen2就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Qwen2.rkllm。
如果想使用Phi-3就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Phi3.rkllm。
如果想使用ChatGLM3就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/chatglm3.rkllm。
如果想使用Gemma就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Gemma.rkllm。
如果想使用InternLM2就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/InternLM2.rkllm。
如果想使用MiniCPM就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/MiniCPM.rkllm。
orangepi@orangepi:~$ cd rkllm_server
orangepi@orangepi:~/rkllm_server$ python3 flask_server.py --target_platform rk3588 --rkllm_model_path ~/Qwen.rkllm
- 成功的话就如下图所示,这个时候服务器端就配置好了。
- 如果运行的时候弹出以下失败界面的话,reboot重启开发板就可以了。第五步运行成功的话则跳过这一步。
orangepi@orangepi:~$ sudo reboot
客户端(Ubuntu PC)
无论在开发板端用的是什么模型,客户端都不用修改对应的模型文件。
- 首先在ubuntu PC端用终端进入 RKLLM-Toolkit Conda环境。
test@test:~$ source ~/miniforge3/bin/activate
(base) test@test:~$ conda activate RKLLM-Toolkit
(RKLLM-Toolkit) test@test:~$
-
然后将文件rknn-llm/rkllm-runtime/examples/rkllm_server_demo/chat_api_flask.py中server_url
'http://172.16.10.102:8080/rkllm_chat'中的172.16.10.102修改为实际开发板的地址,用户需要根据自己部署的具体地址进行调整。
(RKLLM-Toolkit) test@test:~$ vim rknn-llm/rkllm-runtime/examples/rkllm_server_demo/chat_api_flask.py
- 然后运行rknn-llm/rkllm-runtime/examples/rkllm_server_demo/chat_api_flask.py文件。
(RKLLM-Toolkit) test@test:~$ python rknn-llm/rkllm-runtime/examples/rkllm_server_demo/chat_api_flask.py
- 运行后输入自己的问题按回车就可以了
在开发板Server端使用TinyLLAMA模型,在Ubuntu PC端进行测试,如下图所示,TinyLLAMA只能用英文。
在开发板Server端使用Qwen模型,在Ubuntu PC端进行测试,如下图所示:
- 在开发板Server端使用Qwen2模型,在Ubuntu PC端进行测试,如下图所示,有时候会出现其他的不相干的回答。
在开发板Server端使用Phi-3模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用ChatGLM3模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用Gemma模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用InternLM2模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用MiniCPM模型,在Ubuntu PC端进行测试,如下图所示:
MiniCPM使用这种方式效果很差,不推荐使用。
基于Gradio搭建服务器
服务器端(开发板端)
- 首先将之前下载的RKLLM工具链rknn-llm中的rkllm-runtime/examples/rkllm_server_demo/rkllm_server文件夹和转换好的.rkllm模型文件上传到开发板中,想用哪个大模型就上传哪个.rkllm模型文件。
orangepi@orangepi:~$ ls
Qwen2.rkllm Qwen.rkllm rkllm_server TinyLlama.rkllm
- 然后将rkllm_server/gradio_server.py文件中的rkllm_lib = ctypes.CDLL('lib/librkllmrt.so')修改为rkllm_lib = ctypes.CDLL('/usr/lib/librkllmrt.so'),将rknnllm_param.use_gpu= True修改为rknnllm_param.use_gpu = False。
orangepi@orangepi:~$ vim rkllm_server/gradio_server.py
rkllm_lib = ctypes.CDLL('/usr/lib/librkllmrt.so')
rknnllm_param.use_gpu = False
- 然后在开发板上安装pip库和gradio库。
如果使用的是Debian12系统,则需要将在命令pip3 install gradio>=4.24.0 -i https://pypi.tuna.tsinghua.edu.cn/simple后面加上--break-system-packages
即以下命令:
pip3 install gradio>=4.24.0 -i https://pypi.tuna.tsinghua.edu.cn/simple --break-system-packages
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install python3-pip -y
orangepi@orangepi:~$ pip3 install gradio>=4.24.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 然后切换到rkllm_server目录下运行gradio_server.py启动服务。
rkllm_model_path是转换后模型的绝对路径。
如果想使用TinyLlama就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/TinyLlama.rkllm。
如果想使用Qwen2就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Qwen2.rkllm。
如果想使用Phi-3就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Phi3.rkllm。
如果想使用ChatGLM3就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/chatglm3.rkllm。
如果想使用Gemma就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/Gemma.rkllm。
如果想使用InternLM2就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/InternLM2.rkllm。
如果想使用MiniCPM就把--rkllm_model_path ~/Qwen.rkllm修改为--rkllm_model_path ~/MiniCPM.rkllm。
orangepi@orangepi:~$ cd rkllm_server
orangepi@orangepi:~/rkllm_server$ python3 gradio_server.py --target_platform rk3588 --rkllm_model_path ~/Qwen.rkllm
- 成功的话就如下图所示,这个时候服务器端就配置好了。
图中的http://0.0.0.0:8080不是表示IP地址是这个,真正需要用的IP地址是用户自己开发板的实际地址。
客户端
- 首先在当前局域网下通过任意一台电脑打开浏览器,直接访问”开发板IP:8080”,打开的界面如下图:
- 然后在inputTextBox输入框中输入问题后按回车。
- 在开发板Server端使用TinyLLAMA模型,在Ubuntu PC端进行测试,如下图所示:
- 在开发板Server端使用Qwen模型,在Ubuntu PC端进行测试,如下图所示:
- 在开发板Server端使用Qwen2模型,在Ubuntu PC端进行测试,如下图所示,有时候会出现其他的不相干的回答。
在开发板Server端使用Phi-3模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用ChatGLM3模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用Gemma模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用InternLM2模型,在Ubuntu PC端进行测试,如下图所示:
在开发板Server端使用MiniCPM模型,在Ubuntu PC端进行测试,如下图所示:
RK3588运行RKLLM大模型的性能测试结果
为了进行大模型性能测试,首先需要在官方工具中下载大模型性能测试文件main.cpp,下载后,将其替换掉PC端用来编译测试代码的rknn-llm/rkllm-runtime/examples/rkllm_api_demo/src/main.cpp文件
参考编译测试代码小节重新编译llm_demo文件,然后根据开发板端部署运行的详细步骤小节运行大模型。
在模型运行后输入问题,然后新开一个终端测试性能。性能测试是在模型回答问题的时候测试的。
NPU负载测试:使用另一个终端在模型回答问题的时候运行以下命令:
orangepi@orangepi:~$ sudo cat /sys/kernel/debug/rknpu/load
NPU load: Core0: 51%, Core1: 51%, Core2: 51%,
- CPU负载、内存:使用另一个终端在模型回答问题的时候运行以下命令:
计算CPU负载的时候将llm_demo进程的CPU%值 / CPU数量
计算内存的时候用llm_demo进程的MEM%值 * MEM总量
可以在CPU的选项中点一下,界面就会根据CPU使用量从大到小进行排列显示。
orangepi@orangepi:~$ htop
推理:推理速度,简称为推理,在模型推理时输出的token数量/模型推理所用时间。在大模型运行的终端中有打印测试结果,如下图所示:
预填充:计算输入的token数量/从模型运行到输出第一个token的时间。采用我们给定的问题进行输入,在大模型运行的终端中有打印测试结果。
由于不同的大型语言模型在处理同一句话时,可能会采用不同的分词策略,导致生成的token数量存在差异,而实际输入的token数量在RKLLM中没有提供相应的获取渠道,所以我们采用GPT生成了具有256个token的问题作为输入。导致测试的结果存在一定误差。
问:在深度学习领域,卷积神经网络(CNN)和循环神经网络(RNN)在处理图像和时间序列数据方面有哪些关键差异?请详细解释每种网络结构的主要特点,包括它们在不同类型的任务中如何应用,例如图像识别、自然语言处理和时间序列预测。此外,讨论一下这些网络如何处理过拟合问题,以及如何使用正则化技术如dropout来提高模型的泛化能力。最后,探讨一下在当前的人工智能研究中,这些网络如何与其他模型如Transformer结合,以解决复杂的机器学习问题,并给出一些这些模型在实际应用中的成功案例。
- 所有模型的测试结果如下表:
模型 | * *参 数 大 小 ** | d typ e | 性能 | CPU
负 载 |
N PU
负 载 |
内存 占用 |
T inyLLAMA | 1 .1B | W 8a8 | 预填充:58.6157 token/s
推理:12.7262 token/s |
15.9% | 3
|
1.376G |
Qwen | 1 .8B | W 8a8 | 预填充:168.525 token/s
推理:10.8891 token/s |
13.7% | 3
|
2.72G |
Qwen2 | 0 .5B | W 8a8 | 预填充:440.511 token/s
推理:17.4542 token/s |
1 7.75% | 3
|
1.344G |
Phi-3 | 3 .8B | W 8a8 | 预填充:22.8119 token/s
推理:4.72983 token/s |
1 3.13% | 3
|
4.288G |
ChatGLM3 | 6B | W 8a8 | 预填充:48.8464 token/s
推理:3.80383 token/s |
8.3% | 3
|
7.04G |
Gemma | 2B | W 8a8 | 预填充:112.489 token/s
推理:6.41746 token/s |
8.25% | 3
|
4.8G |
I nternLM2 | 1 .8B | W 8a8 | 预填充:117.099 token/s
推理:9.139 token/s |
1 1.87% | 3
|
2.432G |
* *MiniCPM** | 2B | W 8a8 | 预填充:77.4655 token/s
推理:6.16648 token/s |
1 6.25% | 3
|
3.904G |
关机和重启开发板的方法
在Linux系统运行的过程中,如果直接拔掉Type-C电源断电,可能会导致文件系统丢失某些数据或者损坏,所以在断电前请先使用poweroff命令关闭开发板的Linux系统,然后再拔掉电源。
orangepi@orangepi:~$ sudo poweroff
另外开发板配有开关机按键,还可以短按开发板上的开关机按键来关机。
注意,Linux桌面版系统按下开关机按键后会弹出下图所示的确认框,需要点击Shut Down选项后才会关机。
Orange Pi OS Arch系统使用说明
Orange Pi OS Arch系统适配情况
功能 | OPi OS Arch Gnome Wayland |
HDMI TX视频 | OK |
HDMI TX音频 | OK |
HDMI RX视频 | OK |
HDMI RX音频 | OK |
USB2.0x2 | OK |
USB3.0x2 | OK |
2.5G网口 | OK |
网口状态灯 | OK |
WIFI | OK |
蓝牙 | OK |
调试串口 | OK |
RTC | OK |
FAN风扇接口 | OK |
eMMC扩展接口 | OK |
GPIO(40pin) | OK |
UART(40pin) | OK |
SPI(40pin) | OK |
I2C(40pin) | OK |
CAN(40pin) | OK |
PWM(40pin) | OK |
TF 卡启动 | OK |
OV13850摄像头 | OK |
OV13855摄像头 | OK |
SPI+NVME启动 | OK |
LCD | OK |
MIC | OK |
耳机播放 | OK |
耳机录音 | OK |
三色LED 灯 | OK |
GPU | OK |
NPU | NO |
VPU | OK |
开关机按键 | OK |
看门狗测试 | OK |
MPV硬解视频 | OK |
10.1寸MIPI LCD屏幕的使用方法
10.1寸MIPI 屏幕的组装方法
首先准备需要的配件
按照下图将12pin 触摸屏排线、31pin转40pin排线、30pin MIPI排线接到屏幕转接板上,注意触摸屏排线蓝色的绝缘面朝下,其它两根排线绝缘面朝上,如果接错会导致无显示或者不能触摸的问题
按照下图将连接好排线的转接板置于MIPI LCD屏上面,并通过31pin转40pin排线连接MIPI LCD屏与转接板
打开10.1寸MIPI LCD屏幕配置的方法
OPi OS Arch镜像默认是没有打开mipi lcd屏幕的配置的,如果需要使用mipi lcd屏幕,需要手动打开才行。
开发板上mipi lcd屏幕的接口如下图所示:
打开mipi lcd配置的方法如下所示:
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-opi5ultra-lcd.dtbo #需要添加的配置
然后重启OPi OS Arch系统
重启后可以看到lcd屏幕的显示如下所示(默认为竖屏):
旋转显示和触摸方向的方法
首先点击桌面右上角的这块区域
然后打开设置
然后选择Displays
然后在Displays的Orientation中选择想要旋转的方向
然后选择Apply
然后就能看到屏幕已经旋转好了,此时还需要选择Keep Changes来最后确定旋转
LCD屏幕旋转90度后的显示如下所示:
OPi OS Arch系统LCD屏幕的触摸功能会随着显示方向的旋转而旋转,无需其他设置
OV13850和OV13855 MIPI摄像头的测试方法
目前开发板支持两款MIPI摄像头,OV13850和OV13855,具体的图片如下所示:
1300万MIPI接口的OV13850摄像头
1300万MIPI接口的OV13855摄像头
OV13850和OV13855摄像头使用的转接板和FPC排线是一样的,只是两款摄像头接在转接板上的位置不一样。FPC排线如下图所示,请注意FPC排线是有方向的,标注TO MB那端需要插到开发板的摄像头接口中,标注TO CAMERA那端需要插到摄像头转接板上。
摄像头转接板上总共有3个摄像头的接口,同一时间只能接一个使用,如下图所示,其中:
1号接口接OV13850摄像头
2号接口接OV13855摄像头
3号接口未使用,忽略即可
Orange Pi 5 Ultra开发板上总共有3个摄像头接口,我们定义Cam0、Cam1和Cam2的位置如下图所示:
摄像头插在开发板的Cam0接口的方法如下所示:
摄像头插在开发板的Cam1接口的方法如下所示:
摄像头插在开发板的Cam2接口的方法如下所示:
连接好摄像头到开发板上后,我们可以使用下面的方法来测试下摄像头:
首先在/boot/extlinux/extlinux.conf中加上下面的配置
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-opi5ultra-cam0.dtbo #需要添加的配置
上面红色字体演示的是打开Cam0接口的配置,其他接口的配置如下表所示,将对应的dtbo配置添加到FDTOVERLAYS后面即可。如果要同时添加多个配置,请用空格隔开。
摄像头 | dtbo的配置 |
Cam0 | /dtbs/rockchip/overlay/rk3588-opi5ultra-cam0.dtbo |
Cam1 | /dtbs/rockchip/overlay/rk3588-opi5ultra-cam1.dtbo |
Cam2 | /dtbs/rockchip/overlay/rk3588-opi5ultra-cam2.dtbo |
然后重启OPi OS Arch系统
然后在桌面系统中打开一个终端,再运行下面的脚本
orangepi@orangepi:~$ test_camera.sh
然后就能看到摄像头的预览画面了
设置中文环境以及安装中文输入法的方法
首先点击桌面右上角的这块区域
然后打开设置
然后找到System选项
然后选择Region & Language
然后选择Language
然后选择汉语
然后点击Select
然后点击Log Out...登出系统,再重新登入系统
然后可以看到桌面都显示为中文了
然后安装下fcitx-im和fcitx-configtool
[orangepi@orangepi ~]$ sudo pacman -S fcitx-im fcitx-configtool
:: 在组 fcitx-im 中有 3 成员:
:: 软件仓库 community
1) fcitx 2) fcitx-qt5 3) fcitx-qt6
输入某个选择 ( 默认=全部选定 ): 1
然后打开Fcitx配置程序
然后添加Google拼音输入法
然后我们可以打开一个终端测试下中文输入法,打开终端后,如果默认还是英文输入法,我们可以通过Ctrl+Space快捷键来切换成中文输入法,然后就能输入中文了
安装wiringOP的方法
注意,Orange Pi发布的OPi OS Arch镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。
进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。
下载wiringOP的代码
[orangepi@orangepi ~]$ sudo pacman -Syy git
[orangepi@orangepi ~]$ git clone https://github.com/orangepi-xunlong/wiringOP.git -b next
注意,Orange Pi 5 Ultra需要下载wiringOP next分支的代码,请别漏了-b next这个参数。
如果从GitHub下载代码有问题,可以去Orange Pi 5 Ultra资料下载页面的官方工具中下载wiringOP.tar.gz的源码压缩包。
编译安装wiringOP
[orangepi@orangepi ~]$ sudo pacman -Syy make gcc
[orangepi@orangepi ~]$ cd wiringOP
[orangepi@orangepi wiringOP]$ sudo ./build clean
[orangepi@orangepi wiringOP]$ sudo ./build
测试gpio readall命令的输出如下
40pin接口GPIO、I2C、UART、SPI、CAN和PWM测试
注意,如果需要设置fdt overlays同时打开多个配置,请像下面红色字体配置那样使用空格隔开写在一行即可。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-i2c2-m0.dtbo /dtbs/rockchip/overlay/rk3588-uart4-m2.dtbo
40pin GPIO口测试
开发板40pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO1_A7 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平
首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号
[orangepi@orangepi ~]$ gpio mode 2 out
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
[orangepi@orangepi ~]$ gpio write 2 0
使用gpio readall可以看到7号引脚的值(V)变为了0
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
[orangepi@orangepi ~]$ gpio write 2 1
使用gpio readall可以看到7号引脚的值(V)变为了1
其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可
40pin GPIO口上下拉电阻的设置方法
注意,Orange Pi 5 Ultra下面10个GPIO引脚因为外部有3.3V上拉,所以设置下拉是无效的。
下面以11号引脚——对应GPIO为GPIO1_A0 ——对应wPi序号为5——为例演示如何设置GPIO口的上下拉电阻
首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号
[orangepi@orangepi ~]$ gpio mode 5 in
设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式
[orangepi@orangepi ~]$ gpio mode 5 up
然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功
[orangepi@orangepi ~]$ gpio read 5
1
然后执行下面的命令可以设置GPIO口为下拉模式
[orangepi@orangepi ~]$ gpio mode 5 down
然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功
[orangepi@orangepi ~]$ gpio read 5
0
40pin SPI测试
- 由下图可知,Orange Pi 5 Ultra可用的spi为spi0、spi1和spi4
- SPI0、SPI1和SPI4在40pin中对应的引脚如下表所示。
S PI0_M2对应40pin | S PI1_M1对应40pin | S PI4_M2对应40pin | |
* *MOSI** | 19号引脚 | 40号引脚 | 13号引脚 |
* *MISO** | 21号引脚 | 38号引脚 | 11号引脚 |
CLK | 23号引脚 | 29号引脚 | 15号引脚 |
CS0 | 24号引脚 | 35号引脚 | 16号引脚 |
CS1 | 26号引脚 | 无 | 无 |
dtb o配置 | spi 0-m2-cs0-spidev
spi 0-m2-cs1-spidev spi0-m2 -cs0-cs1-spidev |
spi 1-m1-cs0-spidev | spi 4-m2-cs0-spidev |
在OPi OS Arch系统中,40pin中的spi功能默认是关闭的,需要手动打开才能使用。
在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启OPi OS Arch系统就可以打开spi0、spi1和spi4,如果只需要打开一个,那么就填写一个即可。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-spi0-m2-cs0-cs1-spidev.dtbo
/dtbs/rockchip/overlay/rk3588-spi1-m1-cs0-spidev.dtbo
/dtbs/rockchip/overlay/rk3588-spi4-m2-cs0-spidev.dtbo
先查看下OPi OS Arch系统中是否存在spidevx.x的设备节点,如果存在,说明SPI已经设置好了,可以直接使用
[orangepi@orangepi ~]$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0 /dev/spidev4.0
上面是打开spi0-m2-cs0-cs1-spidev、spi1-m1-cs0-spidev和spi4-m2-cs0-spidev后显示的结果。
先不短接SPI0或者SPI1或者SPI4的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev0.0 #spi0的命令
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev1.0 #spi1的命令
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev4.0 #spi4的命令
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….
然后短接SPI0或者SPI1或者SPI4的mosi和miso两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev0.0 #spi0的命令
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev1.0 #spi1的命令
[orangepi@orangepi ~]$ sudo spidev_test -v -D /dev/spidev4.0 #spi4的命令
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
40pin I2C测试
由下表可知,Orange Pi 5 Ultra可用的i2c为i2c2、i2c4、i2c5和i2c8共四组 i2c总线
4组I2C总线在40pin中对应的引脚如下表所示。I2C2_M0和I2C2_M4同一时间只能使用其中一组,不能同时使用,它们都是同一个I2C,只是接到不同的引脚上去了而已,请不要以为它们是两组不同的I2C总线。
I2C总线 | SDA对应40pin | SCL对应40pin | dtbo对应配置 |
I2C2_M0 | 3号引脚 | 5号引脚 | i2c2-m0 |
I2C2_M4 | 11号引脚 | 13号引脚 | i2c2-m4 |
I2C4_M3 | 15号引脚 | 16号引脚 | i2c4-m3 |
I2C5_M2 | 37号引脚 | 12号引脚 | i2c5-m2 |
I2C8_M3 | 27号引脚 | 28号引脚 | i2c8-m3 |
在OPi OS Arch系统中,40pin中的i2c默认都是关闭的,需要手动打开才能使用。
在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启OPi OS Arch系统就可以同时打开i2c2、i2c4、i2c5和i2c8,如果只需要打开一个,那么就填写一个即可。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-i2c2-m0.dtbo /dtbs/rockchip/overlay/rk3588-i2c4-m3.dtbo /dtbs/rockchip/overlay/rk3588-i2c5-m2.dtbo
/dtbs/rockchip/overlay/rk3588-i2c8-m3.dtbo
上面红色字体配置需要写在一行,不同的配置之间需要用空格隔开。
启动OPi OS Arch系统后,先确认下/dev下存在i2c的设备节点
[orangepi@orangepi ~]$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-10 /dev/i2c-4 /dev/i2c-6 /dev/i2c-9
/dev/i2c-1 /dev/i2c-2 /dev/i2c-5 /dev/i2c-7 /dev/i2c-8
然后在40pin接头的i2c引脚上接一个i2c设备
3.3v引脚和5v引脚一般只用接一个即可,请根据具体接的i2c设备来选择接3.3v引脚还是5v引脚。
然后使用i2cdetect -y命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用
[orangepi@orangepi ~]$ sudo pacman -Syy i2c-tools
[orangepi@orangepi ~]$ sudo i2cdetect -y 2 #i2c2的命令
[orangepi@orangepi ~]$ sudo i2cdetect -y 4 #i2c4的命令
[orangepi@orangepi ~]$ sudo i2cdetect -y 5 #i2c5的命令
[orangepi@orangepi ~]$ sudo i2cdetect -y 8 #i2c8的命令
40pin的UART测试
由下表可知,Orange Pi 5 Ultra可用的uart为uart3、uart4和uart6共三组uart总线,uart2用于调试串口功能没有计算在里面。
四组UART总线在40pin中对应的引脚如下表所示。
UART总线 | RX对应40pin | TX对应40pin | dtbo对应配置 |
UART3_M1 | 33号引脚 | 31号引脚 | uart3-m1 |
UART4_M2 | 19号引脚 | 23号引脚 | uart4-m2 |
UART6_M1 | 11号引脚 | 13号引脚 | uart6-m1 |
在OPi OS Arch系统中,40pin中的uart默认都是关闭的,需要手动打开才能使用。
在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启OPi OS Arch系统就可以同时打开uart3、uart4和uart6,如果只需要打开一个,那么就填写一个即可。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-uart3-m1.dtbo /dtbs/rockchip/overlay/rk3588-uart4-m2.dtbo /dtbs/rockchip/overlay/rk3588-uart6-m1.dtbo
上面红色字体配置需要写在一行,不同的配置之间需要用空格隔开。
进入linux系统后,先确认下/dev下是否存在对应uart的设备节点
[orangepi@orangepi ~]$ ls /dev/ttyS*
/dev/ttyS3 /dev/ttyS4 /dev/ttyS6 /dev/ttyS7
然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx
使用gpio serial命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常(ttySX需要替换为对应uart的节点名,请不要照抄)
[orangepi@orangepi ~]$ sudo gpio serial /dev/ttySX
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3
Out: 4: -> 4
Out: 5: -> 5^C
PWM的测试方法
- PWM在40pin中对应的引脚如下表所示。PWM0_M0和PWM0_M2、PWM1_M0和PWM1_M2同一时间只能使用其中一个,不能同时使用,它们都是同一个PWM,只是接到不同的引脚上去了而已,请不要以为它们是两个不同的PWM总线。
PWM总线 | 对应40pin | dtbo对应配置 |
PWM0_M0 | 5号引脚 | pwm0-m0 |
PWM0_M2 | 15号引脚 | pwm0-m2 |
PWM1_M0 | 3号引脚 | pwm1-m0 |
PWM1_M2 | 16号引脚 | pwm1-m2 |
PWM3_M3 | 7号引脚 | pwm3-m3 |
PWM6_M1 | 27号引脚 | pwm6-m1 |
PWM12_M0 | 31号引脚 | pwm12-m0 |
PWM13_M0 | 33号引脚 | pwm13-m0 |
PWM14_M0 | 35号引脚 | pwm14-m0 |
在OPi OS Arch系统中,40pin中的pwm默认都是关闭的,需要手动打开才能使用。
在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启OPi OS Arch系统就可以同时打开pwm0、pwm1、pwm3、pwm6、pwm12、pwm13和pwm14,如果只需要打开一个,那么就填写一个即可。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-pwm0-m0.dtbo
/dtbs/rockchip/overlay/rk3588-pwm1-m0.dtbo /dtbs/rockchip/overlay/rk3588-pwm3-m3.dtbo /dtbs/rockchip/overlay/rk3588-pwm6-m1.dtbo /dtbs/rockchip/overlay/rk3588-pwm12-m0.dtbo /dtbs/rockchip/overlay/rk3588-pwm13-m0.dtbo /dtbs/rockchip/overlay/rk3588-pwm14-m0.dtbo
上面红色字体配置需要写在一行,不同的配置之间需要用空格隔开。
当打开一个pwm后,在/sys/class/pwm/中就会多出一个pwmchipX(X为具体的的数字),比如打开pwm3后,查看/sys/class/pwm/下的pwmchipX会由两个变成了三个
[orangepi@orangepi ~]$ ls /sys/class/pwm/
pwmchip0 pwmchip1 pwmchip2
上面哪个pwmchip对应pwm3呢,我们先查看下 ls /sys/class/pwm/ -l命令的输出,如下所示:
然后由下表可知,pwm3寄存器的基地址为fd8b0030,再看 ls /sys/class/pwm/ -l命令的输出,可以看到pwmchip0中链接到了fd8b0030.pwm,所以pwm3对应pwmchip为pwmchip0
然后使用下面的命令可以让pwm3输出一个50Hz的方波(请先切换到root用户,再执行下面的命令)
[root@orangepi orangepi]# echo 0 > /sys/class/pwm/pwmchip0/export
[root@orangepi orangepi]# echo 20000000 > /sys/class/pwm/pwmchip0/pwm0/period
[root@orangepi orangepi]# echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
[root@orangepi orangepi]# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
- 上面演示的pwm3的测试方法,其他pwm测试方法都是类似的。
CAN的测试方法
由下表可知,Orange Pi 5 Ultra可用的CAN总线为CAN0和CAN1共两组CAN总线
在OPi OS Arch系统中,40pin中的CAN默认都是关闭的,需要手动打开才能使用。
在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启OPi OS Arch系统就可以打开CAN0和CAN1。
[orangepi@orangepi ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
LINUX /Image
FDT /dtbs/rockchip/rk3588-orangepi-5-ultra.dtb
FDTOVERLAYS /dtbs/rockchip/overlay/rk3588-can0-m0.dtbo
/dtbs/rockchip/overlay/rk3588-can1-m0.dtbo
上面红色字体配置需要写在一行,不同的配置之间需要用空格隔开。
进入OPi OS Arch系统后,使用sudo ifconfig -a命令如果能看到CAN的设备节点,就说明CAN已正确打开了
[orangepi@orangepi ~]$ sudo pacman -Syy net-tools
[orangepi@orangepi ~]$ sudo ifconfig -a
can0: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 91
can1: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 92
CAN0和CAN1对应的引脚为
CAN0 | CAN1 | |
TX引脚 | 对应5号引脚 | 对应33号引脚 |
RX引脚 | 对应3号引脚 | 对应31号引脚 |
- 使用CANalyst-II分析仪测试CAN收发消息的方法请参考下使用CANalyst-II分析仪测试收发消息一小节的内容。
Linux SDK——orangepi-build使用说明
编译系统需求
我们可以在x64的电脑中交叉编译开发板的Linux镜像,也可以在开发板的Ubuntu22.04系统中来编译开发板的Linux镜像,请根据自己的喜好二选一。
如果是在开发板的Ubuntu22.04系统中使用orangepi-build来编译Linux镜像,请做好散热(尤其是SSD启动时)。如果散热没做好,容易出现文件系统跑飞的错误。
使用开发板的Ubuntu22.04系统编译
Linux SDK,即orangepi-build,支持在开发板的Ubuntu 22.04的上运行(其它系统没有测试过),所以下载orangepi-build前,请首先确保开发板已安装的Ubuntu版本是Ubuntu 22.04。查看开发板已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是22.04,说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。
orangepi@orangepi:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保开发板能正常从GitHub下载代码,这点是非常重要的。
使用x64的Ubuntu22.04电脑编译
Linux SDK,即orangepi-build,支持在安装有Ubuntu 22.04的电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是22.04,说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。
test@test:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用VirtualBox或者VMware来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build。
Ubuntu 22.04 amd64版本的安装镜像下载地址为:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04.3-desktop-amd64.iso
https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.3-desktop-amd64.iso
在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源,不然后面安装软件的时候很容易由于网络原因而出错
- 替换清华源的方法参考这个网页的说明即可
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
注意Ubuntu版本需要切换到22.04
需要替换的/etc/apt/sources.list文件的内容为
test@test:~$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
test@test:~$ sudo vim /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
替换完后需要更新下包信息,并确保没有报错
test@test:~$ sudo apt update
另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。
获取linux sdk的源码
从github下载orangepi-build
- linux sdk其实指的就是orangepi-build这套代码,orangepi-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。首先下载orangepi-build的代码,命令如下所示:
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y git
test@test:~$ git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next
注意,Orange Pi 5 Ultra开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。
通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。
- 开发板当前使用的u-boot和linux内核版本如下所示
分支 | u-boot版本 | linux内核版本 |
legacy | u-boot 2017.09 | linux5.10 |
current | u-boot 2017.09 | linux6.1 |
这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。
目前RK提供的linux5.10 bsp内核我们定义为legacy分支,linux6.1 bsp内核我们定义为current分支。
orangepi-build下载完后会包含下面的文件和文件夹
build.sh: 编译启动脚本
external: 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等
LICENSE: GPL 2许可证文件
README.md: orangepi-build说明文件
scripts: 编译linux镜像的通用脚本
test@test:~/orangepi-build$ ls
build.sh external LICENSE README.md scripts
如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。
下载交叉编译工具链
只有在x64的电脑中使用orangepi-build编译镜像才会下载交叉编译工具链。在开发板的Ubuntu22.04中编译开发板的linux镜像是不会下载交叉编译工具链的,此时orangepi-build/toolchains会是一个空文件夹。
orangepi-build第一次运行的时候会自动下载交叉编译工具链放在toolchains文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查toolchains中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。
交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/
toolchains下载完后会包含多个版本的交叉编译工具链,开发板只会使用其中的两个
test@test:~/orangepi-build$ ls toolchains/
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf
gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf
gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf
gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
gcc-linaro-aarch64-none-elf-4.8-2013.11_linux
gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux
gcc-linaro-arm-none-eabi-4.8-2014.04_linux
编译linux内核源码使用的交叉编译工具链为
linux5.10和linux6.1
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
编译u-boot源码使用的交叉编译工具链为
v2017.09
gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
orangepi-build完整目录结构说明
orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中
linux5.10内核源码存放的git仓库如下所示:
https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.10-rk35xx
Linux6.1内核源码存放的git仓库如下所示:
https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-6.1-rk35xx
u-boot源码存放的git仓库如下所示:
https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2017.09-rk3588
orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有
build.sh: 编译启动脚本
external: 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中
kernel: 存放linux内核的源码,里面名为orange-pi-5.10-rk35xx的文件夹存放的就是RK3588/RK3588S系列开发板legacy分支的内核源码,名为orange-pi-6.1-rk35xx的文件夹存放的就是RK3588/RK3588S系列开发板current分支的内核源码,内核源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载内核源码
LICENSE: GPL 2许可证文件
README.md: orangepi-build说明文件
output: 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件
scripts: 编译linux镜像的通用脚本
toolchains: 存放交叉编译工具链
u-boot: 存放u-boot的源码,里面名为v2017.09-rk3588的文件夹存放的就是RK3588/RK3588S系列开发板legacy分支的u-boot源码,u-boot源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载u-boot源码
userpatches: 存放编译脚本需要用到的配置文件
test@test:~/orangepi-build$ ls
build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches
编译u-boot
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择U-boot package,然后回车
接着选择开发板的型号
然后就会开始编译u-boot,编译时提示的部分信息说明如下
u-boot源码的版本
[ o.k. ] Compiling u-boot [ v2017.09 ]
交叉编译工具链的版本
[ o.k. ] Compiler version [ aarch64-linux-gnu-gcc 7.4.1 ]
编译生成的u-boot deb包的路径
[ o.k. ] Target directory [ orangepi-build/output/debs/u-boot ]
编译生成的u-boot deb包的包名
[ o.k. ] File name [ linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb ]
编译使用的时间
[ o.k. ] Runtime [ 1 min ]
重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepi5ultra BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no ]
查看编译生成的u-boot deb包
test@test:~/orangepi-build$ ls output/debs/u-boot/
linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb
生成的u-boot的deb包包含的文件如下所示
使用下面的命令可以解压deb包
test@test:~/orangepi-build$ cd output/debs/u-boot
test@test:~/orangepi_build/output/debs/u-boot$ $ dpkg -x \
linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb . (注意命令最后有个”.”)
test@test:~/orangepi_build/output/debs/u-boot$ ls
linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb usr
解压后的文件如下所示
test@test:~/orangepi-build/output/debs/u-boot$ tree usr
usr
└── lib
├── linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64
│ ├── idbloader.img
│ ├── rkspi_loader.img
│ └── u-boot.itb
└── u-boot
├── LICENSE
├── orangepi_5_ultra_defconfig
└── platform_install.sh
3 directories, 6 files
orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能(需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为u-boot的源码都已缓存好了),否则所作的修改都会被还原,方法如下:
设置userpatches/config-default.conf中的IGNORE_UPDATES变量为”yes”
test@test:~/orangepi-build$ vim userpatches/config-default.conf
IGNORE_UPDATES="yes"
调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试
将编译好的u-boot的deb包上传到开发板的linux系统中
test@test:~/orangepi-build$ cd output/debs/u-boot
test@test:~/orangepi_build/output/debs/u-boot$ scp \
linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb root@192.168.1.xxx:/root
然后登录到开发板,卸载已安装的u-boot的deb包
root@orangepi:~# apt purge -y linux-u-boot-orangepi5ultra-legacy
再安装刚才上传的新的u-boot的deb包
root@orangepi:~# dpkg -i linux-u-boot-legacy-orangepi5ultra_1.0.2_arm64.deb
然后运行 nand-sata-install脚本
root@orangepi:~# nand-sata-install
然后选择5 Install/Update the bootloader on SD/eMM来更新TF卡中的u-boot或者7 Install/Update the bootloader on SPI Flash来更新SPI Flash中的u-boot
按下回车键后首先会弹出一个Warning
再按下回车键就会开始更新u-boot,更新完后会显示下面的信息
然后就可以重启开发板来测试u-boot的修改是否生效了
其它有用的信息
u-boot 2017.09源码中,开发板使用的defconfig配置文件为
orangepi-build/u-boot/v2017.09-rk3588/configs/orangepi_5_ultra_defconfigu-boot 2017.09源码中,开发板使用dts文件为
orangepi-build/u-boot/v2017.09-rk3588/arch/arm/dts/rk3588-orangepi-5-ultra.dts编译linux内核
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Kernel package,然后回车
接着选择开发板的型号
然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个
如果第4) 步选择了需要显示内核配置菜单(第二个选项),则会弹出通过make menuconfig打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码
如果不需要修改内核的配置选项,在运行build.sh脚本时,传入KERNEL_CONFIGURE=no就可临时屏蔽弹出内核的配置界面了
test@test:~/orangepi-build$ sudo ./build.sh KERNEL_CONFIGURE=no
也可以设置orangepi-build/userpatches/config-default.conf配置文件中的KERNEL_CONFIGURE=no,这样可以永久禁用这个功能
编译内核的时候如果提示下面的错误,这是由于Ubuntu PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu PC的终端调到最大,然后重新运行build.sh脚本
编译内核源码时提示的部分信息说明如下
linux内核源码的版本
[ o.k. ] Compiling current kernel [ 5.10.160 ]
使用的交叉编译工具链的版本
[ o.k. ] Compiler version [ aarch64-none-linux-gnu-gcc 11.2.1 ]
内核默认使用的配置文件以及它存放的路径
[ o.k. ] Using kernel config file [ config/kernel/linux-rockchip-rk3588-legacy.config ]
编译生成的内核相关的deb包的路径
[ o.k. ] Target directory [ orangepi-build/output/debs/ ]
编译生成的内核镜像deb包的包名
[ o.k. ] File name [ linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb ]
编译使用的时间
[ o.k. ] Runtime [ 5 min ]
最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepi5ultra BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no ]
查看编译生成的内核相关的deb包
linux-dtb-legacy-rockchip-rk3588_1.0.2_arm64.deb包含内核使用的dtb文件
linux-headers-legacy-rockchip-rk3588_1.0.2_arm64.deb包含内核头文件
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb包含内核镜像和内核模块
test@test:~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-legacy-rockchip-rk3588_1.0.2_arm64.deb output/debs/linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb
output/debs/linux-headers-legacy-rockchip-rk3588_1.0.2_arm64.deb
生成的linux-image的deb包包含的文件如下所示
使用下面的命令可以解压deb包
test@test:~/orangepi-build$ cd output/debs
test@test:~/orangepi_build/output/debs$ mkdir test
test@test:~/orangepi_build/output/debs$ cp \
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb test/
test@test:~/orangepi_build/output/debs$ cd test
test@test:~/orangepi_build/output/debs/test$ dpkg -x \
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb .
test@test:~/orangepi_build/output/debs/test$ ls
boot etc lib linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb usr
解压后的文件如下所示
test@test:~/orangepi-build/output/debs/test$ tree -L 2
.
├── boot
│ ├── config-5.10.160-rockchip-rk3588
│ ├── System.map-5.10.160-rockchip-rk3588
│ └── vmlinuz-5.10.160-rockchip-rk3588
├── etc
│ └── kernel
├── lib
│ └── modules
├── linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb
└── usr
├── lib
└── share
orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能(需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为linux的源码都已缓存好了),否则所作的修改都会被还原,方法如下:
设置userpatches/config-default.conf中的IGNORE_UPDATES变量为”yes”
test@test:~/orangepi-build$ vim userpatches/config-default.conf
IGNORE_UPDATES="yes"
如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块
将编译好的linux内核的deb包上传到开发板的linux系统中
test@test:~/orangepi-build$ cd output/debs
test@test:~/orangepi-build/output/debs$ scp \
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb root@192.168.1.xxx:/root
然后登录到开发板,卸载已安装的linux内核的deb包
root@orangepi:~# apt purge -y linux-image-legacy-rockchip-rk3588
再安装刚才上传的新的linux内核的deb包
root@orangepi:~# dpkg -i linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb
然后重启开发板,再查看内核相关的修改是否已生效
root@orangepi:~# reboot
编译rootfs
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Rootfs and all deb packages,然后回车
接着选择开发板的型号
然后选择rootfs的类型
然后选择镜像的类型
Image with console interface (server)表示服务器版的镜像,体积比较小
Image with desktop environment表示带桌面的镜像,体积比较大
如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了)
如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面,Debian Bookwork主要维护XFCE桌面
然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。
然后就会开始编译rootfs,编译时提示的部分信息说明如下所示
rootfs的类型
[ o.k. ] local not found [ Creating new rootfs cache for jammy]
编译生成的rootfs压缩包的存放路径
[ o.k. ] Target directory [ external/cache/rootfs ]
编译生成的rootfs压缩包的名字
[ o.k. ] File name [ jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4 ]
编译使用的时间
[ o.k. ] Runtime [ 13 min ]
查看编译生成的rootfs压缩包
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4是rootfs的压缩包,名字各字段的含义为
jammy表示rootfs的linux发行版的类型
xfce表示rootfs为桌面版的类型,如果为cli则表示服务器版类型
arm64表示rootfs的架构类型
f930ff6ebbac1a72108a2e100762b18f是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list列出了rootfs安装的所有软件包的包名
test@test:~/orangepi-build$ ls external/cache/rootfs/
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.current
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list
如果需要的rootfs在external/cache/rootfs下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去external/cache/rootfs下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间。
编译linux镜像
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Full OS image for flashing,然后回车
然后选择开发板的型号
然后选择rootfs的类型
然后选择镜像的类型
Image with console interface (server)表示服务器版的镜像,体积比较小
Image with desktop environment表示带桌面的镜像,体积比较大
如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了)
如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面,Debian Bookwork主要维护XFCE桌面
然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。
然后就会开始编译linux镜像,编译的大致流程如下
初始化Ubuntu PC的编译环境,安装编译过程需要的软件包
下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)
编译u-boot源码,生成u-boot的deb包
编译linux源码,生成linux相关的deb包
制作linux firmware的deb包
制作orangepi-config工具的deb包
制作板级支持的deb包
如果是编译desktop版镜像,还会制作desktop相关的deb包
检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用
安装前面生成的deb包到rootfs中
对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等
然后制作镜像文件,并格式化分区,默认类型为ext4
再将配置好的rootfs拷贝到镜像的分区中
然后更新initramfs
最后将u-boot的bin文件通过dd命令写入到镜像中
编译完镜像后会提示下面的信息
编译生成的镜像的存放路径
[ o.k. ] Done building [ output/images/orangepi5ultra_1.0.2_debian_bullseye_desktop_xfce_linux5.10.160/orangepi5ultra_1.0.2_debian_bullseye_desktop_xfce_linux5.10.160.img ]
编译使用的时间
[ o.k. ] Runtime [ 19 min ]
重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepi5ultra BRANCH=legacy BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes ]
Android 13系统的使用说明
已支持的Android版本
Android版本 | 内核版本 |
Android 13 | Linux5.10 |
Android 功能适配情况
功能 | Android 13 |
HDMI TX视频 | OK |
HDMI TX音频 | OK |
HDMI RX视频 | OK |
HDMI RX音频 | OK |
USB2.0x2 | OK |
USB3.0x2 | OK |
2.5G网口 | OK |
网口状态灯 | OK |
WIFI | OK |
蓝牙 | OK |
调试串口 | OK |
RTC芯片 | OK |
FAN风扇接口 | OK |
eMMC扩展接口 | OK |
GPIO(40pin) | OK |
UART(40pin) | OK |
SPI(40pin) | OK |
I2C(40pin) | OK |
PWM(40pin) | OK |
TF 卡启动 | OK |
OV13850摄像头 | OK |
OV13855摄像头 | OK |
SPI+NVME启动 | OK |
LCD | OK |
MIC | OK |
耳机播放 | OK |
耳机录音 | OK |
三色LED 灯 | OK |
GPU | OK |
NPU | OK |
VPU | OK |
开关机按键 | OK |
WIFI的连接测试方法
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开Setting。
- 然后选择Network & internet中的Internet选项。
- 然后打开Wi-Fi开关。
打开Wi-Fi后如果一切正常,就可以扫描到附近的Wi-Fi热点了。
然后选择想连接的Wi-Fi后会弹出下图所示的密码输入界面。
然后使用键盘输入Wi-Fi对应的密码,再使用鼠标点击CONNECT就会开始连接Wi-Fi了。
Wi-Fi连接成功后的显示如下图所示:
蓝牙的测试方法
首先在桌面按住鼠标左键往上拖打开应用列表。
然后进入Setting。
然后选择Connected devices。
然后点击Pair new device打开蓝牙并开始扫描周围的蓝牙设备。
搜索到的蓝牙设备会在Available devices下面显示出来。
然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择Pair选项。
这里测试的是开发板和安卓手机蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程。
配对完成后,可以看到如下图所示的已配对的蓝牙设备。
此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击Accept就可以开始接收手机发过来的图片了。
开发板Android系统蓝牙接收到的图片可以在文件管理器中打开Download目录查看。
10.1寸MIPI 屏幕的使用方法
首先需要组装好屏幕,请参考10.1寸MIPI屏幕的组装方法。
开发板上mipi lcd屏幕接口的位置如下图所示:
将组装好的屏幕接到开发板的LCD接口,给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示:
OV13850和OV13855 MIPI摄像头的测试方法
目前开发板支持两款MIPI摄像头,OV13850和OV13855,具体的图片如下所示:
1300万MIPI接口的OV13850摄像头
1300万MIPI接口的OV13855摄像头
OV13850和OV13855摄像头使用的转接板和FPC排线是一样的,只是两款摄像头接在转接板上的位置不一样。FPC排线如下图所示,请注意FPC排线是有方向的,标注TO MB那端需要插到开发板的摄像头接口中,标注TO CAMERA那端需要插到摄像头转接板上。
摄像头转接板上总共有3个摄像头的接口,同一时间只能接一个使用,如下图所示,其中:
1号接口接OV13850摄像头
2号接口接OV13855摄像头
3号接口未使用,忽略即可
Orange Pi 5 Ultra开发板上总共有3个摄像头接口,在Android系统中,默认只打开了Cam0和Cam1,我们定义Cam0、Cam1和Cam2的位置如下图所示:
摄像头插在开发板的Cam0接口的方法如下所示:
摄像头插在开发板的Cam1接口的方法如下所示:
连接好摄像头到开发板上后,我们可以使用下面的方法来测试下摄像头:
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开相机APP。
然后就能看到摄像头的预览画面了。
除了单摄外, 我们还可以同时接两个摄像头。接好双摄后,然后和前面步骤一样,打开相机APP后即可看到其中一个摄像头的画面。
切换另一个摄像头的方法为:
首先点击右上角的这三个点。
然后点击下图所示的位置即可切换摄像头。
在摄像头APP下图红框所示的区域中按住鼠标然后向右拖动可以调出拍照和摄像的切换界面。
拍照和摄像的切换界面如下所示,点击Video即可切换到录像模式。
40pin 接口 GPIO、UART、SPI 和 PWM 测试
40pin GPIO 口测试
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开wiringOP APP。
wiringOP的主界面如下图所示,然后点击GPIO_TEST按钮打开GPIO测试界面。
GPIO测试界面如下图所示,左边的两排CheckBox按钮跟40pin引脚是一一对应的关系。当勾选CheckBox按钮时,对应的GPIO引脚会被设置为OUT模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的GPIO READALL按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;
当点击BLINK ALL GPIO按钮时,程序会控制28个GPIO口不停的切换高低电平。
点击GPIO READALL按钮可以所有引脚的详细信息,如下图所示:
开发板40pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO1_A7 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的CheckBox按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功。
然后点击GPIO READALL按钮,可以看到当前的7号引脚模式为OUT,引脚电平为高电平。
再次点击下图的CheckBox按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
然后点击GPIO READALL按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平。
40pin的UART测试
- Android系统中默认打开了UART3和UART6两个串口,在40pin中对应的引脚如下表所示,对应的设备节点是/dev/ttyS3和/dev/ttyS6。
UART总线 | RX对应40pin | TX对应40pin |
UART3 | 33号引脚 | 31号引脚 |
UART6 | 11号引脚 | 13号引脚 |
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开wiringOP APP。
wiringOP APP的主界面如下图所示,然后点击UART_TEST按钮打开UART测试界面。
wiringOP APP的串口测试界面如下图所示:
- 接着在编辑框中输入想要设置的波特率,然后点击OPEN按钮打开/dev/ttyS3节点,打开成功后,OPEN按钮会变为不可选中状态,CLOSE按钮和SEND按钮变为可选中状态。
然后使用杜邦线短接uart3的RXD和TXD引脚。
然后可以在下面的发送编辑框中输入一段字符,点击SEND按钮开始发送。
- 如果一切正常,接收框内会显示已接收到的字符串。
40pin的SPI测试
Android中默认打开了SPI0这一组SPI总线。
这里通过w25q64模块来测试SPI接口,首先在SPI0接口接入w25q64设备。
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开wiringOP APP。
wiringOP APP的主界面显示如下图所示,点击SPI_TEST按钮打开SPI的测试界面。
然后点击OPEN按钮初始化SPI。
40pin的PWM测试
- Android默认开启了PWM3和PWM14,对应的引脚在40pin的所在位置如下图所示:
PWM总线 | 对应40pin |
PWM3 | 7号引脚 |
PWM14 | 35号引脚 |
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开wiringOP APP。
然后在wiringOP的主界面点击PWM_TEST按钮进入PWM的测试界面。
PWM3的基地址fe8b0030,PWM14的基地址是febf0020,这里pwmchip0右边显示的是fe8b0030.pwm,说明选中的是PWM3。
然后确认PWM的通道,默认是0通道,并确认PWM的周期,默认的配置是50000ns,转换为PWM频率是20KHz,可自行修改,点击EXPORT按钮导出PWM3。
然后拖动下面的拖动条,就可以改变PWM的占空比,然后勾选Enable就可以输出PWM波形了。
- 然后使用示波器测量开发板40pin中的第7号引脚就可以看到下面的波形了。
ADB的使用方法
USB OTG模式切换的方法
开发板有4个USB接口,其中下图红框标注的USB接口既可以支持Host模式,又可以支持Device模式,其它3个USB接口只支持Host模式。
USB OTG接口默认为Host模式,可以用来接鼠标键盘等USB设备,如果要使用ADB需要手动切换为Device模式。
首先在桌面按住鼠标左键往上拖打开应用列表。
然后打开Settings。
然后选择About tablet。
然后用鼠标多次点击Build number菜单栏,直到出现You are now a developer!的提示。
然后点击返回上一级菜单,选择System。
然后选择Developer options。
最后找到USB OTG Mode Switch开关,打开开关切换为Device模式,关闭开关切换为Host模式。
使用数据线连接adb调试
首先准备一根品质良好的USB2.0公对公数据线。
然后参考USB OTG模式切换的方法将USB OTG切换为device模式。
然后使用USB2.0公对公数据线将开发板连接到电脑的USB接口中(请同时使用TypeC电源给开发板供电)。
在Ubuntu PC上安装adb工具。
test@test:~$ sudo apt update
test@test:~$ sudo apt -y install adb
通过下面的命令可以查看识别到的ADB设备。
test@test:~$ adb devices
List of devices attached
S63QCF54CJ device
test@test:~$ lsusb
Bus 003 Device 006: ID 2207:0006
然后在Ubuntu PC上通过adb shell就可以登录到android系统了。
test@test:~$ adb shell
console:/ $
- 执行命令重新挂载Android系统。
test@test:~$ adb root
test@test:~$ adb remount
- 然后就可以传输文件到Android系统了。
test@test:~$ adb push example.txt /system/
使用网络连接adb调试
使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。
确保Android系统的service.adb.tcp.port设置为5555端口号。
console:/ # getprop | grep "adb.tcp"
[service.adb.tcp.port]: [5555]
如果service.adb.tcp.port没有设置,可以使用下面的命令设置网络adb的端口号。
console:/ # setprop service.adb.tcp.port 5555
console:/ # stop adbd
console:/ # start adbd
在Ubuntu PC上安装adb工具。
test@test:~$ sudo apt update
test@test:~$ sudo apt install -y adb
然后在Ubuntu PC上连接网络adb。
test@test:~$ adb connect 192.168.1.xxx (IP地址需要修改为开发板的IP地址)
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.1.xxx:5555
test@test:~$ adb devices
List of devices attached
192.168.1.xxx:5555 device
然后在Ubuntu PC上通过adb shell就可以登录到android系统。
test@test:~$ adb shell
console:/ #
HDMI RX的测试方法
开发板HDMI RX接口的所在位置如下所示:
然后使用下图所示的HDMI转HDMI线将其它设备的HDMI输出接到开发板的HDMI RX接口上。
确保连接到HDMI RX接口的设备的HDMI输出是正常的,然后在桌面按住鼠标左键往上拖打开应用列表。
然后打开HDMI In测试APP。
然后就可以看到HDMI RX的视频输入了(下图中HDMI RX显示的是opi5开发板HDMI输出的画面,此时正在播放一个视频),同时HDMI RX的音频输入也会从开发板的HDMI TX接口或者耳机接口输出。
Android 13源码的编译方法
下载Android 13的源码
首先从百度云盘或者谷歌网盘下载Android 13源码的分卷压缩包。
Android 13源码的分卷压缩包下载完后,请先检查下MD5校验和是否正确,如果不正确,请重新下载源码。
test@test:~$ md5sum -c md5sum
Android_13.tar.gz00: 确定
Android_13.tar.gz01: 确定
Android_13.tar.gz02: 确定
Android_13.tar.gz03: 确定
Android_13.tar.gz04: 确定
Android_13.tar.gz05: 确定
Android_13.tar.gz06: 确定
Android_13.tar.gz07: 确定
Android_13.tar.gz08: 确定
然后需要将多个压缩文件合并成一个,再进行解压。
test@test:~$ cat Android_13.tar.gz0* | tar -xvzf -
编译Android 13的源码
首先安装编译Android13源码需要的软件包。
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y git gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip
test@test:~$ sudo apt-get install -y u-boot-tools
源码中有make.sh编译脚本,编译参数如下:
-B:编译uboot
-K:编译kernel
-a: 编译android
-F:编译uboot、kernel和android
-M:在rockdev目录下生成分区镜像
-u:打包生成最终可以启动的完整镜像
-b:指定开发板型号
编译uboot、kernel、android并打包成最终可以启动的完整镜像。
test@test:~$ cd Android_13
test@test:~/ Android_13$ ./make.sh -FMu -b orangepi5ultra --nvme --gapps
编译完成后会打印下面的信息。
********rkImageMaker ver 2.1********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making update.img OK.
Make update image ok!
最终生成的镜像文件会放在rockdev/Image-rk3588_t目录下。其中update.img是TF卡启动镜像,update_spi_nvme.img是NVME SSD启动镜像。
test@test:~/Android_13$ cd rockdev/Image-rk3588_t
test@test:~/Android_13/rockdev/Image-rk3588_t$ ls update*
update.img update_spi_nvme.img
OpenWRT系统使用说明
OpenWRT版本
OpenWRT版本 | 内核版本 |
v22.03.4 | Linux5.10.110 |
OpenWRT适配情况
功能 | OpenWRT |
USB2.0x2 | OK |
USB3.0x2 | OK |
3pin调试串口 | OK |
TF卡启动 | OK |
2.5G PCIe网口 | OK |
网口状态灯 | OK |
LED灯 | OK |
RTL8821CU USB网卡 | OK |
RTL8723BU USB网卡 | OK |
FAN风扇接口 | OK |
eMMC扩展接口 | OK |
第一次启动扩容rootfs
第一次启动OpenWRT系统时会执行resize-rootfs.sh脚本进行 rootfs 的扩容,并且扩容完成后会自动重启。
登录系统后可以通过 df -h 命令来查看 rootfs 的大小,如果和存储设备(TF卡、eMMC或者NVME SSD)实际容量一致,说明自动扩容运行正确。
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 14.8G 14.7G 91.6M 99% /
tmpfs 495.5M 6.1M 489.4M 1% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/root 14.8G 14.7G 91.6M 99% /opt/docker
登录系统的方法
通过串口登录
首先调试串口的使用可以参考调试串口的使用方法章节。
OpenWrt系统默认会以 root 用户自动登录,显示界面如下所示:
通过SSH登录系统
请注意,在Orange Pi 5 Ultra的OpenWrt系统中,默认将网口配置成LAN口。
首先用网线连接板子的LAN口到电脑的网口,以便电脑的网口能通过DHCP获取到IP地址。
默认板子的LAN口IP是设置为192.168.2.1的,所以此时电脑可以获取到以192.168.2开头的IP地址。
如果电脑安装的Ubuntu系统,可以执行下列命令通过SSH登录系统,默认是不需要密码直接就可以登录的。
test@ubuntu:~$ ssh root@192.168.2.1
成功登录系统后的显示如下图所示:
如果电脑装的Windows系统,可以参考Windows下SSH远程登录开发板一小节介绍的方法进行登录。
登录LuCI管理界面
请注意,在Orange Pi 5 Ultra的OpenWrt系统中,默认将网口配置成LAN口。
- 首先用网线连接板子的LAN口到电脑的网口,以便电脑的网口能通过DHCP获取到IP地址。
- 默认板子的LAN口IP是设置为192.168.2.1的,所以此时电脑可以获取到以192.168.2开头的IP地址。
- 在电脑上的浏览器中输入IP地址192.168.2.1就可以登录LuCI界面了。
通过LuCI管理界面登录终端
请注意,在Orange Pi 5 Ultra的OpenWrt系统中,默认将网口配置成LAN口。
- 首先用网线连接板子的LAN口到电脑的网口,以便电脑的网口能通过DHCP获取到IP地址。
- 默认板子的LAN口IP是设置为192.168.2.1的,所以此时电脑可以获取到以192.168.2开头的IP地址。
- 在电脑上的浏览器中输入IP地址192.168.2.1就可以登录LuCI界面了。
- 在导航栏的“服务”一栏中选择“终端”并点击进入。
使用IP地址+端口号方式登录终端
请注意,在Orange Pi 5 Ultra的OpenWrt系统中,默认将网口配置成LAN口。
- 首先用网线连接板子的LAN口到电脑的网口,以便电脑的网口能通过DHCP获取到IP地址。
- 默认板子的LAN口IP是设置为192.168.2.1的,所以此时电脑可以获取到以192.168.2开头的IP地址。
- 然后在浏览器输入192.168.2.1:7681即可登录OpenWRT的终端。
通过命令行修改LAN口IP地址的方法
- 在OpenWrt系统中,提供了一个命令行工具uci,它可以很方便地对配置文件中的内容进行修改、添加、删除和读取,详细说明请参考官方文档。
- 首先使用以下命令获取网络配置,对应的配置文件是/etc/config/network,可以看到network.lan.ipaddr这一项的值是192.168.2.1。
root@OpenWrt:~# uci show network
...
network.lan=interface
network.lan.device='br-lan'
network.lan.proto='static'
network.lan.ipaddr='192.168.2.1'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
.…
- 然后输入以下命令修改network.lan.ipaddr这一项。
root@OpenWrt:~# uci set network.lan.ipaddr='192.168.100.1'
- 然后输入以下命令完成提交,即写入到配置文件。
root@OpenWrt:~# uci commit
如果红色字体的IP地址与要设置的一致,说明修改成功。
root@OpenWrt:~# cat /etc/config/network
...
config interface 'lan'
option device 'br-lan'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.100.1'
...
- 通过ubus重启网络,ubus的使用说明请参考官方文档。
root@OpenWrt:~# ubus call network restart
此时,输入命令可以看到LAN口的IP已经是192.168.100.1。
root@OpenWrt:~# ifconfig br-lan
br-lan Link encap:Ethernet HWaddr FE:55:13:A3:EF:E7
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fd60:c4cd:1033::1/60 Scope:Global
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:370 (370.0 B)
修改root密码的方法
通过命令行修改
- 首先在系统的命令行输入passwd root,会出现以下提示信息,此时可以输入想要设置的密码,按下回车键确认。
root@OpenWrt:/# passwd root
Enter new UNIX password:
- 接着会提示重新输入密码,此时再次输入密码确认并回车即可。
Retype password:
- 修改成功的显示如下:
passwd: password for root changed by root
通过LuCI管理界面修改
首先参考登录LuCI管理界面进入OpenWRT的管理界面。
然后按照下面的步骤修改密码。
修改并保存路由器密码。
注:在”密码”和”确认密码”的对话框中,需要两次输入的密码保持一致。
USB接口测试
在命令行下挂载USB存储设备
- 首先将U盘插入Orange Pi开发板的USB接口中。
- 执行下面的命令如果能看到sdX的输出说明U盘识别成功。
root@OpenWrt:~# cat /proc/partitions | grep "sd*"
major minor #blocks name
8 0 15126528 sda
- 使用mount命令可以将U盘挂载到/mnt中,然后就能查看U盘中的文件了。
root@OpenWrt:~# mount /dev/sda /mnt/
root@OpenWrt:~# ls /mnt/
test.txt
- 挂载完后通过df -h命令就能查看U盘的容量使用情况和挂载点。
root@OpenWrt:~# df -h | grep "sd"
/dev/sda 14.4G 187.2M 14.2G 1% /mnt
在LuCI管理界面挂载USB存储设备
首先将U盘(或者其它存储设备)通过USB2.0连接到开发板。
然后按照登录LuCI管理界面进入LuCI管理界面。
然后在LuCI管理界面中,点击”系统->挂载点”进入挂载点的配置界面。
然后按照下面的步骤新增一个挂载点。
在挂载点全局设置界面下方找到”挂载点”。
在挂载点下方,选择”添加”按钮并点击进入。
接着会弹出下面的弹窗界面。
然后就可以开始挂载存储设备。
勾选”已启用”。
在常规设置UUID一栏中选择实际接入的设备/dev/sda(根据自己的设备选择)。
在挂载点一栏中选择”自定义”,并填入要挂载到的目标目录,这里以/mnt目录为例,填好后回车确认。
然后点击右下角的”保存”按钮。
- 然后会回到挂载点全局设置页面,在页面的左下角点击”保存并应用”使挂载点生效。
- 保存完后可以看到”已挂载的文件系统”中,该存储设备已经挂载成功。
USB无线网卡测试
目前测试过的能用的USB无线网卡如下所示,其他型号的USB无线网卡请自行测试,如果无法使用就需要移植对应的USB无线网卡驱动。
序号 | 型号 | |
1 | RTL8723BU
支持2.4G WIFI+BT4.0 |
文件:Orange Pi 5 Ultra-image2 48.png |
2 | RTL8821CU
支持2.4G +5G WIFI 支持BT 4.2 |
使用USB无线网卡连接WIFI热点的方法
将USB无线网卡插入开发板的USB端口,然后接上电源给开发板上电。
系统启动完成后,点击 网络 -> 无线 进入配置无线WiFi界面。
OpenWRT系统默认的无线配置是Master 模式,这里为了方便接下来的操作,我们将默认的无线连接移除。
然后点击页面的右下角 保存 让配置生效。
然后点击 扫描 按钮扫描周围的WiFi热点。
然后会弹出下面的窗口显示可用的WiFi热点,这时点击想要连接的WiFi热点右边的 加入网络 按钮来连接WiFi热点。
然后会弹出一个连接WiFi热点的界面,我们在下图所示的位置输入热点的密码,再点击 提交 按钮。
然后会弹出下面的界面,点击右下角的 保存 按钮即可。
最后会回到无线配置的主界面,点击 保存并应用 等待配置被应用完成。
成功连接到WiFi热点后,界面显示如下图所示。
使用USB无线网卡创建WIFI热点的方法
将USB无线网卡插入开发板的USB端口,然后接上电源给开发板上电。
系统启动完成,点击 网络 -> 无线 进入无线WiFi配置界面。
OpenWRT系统默认的无线配置是Master 模式,这里为了方便接下来的操作,我们将默认的无线连接移除。
然后点击页面的右下角 保存 让配置生效。
然后点击右侧的 添加 按钮。
在弹出标签页 设备配置 中,我们设置参数如下图所示。
然后在 接口配置 -> 常规设置 中,将模式设置成 接入点AP ,ESSID(无线网络名称)设置为OpenWrt ,网络指定为 lan。
然后在 接口配置 -> 无线安全 中,加密算法选择 WPA2-PSK ;密钥(无线密码)设置为 password。
以上设置完成后,点击页面右下角 保存,之后会退出标签页。
然后点击页面右下角 保存并应用 等待配置被应用完成。
成功创建热点的显示界面如下图所示:
然后使用手机或电脑搜索对应SSID的WiFi进行连接,连接成功后如下图所示:
通过命令行安装软件包
在终端通过opkg安装
- 更新可获取的软件包列表
root@OpenWrt:/# opkg update
- 获取软件列表
root@OpenWrt:/# opkg list
- 安装指定的软件包
root@OpenWrt:/# opkg install <包名称>
- 查看已经安装的软件
root@OpenWrt:/# opkg list-installed
- 卸载软件
root@OpenWrt:/# opkg remove <包名称>
OpenWRT管理界面安装软件包
若需要新增软件包,可通过OpenWRT的管理界面进行安装。
查看系统可用软件包列表
首先进入软件包管理页面
在导航栏中找到”系统”选项并点击进入
在系统下方的竖栏选项中,选择”软件包”并点击进入
安装软件包示例
以安装软件包”luci-app-acl”为例
查看软件包是否安装成功
移除软件包示例
以移除软件包”luci-app-acl”为例
查看软件包是否移除成功
使用Samba网络共享
OpenWRT局域网文件共享实现主要有两个软件选择,Samba和NFS。Samba系统兼容性较好,NFS则性能表现占优。对于需要使用Windows设备的用户来说,建议选择Samba。
进入Samba网络共享的管理页面
选择Samba服务需要监听的接口
设置网络共享的共享目录
window10启动网络发现与共享
注:在windows10系统下访问Samba,共享需要先确认window10是否已经启动网络发现与共享,如未启动,先进行如下设置。
启用Samba v1/v2的访问
进入windows10的”控制面板”
在控制面板的左侧导航栏点击”程序”
在程序和功能中选择”启用或关闭Windows功能”
在启用或关闭Windows功能的弹框中勾选”SMB 1.0/CIFS文件共享支持”
点击”确定”,配置应用
打开Windows10的网络发现
进入windows10的”控制面板”
在控制面板中选择”网络和Internet”
然后打开”网络和共享中心”
点击|“高级共享设置”
打开”启用网络发现”和”启用文件和打印机共享”
点击”保存更改”,保存Windows10的网络发现配置
- 设置完成后,在资源管理器的地址栏输入\\OpenWrt即可访问共享目录,用户名为root,密码为开发板主机设定的密码
zerotier使用说明
OpenWRT系统已经预装了zerotier客户端,在zerotier官网创建虚拟局域网后,在客户端可以通过Network ID直接加入其中,具体操作如下文所示。
登录zerotier官网https://my.zerotier.com/network,注册登录后点击Network->Create A Network,创建一个虚拟局域网
点击进入网络控制台页面,可以把隐私选项设置为公共,这样加入的网络节点就不需要验证
下面自动分配地址这里可以自己选择网段,此处选择的是172.27.*.*
在OpenWRT终端输入下面命令就可以加入到上面创建的虚拟局域网,其中8286ac0e47d53bb5是上面创建的虚拟局域网的Network ID
root@OpenWrt:/# zerotier-one -d #启动zerotier客户端
root@OpenWrt:/# zerotier-cli join 8286ac0e47d53bb5 #加入网络
- 在终端输入ifconfig可以看到已经有个新增的ztks54inm2设备,IP地址为172.27.214.213
root@OpenWrt:/# ifconfig
ztks54inm2 Link encap:Ethernet HWaddr F6:4E:DE:BF:D8:52
inet addr:172.27.214.213 Bcast:172.27.255.255 Mask:255.255.0.0
inet6 addr: fe80::e82f:d0ff:fe5a:867e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:2800 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1720 (1.6 KiB) TX byte81 (8.2 KiB)
- 在另一台设备上安装zerotier客户端(此处以Ubuntu18.04为例),执行下面命令进行安装,安装完成后需要重启电脑
test@ubuntu:~$ curl -s https://install.zerotier.com | sudo bash
- 重启后根据Network ID加入虚拟局域网,也可以看到已经获取到zerotier分配的ip地址,此时该Ubuntu PC和开发板处于同一局域网中,两者可以自由通信
test@ubuntu:~$ sudo zerotier-cli join 8286ac0e47d53bb5
test@ubuntu:~$ ifconfig
ztks54inm2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800
inet 172.27.47.214 netmask 255.255.0.0 broadcast 172.27.255.255
inet6 fe80::5ce1:85ff:fe2b:6918 prefixlen 64 scopeid 0x20<link>
ether f6:fd:87:68:12:cf txqueuelen 1000 (以太网)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 46 bytes 10006 (10.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 测试两个终端是否可以通信
root@OpenWrt:/# ping 172.27.47.214 -I ztks54inm2
PING 172.27.47.214 (172.27.47.214): 56 data bytes
64 bytes from 172.27.47.214: seq=0 ttl=64 time=1.209 ms
64 bytes from 172.27.47.214: seq=1 ttl=64 time=1.136 ms
64 bytes from 172.27.47.214: seq=2 ttl=64 time=1.203 ms
64 bytes from 172.27.47.214: seq=3 ttl=64 time=1.235 ms
^C
--- 172.27.47.214 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.136/1.195/1.235 ms
- zerotier其他常用命令
root@OpenWrt:/# zerotier-one -d #启动zerotier客户端
root@OpenWrt:/# zerotier-cli status #获取地址和服务状态
root@OpenWrt:/# zerotier-cli join # Network ID #加入网络
root@OpenWrt:/# zerotier-cli leave # Network ID #离开网络
root@OpenWrt:/# zerotier-cli listnetworks #列出网络
OPENWRT_DEVICE_REVISION="v0"
OPENWRT_RELEASE="OpenWrt 22.03.4 r20123-38ccc47687"
OpenWRT源码的编译方法
下载OpenWRT源码
- 首先执行下面的命令下载openwrt-22.03分支代码
test@test:~$ sudo apt update
test@test:~$ sudo apt install -y git
test@test:~$ git clone https://github.com/orangepi-xunlong/openwrt.git -b openwrt-22.03
- OpenWRT代码下载完后会包含下面的文件和文件夹
test@test:~/openwrt$ ls
BSDmakefile Config.in include Makefile README.md scripts toolchain
Config feeds.conf.default LICENSE package rules.mk target tools
编译OpenWRT源码
- 首先安装下面这些依赖包(目前仅测试了在Ubuntu22.04上编译需要安装下面的依赖包,如果在其他版本的Ubuntu系统上编译,请根据出错信息自行安装对应的依赖包)
test@test:~/openwrt$ sudo apt update
test@test:~/openwrt$ sudo apt install -y ack antlr3 asciidoc autoconf \
automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar \
flex gawk gettext gcc-multilib g++-multilib git gperf haveged \
help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev \
libncurses5-dev \libncursesw5-dev libreadline-dev libssl-dev \
libtool lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full \
patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools \
subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev
- 然后执行./scripts/feeds update -a和./scripts/feeds install -a下载依赖包
test@test:~/openwrt$ ./scripts/feeds update -a
test@test:~/openwrt$ ./scripts/feeds install -a
然后选择使用OrangePi 5 Ultra的配置文件
test@test:~/openwrt$ cp configs/orangepi-5-ultra-rk3588_defconfig .config
然后执行下面的命令使配置生效
test@test:~/openwrt$ make defconfig
- 执行下面的命令开始编译openwrt源码
test@test:~/openwrt$ make V=s
- 编译完成后,镜像生成所在的路径为:
bin/targets/rockchip/armv8/openwrt-rockchip-armv8-xunlong_orangepi-5-ultra-ext4-sysupgrade.img.gz
附录
用户手册更新历史
版本 | 日期 | 更新说明 |
v1.0 | 2024-10-10 | 初始版本 |
镜像更新历史
日期 | 更新说明 |
2024-10-10 | Oran gepi5ultra_1.0.0_ubuntu_focal_server_linux5.10.160.7z
Oran gepi5ultra_1.0.0_ubuntu_jammy_server_linux5.10.160.7z Orangep i5ultra_1.0.0_debian_bullseye_server_linux5.10.160.7z Orangep i5ultra_1.0.0_debian_bookworm_server_linux5.10.160.7z Orangepi5u ltra_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z Orangepi5u ltra_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z Orangepi5ultr a_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orangepi5ultr a_1.0.0_debian_bookworm_desktop_xfce_linux5.10.160.7z Orangepi5ul tra_1.0.0_ubuntu_jammy_desktop_gnome_linux5.10.160.7z Or angepi5ultra_1.0.0_ubuntu_jammy_server_linux6.1.43.7z Orang epi5ultra_1.0.0_debian_bookworm_server_linux6.1.43.7z Orangepi 5ultra_1.0.0_ubuntu_jammy_desktop_xfce_linux6.1.43.7z Orangepi5ult ra_1.0.0_debian_bookworm_desktop_xfce_linux6.1.43.7sz OrangePi5Ultra_RK3588_Android13_v1.0.0.tar.gz O rangePi5Ultra_RK3588_Android13_spi-nvme_v1.0.0.tar.gz Opi os-droid-aarch64-opi5ultra-24.09-linux5.10.160.tar.gz Opios-droid- aarch64-opi5ultra-24.09-linux5.10.160-spi-nvme.tar.gz Opios-ar ch-aarch64-gnome-opi5ultra-24.08-linux5.10.160.img.xz openwrt-rockchip-armv 8-xunlong_orangepi-5ultra-ext4-sysupgrade_v1.0.img.gz
|