前情提要:大家好,我是Samle。有幸接到 CSDN 发来的测评邀请,下面针对 OrangePi Kunpeng Pro 开发板进行一些实践操作,让大家能更好的上手这块板子。
以下内容来自 官方说明
OrangePi Kunpeng Pro
采用4核64位处理器+AI处理器,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。OrangePi Kunpeng Pro
引用了相当丰富的接口,包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB(串口打印调试功能)、两个MIPI摄像头、一个MIPI屏等,预留电池接口等。OrangePi Kunpeng Pro
支持openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求,同时可以为各种应用场景提供更高效的算力,如云计算、大数据、分布式存储、高性能计算等。
接下来我将从外观、环境搭建、相关服务部署等多个方面进行介绍,下面就让我们进入正题:
一、开箱
1.1 外观展示




整个板子尺寸107x68mm
,重量82g
,不考虑散热模块厚度的话,比一般手机略小。相关硬件接口如下所示:

1.2 性能/接口参数
官方参数
项目 | 参数 |
---|---|
CPU | 4核64位处理器+ AI处理器 |
GPU | 集成图形处理器 |
AI算力 | 8TOPS算力 |
内存 | LPDDR4X:8GB/16GB(可选),速率:3200Mbps |
存储 | • SPI FLASH:32MB • SATA/NVME SSD(M.2接口2280) • eMMC插槽:32GB/64GB/128GB/256GB(可选),eMMC5.1 HS400 • TF插槽 |
Wi-Fi+蓝牙 | Wi-Fi 5双频2.4G和5G BT4.2/BLE |
以太网收发器 | 10/100/1000Mbps以太网 |
显示 | • 2xHDMI2.0 Type-A TX 4K@60FPS • 1x2 lane MIPI DSI via FPC connector |
摄像头 | 2x2-lane MIPI CSI camera interface,兼容树莓派摄像头 |
USB | • USB 3.0 HOST x2 • USB Type-C 3.0 HOST x1 • Micro USB x1 串口打印功能 |
音频 | 3.5mm耳机孔音频输入/输出 |
按键 | 1x关机键、1xRESET键、2x启动方式拨动键、1x烧录按键 |
40PIN | 40PIN 功能扩展接口,支持以下接口类型:GPIO、UART、I2C、SPI、 I2S、PWM |
风扇 | 风扇接口x1 |
预留接口 | 2PIN电池接口 |
电源 | Type-C PD 20V IN ,标准65W |
支持的操作系统 | openEuler |
1.3 上电开机
拿到板子第一步,当然是开机啦,那对于这个光秃秃的开发板,我们来看下要怎样正常开机。
1.3.1 拨码开关
开发板支持从 TF 卡、eMMC 和 SSD(支持 NVMe SSD 和 SATA SSD)启动。具体想从哪个设备启动是由开发板背面的两个拨码(BOOT1 和 BOOT2)开关来控制的。

BOOT1 和 BOOT2 两个拨码开关都支持左右两种设置状态,所以总共有 4种设置状态,开发板目前只使用了其中的三种。不同的设置状态对应的启动设备如下表所示:
拨码开关 BOOT1 | 拨码开关 BOOT2 | 对应的启动设备 |
---|---|---|
左 | 左 | 未使用 |
右 | 左 | SATA SSD 和 NVMe SSD |
左 | 右 | eMMC |
右 | 右 | TF 卡 |
1.3.2 HDMI接口
一开始当然还是借助显示屏进行装机比较方便,开发板有两个 HDMI 接口(目前只有 HDMI0 支持显示 Linux 系统的桌面,HDMI1 显示 Linux 系统桌面的功能还需等软件更新),如果想显示 Linux 系统的桌面,可以将开发板的 HDMI0 接口连接到 HDMI 显示器。

1.3.3 电源接口
有两个TypeC接口,右侧那个是电源接口,开发板上电开机后,需要等待一段时间,HDMI 显示器才会显示 Linux 系统的登录界面。关机键无开机功能,上电等待自动开机。


上电后等待几秒钟,即可正常开机,默认初始账号 openEuler
密码 openEuler
。默认 root
和 openEuler
用户的密码都为 openEuler
。


二、使用说明
正常开机和接入显示设备后,我们就可以开始着手下一步的使用。
2.1 SSH连接
为了方便我们远程连接终端(不至于一直接着显示屏,毕竟众所周知,显示屏最贵的是占地面积)。
开发板默认开放SSH连接,需要先知道板子在内网的IP地址。
2.1.1 查看IP地址
网线连接模式下,(HDMI显示)桌面右上角点击可查看主菜单。点击有线展开有线设置。


网络有线设置的最右侧设置按钮,点击可查看IP地址。


2.1.2 使用SSH连接
这样我们就可以不用外接显示设备,使用任意SSH工具即可连接:账号 root
密码 openEuler
。


2.1.3 设置静态IP地址
默认分配的IP地址可能经常变动,不利于固定的使用SSH进行连接,这里需要设置静态 IP 地址。

d 如果使用WIFI,记得将有线网络关闭,并关闭自动连接,避免设置了相同的静态IP造成冲突导致无网络。
使用设置的IP进行连接,可以看到,IP地址已经修改成功。

2.1.4 修改Root账户密码
使用账号 root
密码 openEuler
在SSH登陆,输入以下指令重设密码即可。
passwd root
2.2 安装Docker
Docker
容器部署服务对于拓展功能来说还是相当方便的,所以接下来我们安装一下Docker
# 更新软件包索引
sudo yum makecache
# 安装Docker
sudo yum install docker -y
# 启动Docker服务
sudo systemctl start docker
# 设置Docker开机自启
sudo systemctl enable docker
# 验证Docker安装成功
sudo docker -v
# 下载docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 修改二进制文件的执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装是否成功
docker-compose --version
2.3 内网穿透 + SSH连接
2.3.1 内网穿透
参考 NPS内网穿透保姆级教程、NPS内网穿透搭建(使用docker实现) 将SSH穿透到外网,以便于应对任意连接的WIFI
比如预先设置好连接手机热点,即可畅享在任何场合携带一个算力服务器
# 拉取镜像
docker pull ffdfgdfg/npc
# 创建挂载目录
mkdir -p /mnt/sdc/nps/conf
# 在NPS服务端创建客户端并展开可以查看到`客户端命令`,将命令中的server和key用来启动容器
docker run --restart=always -d --name=npc --net=host -v /mnt/sdc/nps/conf:/conf ffdfgdfg/npc -server=server-host:server-port -vkey=server-key -type=tcp

2.3.2 SSH链接
即可使用外网的IP和端口进行SSH链接

通过右侧监控可以看到,这块OrangePi Kunpeng Pro
开发板拥有4核8G的性能配置。
2.3.3 部署SSH连接工具
为了方便我们在任意有网设备上进行SSH连接,可以部署一个SSH连接工具sshwifty
# 拉取镜像
docker pull niruix/sshwifty:latest
# 创建挂载目录
mkdir -p /opt/sshwifty
# 生成秘钥 一路回车即可
openssl req -newkey rsa:4096 -nodes -keyout /opt/sshwifty/domain.key -x509 -days 90 -out /opt/sshwifty/domain.crt
# 启动容器
docker run --restart=always -d --name=sshwifty -p 5680:8182 -v /opt/sshwifty:/certs --env SSHWIFTY_DOCKER_TLSCERT="$(cat /opt/sshwifty/domain.crt)" --env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat /opt/sshwifty/domain.key)" niruix/sshwifty:latest
再开穿透把5680
开放到外部网络,方便使用(验证公网IP可访问,一样需要加https
)


2.4 远程桌面
远程桌面的连接形式由两种:使用Windows系统带有的远程连接进行链接,或者使用VNC,需要先使用显示器操作开放一下远程。
默认密码为
openEuler
使用VNC需要先开放对应权限


以上开放权限后,仍需在后续开启对应服务
2.4.1 XRDP + Windows远程连接
i 【异常】使用root账号登陆远程桌面会闪退
参考链接
# 引入下载源
wget https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
rpm -ivh epel-release-latest-8.noarch.rpm --nodeps
# 安装不上的时候试着删除yum remove epel-release后重新执行上面的下载安装
# 安装远程连接软件 xrdp
yum -y install xrdp
# sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
sed -i 's/max_bpp=32/max_bpp=24/g' /etc/xrdp/xrdp.ini
touch .xsession
echo xfce4-session > /root/.xsession
chmod +x /root/.xsession
systemctl restart xrdp && systemctl enable xrdp
# 删除前面引入的下载源配置文件
rm -rf /etc/yum.repos.d/epel*


2.4.2 VNC
# 这两行指令好像没用上
yum install python3-pip
pip3 install websockify
# 启动VNC服务器(如果在前面 2.4 远程桌面 没有设置VNC,这一步可能要设置密码,默认应该是openEuler)
vncserver
# 终止多余的会话
vncserver -kill :2
# 查看VNC占用端口(59开头的)
netstat -tulpn | grep ":59"
>>> tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 19675/Xvnc
>>> tcp6 0 0 :::5901 :::* LISTEN 19675/Xvnc
# 这个方法不行
# 将VNC服务器的端口映射到一个HTTP端口(例如:6080)
# websockify 5681 localhost:5901
# 通过HTTP协议直接连接VNC服务器
# http://OpenEulerIP:5681/vnc.html
参考 Web方式交付VNC 安装 novnc 将VNC服务发布到WEB端
yum install git npm
git clone https://github.com/novnc/noVNC.git
cd ./noVNC/utils/
# 要将生成的self.pem文件放到noVNC/utils底下 一路回车
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
# 切回主菜单
cd
# 切到项目地址
cd ./noVNC
# 安装依赖
npm install
# 切回主菜单
cd
# 测试启动项目,设置为localhost:5681的话只能通过穿透访问
./noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 0.0.0.0:5681
# 通过HTTP协议直接连接VNC服务器
# http://OpenEulerIP:5681/vnc.html

2.4.2.1 NoVnc设置开机自启动
创建文件夹存放日志
mkdir -p /opt/vnc
设置环境变量
vim ~/.bashrc
写入
export HOME=/root
执行生效
source ~/.bashrc
创建
rc-local.service
文件
如果存在的话可以不用创建sudo vim /etc/systemd/system/rc-local.service
写入
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
写入rc.local文件
vi /etc/rc.local # vi /etc/rc.d/rc.local
加入启动指令
# 环境变量不生效报:vncserver: The HOME environment variable is not set. # 直接在指令前指定环境变量 export HOME=/root # 不在这里启动vncserver 否则会连接异常 # nohup sudo /usr/bin/vncserver > /opt/vnc/vncserver.log 2>&1 & nohup sudo /root/noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 0.0.0.0:5681 > /opt/vnc/novnc.log 2>&1 &
保存后授权文件
chmod +x /etc/rc.local chmod +x /etc/rc.d/rc.local # 授权
启用服务
sudo systemctl enable rc-local
启动服务并检查状态
sudo systemctl start rc-local.service sudo systemctl status rc-local.service
重启测试
reboot
或者脚本启动
构造脚本vi start_vnc.sh
写入
#!/bin/bash # nohup sudo vncserver > /opt/vnc/vncserver.log 2>&1 & nohup sudo /root/noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 0.0.0.0:5681 > /opt/vnc/novnc.log 2>&1 &
设置
vi /etc/rc.local
加入启动指令
export HOME=/root /root/start_vnc.sh
2.4.2.2 vncserver开机自启
w 注意:如果不使用以下方法设置,而使用
rc.local
开机启动vncserver
,可能会导致连接异常

添加映射用户
编辑文件/etc/tigervnc/vncserver.users
例如设置用户root
来启动VNC显示,则添加一行:1=root
vi /etc/tigervnc/vncserver.users
d 此处添加的用户必须是已经存在的系统用户,否则会报错提示用户不存
拷贝示例服务文件
根据步骤1,将示例文件命名为对应编号的配置文件。cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
重新加载 systemd 配置
systemctl daemon-reload
启动服务
# 设置开机自启 systemctl enable vncserver@:1.service # 启动服务 systemctl start vncserver@:1.service # 验证服务 systemctl status vncserver@:1.service # 检查服务版本 vncserver -version
重启测试
reboot
最终效果
三、用途探索

可以看到,OrangePi Kunpeng Pro
开发板预装了openEuler 22.03 (LTS-SP3)
系统 以及GNOME 3.38.6
可视化图形界面。实际可用内存7.4G
,不具备独立显卡,使用llvmpipe (LLVM 12.0.1, 128 bits)
进行图形渲染。
下面可以来看下,拥有这样一块便于携带、性能相对富裕的开发板,能够来做些什么呢:
3.1 私人网盘
# 拉取 NextCloud 镜像
sudo docker pull nextcloud
# 创建挂载目录
mkdir -p /opt/nextcloud
# 启动容器并映射到5682端口
sudo docker run -d --restart=always --name nextcloud -p 5682:80 -v /opt/nextcloud:/data nextcloud


修改IP绑定
docker exec -it nextcloud bash
apt-get update
apt-get install vim
vim config/config.php
修改 trusted_domains
,添加我们需要访问的域名或IP,IP 需要填写端口,域名直接写二级域名
'trusted_domains' =>
array (
0 => '192.168.11.22:8111',
1 => 'omv.local',
),

重启容器
docker restart nextcloud
3.2 自建集成服务
写一个简单的页面用来管理我们部署的服务,方便快速使用。


四、扩容
移动硬盘格式化为FAT32/exFAT
插入移动硬盘后运行命令
sudo fdisk -l
根据大小找到系统盘和移动硬盘,然后执行下面的命令,把SD卡里的系统复制到硬盘中
sudo dd bs=4M if=/dev/mmcblk1 of=/dev/sda
拷贝需要一定的时间,请耐心等待
需要注意几个问题:
bs=4M
,M必须大写,否则会报错(dd invalid number 4m)if=/dev/mmcblk1
是系统分区of=/dev/sda
后面是内存卡的路径
断电拔卡
关机断电后,拔出SD卡替换原有的系统TF卡,然后再上电开机。磁盘分区
可以看到存储空间并未完全使用,通过拷贝仅使用了原来的空间大小。还需要输入以下指令帮助我们调整分区
# 把/dev/mmcblk1下的第一个分区扩充到100%(应该这个是失效的,可以考虑跳过使用下面的指令) sudo parted /dev/mmcblk1 resizepart 1 100% >>> 信息: 你可能需要 /etc/fstab。 # 再尝试使用(应该是这个指令生效了) parted -l # 出现如下信息 >>> 型号:SD SD128 (sd/mmc) >>> 磁盘 /dev/mmcblk1:128GB >>> 扇区大小 (逻辑/物理):512B/512B >>> 分区表:gpt >>> 磁盘标志: >>> 编号 起始点 结束点 大小 文件系统 名称 标志 >>> 1 839MB 128GB 127GB ext4 # 这个时候使用 sudo fdisk -l # 或者使用均 lsblk # 均可以看到已经拓展到118G,但是实际根目录还是32G # 磁盘空间存在异常,还需要调整(参考下面处理异常) >>> /dev/mmcblk1p1 1638400 249670622 248032223 118.3G Linux 文件系统
处理异常
换回原先的TF卡,将新卡当做U盘插入,调整修复磁盘空间e2fsck -f /dev/sda1 sudo resize2fs /dev/sda1
五、总结
当你做完以上步骤,恭喜你,你已经使用OrangePi Kunpeng Pro
开发板,成功自己搭建了一个Linux服务器。
你可以在任意地方,远程连接上放在家里的这块板子,通过VNC连接的形式进行办公或者文件下载。
如果你厌倦了各大网盘的网速或者私密性,这块板子就是你的私人网盘。
如果你配了自己的手机热点,你还可以随身携带这块板子,在任意地方开启服务。
如果你懂一点点代码,想拥有更多服务可以自由自在的定制化开发。
今天的装机教程就到这里,谢谢大家观看。