前言
大家好,我是起个网名真难。非常荣幸受到香橙派的邀请,同时也是第一次做这个事情,很荣幸对香橙派与华为鲲鹏在2024年5月12日联合发布的新品——香橙派Kunpeng Pro开发板进行深入的评测。这款开发板是香橙派与华为鲲鹏合作推出的高性能平台,其核心亮点在于搭载了强大的鲲鹏处理器,能够提供高达8TOPS的INT8计算能力,充分满足复杂算法和数据处理的需求。Kunpeng Pro 开发板提供了8GB和16GB两种内存版本,以满足不同性能需求的应用场景。它融合了鲲鹏全栈根技术的优势,为高校计算机系统教学和原生开发提供了全面的支持。开发板的独特之处在于其对FPGA+ARM的双重支持,这不仅使得从体系结构、数字逻辑设计到操作系统和编译,再到嵌入式开发的整个流程得以在一套体系结构和同一套开发板上无缝实现,而且也极大地促进了教学和研发的效率。
接下来,我将结合自己的亲身体验,从硬件配置、软件兼容性、以及AI算法性能等多个维度,为大家揭示这款开发板的潜力和实际表现。让我们一同探索这块备受瞩目的开发板,看看它如何在众多同类产品中脱颖而出,为开发者和技术爱好者带来全新的创新体验。本期先从硬件配置、软件兼容性来说,由于时间原因AI算法在下期继续。
一、开箱硬件
附带清单:开发板1,电源65W头1,C口数据线1,32G内存卡1(附带openEuler系统)图1为开箱正面,图2为开箱反面,图3为正面硬件介绍,图4为反面硬件介绍。
图1 正面开发
图2 反面开发板
图3正面硬件介绍
图4反面硬件介绍
硬件参数:
从以下几个方面看该款开发板
**处理器:**该开发板搭载的4核64位Arm处理器确保了较强的计算能力和较高的能效比,适合处理中等复杂度的任务。与市场上的其他开发板相比,如树莓派(Raspberry Pi)的四核Broadcom BCM2711处理器或ODROID系列的多核ARM处理器,Kunpeng Pro在核心数和架构上并不落后,但具体的性能表现还需考虑处理器的主频和制程技术等因素。
内存和存储:提供8GB或16GB LPDDR4X内存选项,这样的配置在开发板中属于较高规格,有利于运行内存密集型的应用程序。32MB的SPI Flash、Micro SD卡插槽、eMMC插座以及M.2接口的NVMe SSD或SATA SSD支持,为开发者提供了灵活的存储选择。与其他开发板相比,例如树莓派4B仅提供最大8GB的RAM和一个microSD卡插槽,Kunpeng Pro在存储扩展性上有明显的优势。
**网络连接:**支持10/100/1000Mbps以太网和2.4G/5G双频Wi-Fi及BT4.2,这些特性使得Kunpeng Pro在网络连接方面具有不错的竞争力。与同类产品相比,它提供了更全面的无线连接选项,不得不说这个WIFI贼强。
**外设支持:**提供了丰富的外设接口,包括USB 3.0、Type-C、HDMI、MIPI CSI摄像头接口、MIPI DSI显示接口等,这使得Kunpeng Pro能够适用于多种应用场景。特别是在视频输出和输入方面,两个HDMI接口和两个MIPI CSI摄像头接口为多媒体应用和计算机视觉任务提供了良好的支持。
总体来说,Orange Pi Kunpeng Pro开发板在硬件配置上表现出色,无论是处理器性能、内存和存储选项、网络连接能力还是外设支持,都使其成为一款功能强大的开发平台。与市场上的其他热门开发板相比,如树莓派或ODROID系列,Kunpeng Pro在某些方面提供了更高的性能和更多的功能,特别适合需要高性能处理和大量内存的应用场景。与同类产品相比,它在内存大小和存储选择上具有明显优势,但是由于开发板为新上市,资料有限,但是在面临挑战的同时也带来了无限的可能。
二. 开 机
2.1 开机画面为图2-1,账号密码均为oepnEuler,这个密码我尝试改过不能改的过于简单,可能为了安全性,在ubuntu中我一般设置为三个空格作为输入密码,现在这个还有点不适应哈哈哈哈,进去跟传统的linux也是大差不差。
2.2开机连接WIFI,调整时间、安装VNC远程
(这里我先接了HDMI屏幕)连接WIFI
如果没有屏幕 就用SSH连接进行wifi搜索配置,没什么坑插入网线,到你的路由器查看IP地址。SSH命令:ssh openEuler@192.168.0.101(这里IP是你自己的)
- 然后使用 nmcli dev wifi 命令扫描周围的 WIFI 热点。
nmcli dev wifi - 然后使用 nmcli 命令连接扫描到的 WIFI 热点,其中:
a. wifi_name 需要换成想连接的 WIFI 热点的名字。
b. wifi_passwd 需要换成想连接的 WIFI 热点的密码。
sudo nmcli dev wifi connect wifi_name password wifi_passwd - 通过 ip addr show wlan0 命令可以查看 wifi 的 IP 地址。
[openEuler@openEuler ~]$ ip a s wlan0 - 使用 ping 命令可以测试 wifi 网络的连通性,
[openEuler@openEuler ~]$ ping www.orangepi.org -I wlan0
拔掉网线可以用了。
调整时间
刚拿到开发板这个时间是1970年,用date命令可以查看时间,因为已经连接到wifi了可以联网了用下面的命令对时
sudo ntpdate pool.ntp.org
等一会就回成功,但是改了下次还是回恢复原来的时间,可以做个SH脚本开机自己运行这个脚本就执行这个对时的命令,这一期不在这里进行说明。
安装VNC
我的电脑是win11所以我电脑装的是这个TightVNC
开发板安装VNC的服务器sudo yum install tightvncserver
启动服务:vncserver
但是有时候是回拒绝你链接的为什么呢?应该是上一个异常关闭导致这个没完全占用了。所以用这个吗,用这个命令查找PID是哪个占用
我的查到了,所以用kill 9 杀掉
sudo kill -9 1849,然后就可以登录了。
还有就是需要每次都要这么设置,每次都需要手动启动,挺烦人的,这里可以参考这个博主的,https://blog.csdn.net/weixin_40929065/article/details/139248355 文章2.4.2.1。感谢isSamle大佬。
三 问题系统测试
pjdfstest 是一个用于测试 POSIX 文件系统接口的测试套件,主要用于测试文件系统对 POSIX 标准的兼容性。root下
步骤 1:安装依赖
首先,确保你已经安装了必要的依赖工具,如 git、automake、gcc 等构建工具
sudo yum install git automake gcc make libtool
步骤 2:克隆 pjdfstest 仓库 使用 git 克隆 pjdfstest 仓库:
git clone https://github.com/pjd/pjdfstest.git
cd pjdfstest //进入文件
步骤 3:准备构建环境,因为没有runtest脚本的存在,也没有makefile文件存在,所以不能够直接make,先用autotools手动生成配置文件。
autoreconf -i
./configure
Make
成功编译。。。
有一个tests文件夹
进入文件cd tests
以上文件代表什么意思呢
下面是每个文件夹的简要描述:
chflags:
用于测试 chflags 系统调用,该调用用来更改文件或目录的标志(例如不可修改、不可删除等)。
chmod:
用于测试 chmod 系统调用,该调用用来更改文件或目录的权限模式(例如可读、可写、可执行等)。
chown:
用于测试 chown 系统调用,该调用用来更改文件或目录的所有者和所属组。
conf:
可能包含配置文件或用于配置测试环境的脚本。
ftruncate:
用于测试 ftruncate 系统调用,该调用用来改变打开文件的大小。
granular:
可能包含一些细粒度的测试,具体取决于项目,可能测试文件系统操作的边界情况或细节。
link:
用于测试 link 系统调用,该调用用来创建文件的硬链接。
mkdir:
用于测试 mkdir 系统调用,该调用用来创建目录。
misc.sh:
可能是包含各种杂项测试的脚本。
mkfifo:
用于测试 mkfifo 系统调用,该调用用来创建命名管道(FIFO)。
mknod:
用于测试 mknod 系统调用,该调用用来创建特殊文件(例如设备文件)。
open:
用于测试 open 系统调用,该调用用来打开文件。
posix_fallocate:
用于测试 posix_fallocate 系统调用,该调用用来为文件预分配空间。
rename:
用于测试 rename 系统调用,该调用用来重命名文件或目录。
rmdir:
用于测试 rmdir 系统调用,该调用用来删除空目录。
symlink:
用于测试 symlink 系统调用,该调用用来创建符号链接(软链接)。
truncate:
用于测试 truncate 系统调用,该调用用来改变文件的大小。
unlink:
用于测试 unlink 系统调用,该调用用来删除文件。
utimensat:
用于测试 utimensat 系统调用,该调用用来更改文件的访问和修改时间。
如果只测试一个文件那么这么使用
sh chflags/00.t
输出
[root@openEuler tests]# sh chflags/00.t 1…1 ok 1
我现在要运行所有的测试脚本,我创建了一个sh脚本,我的目录是/home/openEuler/pjdfstest/tests,写脚本要给权限,chmod 777 /home/openEuler/pjdfstest/tests
运行下列脚本 ./test.sh我现在要运行所有的测试脚本,我创建了一个sh脚本,我的目录是/home/openEuler/pjdfstest/tests,写脚本要给权限,chmod 777 /home/openEuler/pjdfstest/tests
运行下列脚本 ./test.sh
#!/bin/bash
# 进入 tests 目录
cd /home/openEuler/pjdfstest/tests
# 遍历所有文件夹
for folder in */; do
if [ -d "$folder" ]; then
echo "Testing $folder..."
# 进入文件夹
cd "$folder"
# 遍历文件夹中的所有脚本文件
for test_case in *.t; do
if [ -f "$test_case" ]; then
echo "Running test case: $test_case"
sudo sh "$test_case"
echo
fi
done
# 返回上一级目录
cd ..
fi
done
测试结果:
test
测试输出结果,似乎有一些测试通过了,但有一个测试失败了,并标记为 “TODO”。这表示该测试在 Linux 环境下的预期行为与实际行为不同,但这种差异是已知的,且在测试脚本中已经标记出来了。测试输出结果,似乎有一些测试通过了,但有一个测试失败了,并标记为 “TODO”。这表示该测试在 Linux 环境下的预期行为与实际行为不同,但这种差异是已知的,且在测试脚本中已经标记出来了。
四 软件安装测试
安装QQ
首先去这个网站下载这个.sh
https://im.qq.com/linuxqq/download.html
用SCP命令移动到开发板中
进行安装:sudo sh linuxqq_2.0.0-b2-1089_arm64.sh
[openEuler@openEuler QQ]$ sudo sh linuxqq_2.0.0-b2-1089_arm64.sh
installing /usr/share/applications/qq.desktop
installing /usr/local/bin/qq
installing /usr/local/bin/crashpad_handler
installing /usr/local/share/tencent-qq/CHANGELOG.txt
installing /usr/local/share/tencent-qq/qq.png
installing /usr/local/share/tencent-qq/credits.html
installing /usr/local/share/tencent-qq/res.db
安装成功
至于微信的话怕是有点难度,可以先用wine代替一下,或者执行老一套把,这里不演示了。
五 GPIO测试
另外对自带的gpio进行测试
我将采用C++代码对GPIO进行文件操作。
此处有一个坑sudo yum update升级问题,如果有幸进坑了那么这个glibc版本就不对了,这个gpio_operate就不用了,需要降级
降级命令:sudo yum downgrade glibc glibc-common
之后就可以用gpio_operate对对他操作了。还有需要进行在root下:
#include <iostream>
#include <fstream>
#include <string>
#include <unistd.h>
using namespace std;
// 定义管脚
const string GPIO_PIN = "12";
// ??GPIO
void exportGPIO() {
ofstream exportGPIO("/sys/class/gpio/export");
if (exportGPIO.is_open()) {
exportGPIO << GPIO_PIN;
exportGPIO.close();
} else {
cerr << "无法导出GPIO" << endl;
}
}
// 设置GPIO方向
void setGPIODirection(const string& direction) {
ofstream gpioDirection("/sys/class/gpio/gpio" + GPIO_PIN + "/direction");
if (gpioDirection.is_open()) {
gpioDirection << direction;
gpioDirection.close();
} else {
cerr << " 设置GPIO方向?" << endl;
}
}
// 写入GPIO
void writeGPIOValue(const string& value) {
ofstream gpioValue("/sys/class/gpio/gpio" + GPIO_PIN + "/value");
if (gpioValue.is_open()) {
gpioValue << value;
gpioValue.close();
} else {
cerr << "无法写入GPIO" << endl;
}
}
int main() {
// ??GIO
exportGPIO();
sleep(1); // 等待管教输出
//设置方向
setGPIODirection("out");
// 设置为高
writeGPIOValue("1");
sleep(1);
writeGPIOValue("0");
return 0;
}
这里写了一个小例子,就可以对GPIO进行控制了,但是这样感觉效率不太高。不过这个板子主要用来干一些推理强一些。本期先写到这,下一期进行目标检测推理,如果训练一些轻量化的模型应该不是问题。
六 总结:
初次尝试香橙派开发板,感受到了其强大的性能和易用性。香橙派不仅预装了多款实用工具,而且接口丰富,生态系统完善,并且拥有全面的国产中文文档,极具探索价值。随着逐步深入探索,期待未来能分享更多关于香橙派的使用教程和技术博文,带来更多有趣的内容。