准备一台ARM的嵌入式设备,最小配置(4G内存、32G存储空间)。
下面以【冠弈GA235】工控机 或 【友善R5C】软路由 为范例进行安装,这两款设备的CPU均为RK3538,内存4G,32G存储空间。
提醒:
1、操作系统和通用软件的安装和配置
ARM设备通常为嵌入式设备,其操作系统通常是生产厂家以固件的形式随机附送,往往不具有通用性。
各种通用软件的安装,谨遵生产厂家的指导。遇到问题,请及时找生产厂家的技术人员支持解决。
比如灵狐在选购友善R5C设备后,在安装通用软件和环境配置阶段,也同样遇到过刷机和安装的问题。
该产品优点主要是自带比较多的接口,更适合工业场景使用,缺点就是比友善的R5C价格高50%左右,主要适合工业现场使用。
该产品优点就是价格比较便宜,缺点是只带USB的接口,跟智能设备通信的时候,需要额外购买其他USB外设模块,主要适合学习使用。
【冠弈GA235】
Linux操作系统
友情提示:跟商家选购主机的时候,要求商家出厂预装ubuntu 22.0的固件。
【友善R5C】
Linux操作系统
友善提供的ubuntu 24.0固件:rk3568-usb-ubuntu-noble-core-6.1-arm64-20251222.zip
友善同时提供了刷机工具DriverAssitant_v5.1.1.zip,以及刷机教程
友情提示:友善也提供了debian、friendlywrt的固件,但灵狐并没有太多时间去测试这些固件,有DIY爱好的用户可以自行尝试。
1、JAVA:openjdk-11-jdk 或 openjdk-17-jdk
2、MySql或Mariadb:MySql8.0以上版本 或者 Mariadb 10.5.x以上版本
3、Redis:6.0以上版本
4、nginx:1.18以上版本
5、python3:3.8.x以上版本
相关资料,请在购买设备的时候,自行跟商家索取
【冠弈GA235】
跟商家选购主机的时候,要求出厂预装ubuntu 22.0的固件。
【友善R5C】
以下是灵狐跟淘宝商家购买设备的时候,淘宝商家提供给灵狐的相关信息:
1:R2S固件和官方资料:http://wiki.friendlyarm.com/wiki/index.php/NanoPi_R2S/zh
2:R2S常见问题:https://pan.baidu.com/s/10nxOE5mUzUIN9XKSL0EWPw 提取码:kypq
操作系统 Ubuntu
# 参考设备厂商友善所提供的刷机方式,选用ubunut操作系统固件,将设备的操作系统刷成ubunut
基础软件 net-tools
#测试发行:友善的固件rk3568-usb-ubuntu-focal-desktop-arm64已经预装了该软件包
远程登录linux
# 远程登录:固件包rk3568-usb-ubuntu-focal-desktop-arm64的初始账号:pi,密码:pi
login as:pi
# 切换为root账号,方便后面的软件安装
sudo -i
基础软件 vim
#经测试:友善的固件rk3568-usb-ubuntu-focal-desktop-arm64已经预装了该软件包
基础软件 dos2unix
# dos2unix工具:windows环境下编辑的sh文件,经常会因为文件格式不同导致无法运行,此时需要使用dos2unix进行格式转
# 换处理,否则会出现/bin/bash^M: bad interpreter: No such file or directory的错误,导致无法执行
apt install dos2unix -y
# dmidecode工具:查询CPU信息,这是设备序列号的信息来源
apt install dmidecode -y
# 查询CPU RK3538信息的Linxu命令
cat /proc/cpuinfo | grep Serial |awk -F': ' '{print $2}'
基础软件 openssh
#经测试:友善的固件rk3568-usb-ubuntu-focal-desktop-arm64已经预装了该软件包
基础软件 vsftpd(非必须软件,安装它仅为了方便于开发调试)
# 更新软件
apt-get update
# 安装vsftpd
apt-get install vsftpd -y
# 设置开机启动并启动ftp服务
systemctl enable vsftpd
systemctl start vsftpd
#查看其运行状态
systemctl status vsftpd
#重启服务
systemctl restart vsftpd
基础软件 java
# 更新软件
apt-get update
# 安装jdk
apt install default-jdk -y
#查看版本信息,应该是openjdk 11
java -version
#安装jmap:fox-edge运行阶段,会使用JMAP进行GC操作
apt install openjdk-11-jdk-headless -y
#检查jmap是否安装成功
jmap
基础软件 mysql8.0
mysql和mariadb是师出同源的开源技术,后面由不同的组织进行各自维护。它们基本上保持兼容,根据自己环境的需要,可以选择其中一种进行安装。
#更新源
apt-get update
#安装
apt-get install mysql-server -y
#验证
systemctl status mysql
#修改配置文件:bind-address = 127.0.0.1修改为bind-address = 0.0.0.0
#关闭binlog日志:在末尾添加 skip-log-bin ,登录后可以用show variables like '%log_bin%%';查询log_bin变为off
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#
#重启mysql
systemctl restart mysql
#验证mysql
systemctl status mysql
基础软件 mariadb10.5(mysql 8.0的兼容性方案,它与mysql8.0二选一,从测试状况看,它比mysql8.0更节省内存)
mysql和mariadb是师出同源的开源技术,后面由不同的组织进行各自维护。它们基本上保持兼容,根据自己环境的需要,可以选择其中一种进行安装。
#更新源
apt-get update
#安装
apt-get install mariadb-server -y
#验证
systemctl status mysql
#修改配置文件:bind-address = 127.0.0.1修改为bind-address = 0.0.0.0
#关闭binlog日志:在末尾添加 skip-log-bin ,登录后可以用show variables like '%log_bin%%';查询log_bin变为off
vim /etc/mysql/mariadb.conf.d/50-server.cnf
#重启mysql
systemctl restart mysql
#验证mysql
systemctl status mysql
基础软件 创建mysql的root账号(非必须配置,配置它仅为了方便于开发调试)
# -u 指定用户名 -p需要输入密码 回车输入密码
mysql -u root -p
#后面是进入mysql后的操作
#查看用户权限
mysql>
use mysql;
select host, user, plugin from user;
#创建用户:'root'@'%'
create user 'root'@'%' identified by '12345678';
grant all privileges on *.* to 'root'@'%';
flush privileges;
exit;
基础软件 redis
#更新
apt-get update
#安装redis
apt install redis-server -y
#检查安装结果
systemctl status redis-server
#修改配置文件
vim /etc/redis/redis.conf
#1.注释掉 bind 127.0.0.1 ::1 位置在69行左右
#2.修改protected-mode为no 位置在88行左右
#3.修改requirepass为12345678 位置在507行左右或者在790行左右
#重启redis
systemctl restart redis-server
基础软件 Python3 (可选软件,有些用户想要安装自己的Python服务,作为更强大的边缘计算平台)
#更新
apt-get update -y
#安装python3
apt-get install python3 -y
#安装pip,Python3的组件库,需要通过该工具进行安装
apt-get install pip -y
#为Python3安装redis.py组件
pip install redis
#为Python3安装pymysql.py组件
pip install pymysql
ubuntu的虚拟内存扩容
说明:
在嵌入式设备设置swap的目的,是因为Fox-Edge是JAVA开发,对内存的要求比较高。
当整个系统使用的内存空间超过4G的时候,有了SWAP空间作为冗余,可以放心的充分去使用4G内存空间,而不用担心内存不足带来的各种问题。
注意:
灵狐设置swap一直未能成功,总是报swapon failed: Invalid argument的错误。
跟商家沟通,也未能得到该问题的回复,在社区内也没有得到解决问题的答案。
nginx的安装
#更新仓库
apt update
#默认安装nginx
apt install nginx -y
#检查nginx的安装是否成功
systemctl status nginx
#重新装载配置
nginx -s reload
samba的安装,非必须软件,安装它仅为了方便于开发调试
#更新
apt-get update
#安装samba
apt-get install samba -y
#修改配置文件
vim /etc/samba/smb.conf
#增加下面的配置
#------------------#
[share]
# 设置共享目录
path = /
# 设置访问用户
valid users = root
# 设置读写权限
writable = yes
#------------------#
#创建samba用户
smbpasswd -a root
#重启samba
service smbd restart
静态端口配置
ubuntu不同的版本有不同的配置方法,通常是22版本后在/etc/netplan中配置,20版本前在/etc/network/interfaces中配置, 但是还是得具体看你选择的ubuntu固件制作者,比如友善的ubuntu20固件,得采用/etc/network/interfaces配置
# 使用ifconfig查看当前动态分配的IP地址信息,可以看到网卡名、IP名称、子网掩码
# 比如,我用ifconfig看到,我的物理网卡名字叫eth1,当前IP是192.168.1.7,子网掩码是255.255.255.0
# 我想固定分配为192.168.1.23,那么可以编辑/etc/network/interfaces文件,加入以下内容,然后重启
# vim /etc/network/interfaces
#网卡名称
auto eth1
#指明为静态分配IP
iface eth1 inet static
#具体的IP地址
address 192.168.1.23
#子网掩码
netmask 255.255.255.0
#网关地址
gateway 192.168.1.1
windows常用命令
# windows有记忆网上邻居信息的功能,问题是这功能有时候是访问不了samba的肇事者
# 比如,linux的samba信息变化了,windows记忆的信息不匹配了,就访问不了samba。
# 比如,比如你开了多个linux虚拟机,IP来回使用,windows记忆的信息又匹配了,又访问不了samba。
# 但是,windows在访问不了的时候,不直接提供给你删除旧信息和重新输入的功能
# 下面提供windows访问不了samba的时候,删除旧信息,重新初始化的办法。
# 打开windows的命令行工具cmd,输入下面命令,然后删除旧凭证,接着重新访问samba,
# 然后你就看到windows重新让你输入账号/密码,然后就可以访问samba了。
control keymgr.dll
ufw的安装(可选软件,安装它是为了加固开放式的公网环境下的网络安全,避免遭受外部的恶意攻击)
#更新仓库
apt update
#默认安装防火墙
apt install ufw -y
#版本查看
ufw version
#查看防火墙运行状态,此时默认是未激活状态的
#注意:此时千万别激活,否则你会发现全部都登录不上去了,因为防火墙默认的策略是"禁止所有入向,放行所有出向"
ufw status
#重要:首先要放开ssh端口和web端口和gateway端口,保证你在防火墙激活后,能够登录SSH和WEB
#在开发阶段,可以自己添加放开的指定端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 9000/tcp
#允许开发者的IP访问。自己的公网IP可以通过百度浏览器上搜索IP,百度会反射回你的公网IP给你
#ufw allow from 120.230.79.1/24
#启动防火墙:此时,你会发现无法通过web访问工控机了,因为防火墙默认的策略是"禁止所有入向,放行所有出向"
ufw enable
#查看防火墙策略的编号
ufw status numbered
#删除指定的策略
#ufw delete 2
#禁止防火墙:开发调试阶段,可以先关闭防火墙
#ufw disable
usb模块的安装
为了扩展工控机的物理接口,开发者经常会在市场上购买USB转LORA、串口之类的外部模块,插入LINUX后使用,如何检测是否识别成功呢? 下面以淘宝上购买的某家USB-485为例,插入USB-485模块后Ubuntu立即自动识别出QinHeng Electronics CH340 serial converter这个USB设备, 并自动挂载成名字为ttyUSB0的串口设备。后面就可以通过channel-serial服务,直接使用该ttyUSB0串口
# 未插入USB模块之前,先执行lsusb:查看工控机上的usb设备是否存在
lsusb
# 此时只有两个系统自带的虚拟化usb设备
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# 插入淘宝USB转串口模块后,再执行lsusb,发现多出来一个USB模块,
lsusb
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
#Bus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter <---------这是发现的USB转串口模块
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
#确认串口节点是否存在
ls -al /dev/ttyU*
#crw-rw---- 1 root dialout 188, 0 Jul 13 14:02 /dev/ttyUSB0 <---------这是发现了串口生成的串口
实际使用中发现,友善制作的NanoPi的Unbuntu20.0固件之中,开机启动有比较消耗性能的非必要服务,禁用掉它们可以有效提升NanoPi的性能。 例如,使用TOP命令发现LUbuntu默认界面管理器SDDM服务特别消耗性能,而Fox-Edge并不需要用到它,可以使用下面方式关闭掉它,减少不必要的性能消耗。
# 查看开机启动的配置服务列表
systemctl list-unit-files
# 通过TOP命令发现,LUbuntu默认界面管理器SDDM服务特别消耗性能,但Fox-Edge并不使用到该服务,所以可以停止该服务的启动
# 通过下面命令查看,可以发现该服务的运行状态和启动状态都是enable
systemctl list-unit-files | grep sddm
# 关键命令:禁用开机启动sddm服务
systemctl disable sddm
# 停止正在运行的sddm服务
systemctl stop sddm
# 检查该sddm服务的运行状态
systemctl status sddm
#使用top命令查看,可以看到CPU占用率降下来了。
top