RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP,内置NPU,支持INT4/INT8/INT16/FP16混合运算能力,支持安卓12和、Debian11、Build root、Ubuntu20和22版本登系统。了解更多信息可点击迅为官网
【粉丝群】824412014
【实验平台】:迅为RK3588开发板
【内容来源】《iTOP-3588开发板系统编程手册》
【全套资料及网盘获取方式】联系淘宝客服加入售后技术支持群内下载
【视频介绍】:【强者之芯】 新一代AIOT高端应用芯片 iTOP -3588人工智能工业AI主板
第12章 环境设置和文件系统说明
12.1文件系统使用说明
由于开发板可以烧写多个Linux系统,每个系统的交叉编译器会存在区别,下面对本手册使用的文件系统做一个说明。
为了统一,本手册后续的实验都会使用buildroot文件系统,使用的交叉编译器版本为gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu。
Yocto文件系统和buildroot文件系统编译器相同,所以使用gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu编译器交叉编译出的可执行文件可以同时在烧写了buildroot和Yocto文件系统的开发板上运行,但buildroot文件系统功能更完善,建议使用buildroot文件系统来进行之后的实验。
如果使用的是Ubuntu 或者Debian文件系统,可以直接在开发板使用板载gcc编译器进行编译和运行。
12.2设置交叉编译器
在之前的章节中,所编写的应用程序都是PC端的ubuntu虚拟机编译运行的,而在之后的章节中,要在开发板上进行试验,ubuntu虚拟机运行在X86平台上,而开发板所处的平台为ARM端,两个平台所用到的编译器是不一样的,而在X86平台编译出可以在开发板端运行的可执行程序的过程就叫做交叉编译。
要想进行交叉编译,还需要对虚拟机ubuntu的交叉编译器进行设置,交叉编译工具在网盘资料“iTOP-3588开发板\02_【iTOP-RK3588开发板】开发资料\05_iTOP-3588交叉编译器”目录下,将交叉编译器压缩包拷贝到Ubuntu的/usr/local/arm64目录下(如果没有arm64文件夹的话,需要新建一个arm64文件夹),然后解压,如下图所示:
为了方便,采用设置临时环境变量的方法,所谓的临时环境变量,是指在某个终端设置了交叉编译的环境变量,如果更换了其他的终端窗口,设置的环境变量就失效了。
使用以下命令设置临时环境变量如下图所示:
export PATH=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
然后输入“echo $PATH”,查看环境变量是否添加,环境变量添加完成之后如下图所示:
然后在终端输入“aarch64-none-linux-gnu-”点击“tab”键会将设置的交叉编译器打印出来如下图所示:
至此,交叉编译器就设置完成了,再次提醒一下,通过export命令设置的环境变量只在当前终端有效,如果更换了终端,需要再次进行设置。
12.3 nfs实现共享目录
由于之后的应用程序都会在开发板上进行实验,而交叉编译的过程需要在ubuntu虚拟机来进行,这时候就需要一种方式,将交叉编译之后生成的可执行文件拷贝到开发板上,首先可以通过U盘、TF卡等传输介质来实现,而本小节将会讲解nfs实现共享目录的方式,实现更方便、快捷的文件传输与系统测试。
12.3.1搭建NFS服务器
首先在虚拟机Ubuntu 的root 用户下使用以下命令安装 Ubuntu NFS 服务,如下图所示:
apt-get install nfs-kernel-server
由于作者已经安装好了,所以这里显示零更新、零新安装,安装成功之后继续搭建 NFS 服务器。然后使用以下命令对exports文件进行内容的查看修改,进入文件之后如下图所示:
vim /etc/exports
在最后一行添加以下内容,添加完成如下图所示:
/home/nfs/ *(rw,sync,no_root_squash)
下面对添加的内容进行解释说明:
参数 | 说明 |
/home/nfs/ | 表示要共享的目录;“/home/nfs/ ”目录需要自己建,默认Ubuntu 中是没有的。 |
* | 代表允许所有的网络段访问; |
rw | 是可读写权限; |
sync | 是资料同步写入内存和硬盘; |
no_root_squash: | 是 Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限; |
其他 Ubuntu nfs 常用的参数有:
参数 | 说明 |
ro | 只读访问 |
async | nfs 在写入数据前可以相应请求 |
secure | nfs 通过以下的安全 TCP/IP 端口发送 |
insecure | nfs 通过 1024 以上的端口发送 |
wdelay | 如果多个用户要写入 NFS 目录,则归组(默认) |
no_wdelay | 如果多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置 |
hide | 在 nfs 共享目录中不共享妻子目录 |
no_hide | 共享 nfs 目录的子目录 |
subtree_check | 如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认) |
no_subtree_check | 和上面相对,不检查父目录权限 |
all_squash | 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录 |
no_all_squash | 保留共享文件的 UID 和 GID(默认) |
root_squash root | 用户的所有请求映射成如 anonymous 用户一样的权限(默认) |
no_root_squash root | 用户具有根目录的完全管理访问权限 |
anonuid=xxx | 指定 nfs 服务器/etc/passwd 文件中匿名用户多的 UID |
anongid=xxx | 指定 nfs 服务器/etc/passwd 文件中匿名用户的 GID |
保存退出之后,使用以下命令重启 rpcbind 服务,运行结果如下图:
/etc/init.d/rpcbind restart
然后输入以下命令重启 nfs 服务
/etc/init.d/nfs-kernel-server restart
运行结果如下图:
然后使用以下命令,查看是否成功挂载nfs目录(这里也可能要重启ubuntu,挂载目录才会出现),如下图所示:
showmount -e
至此,Ubuntu nfs 服务器端的配置完成。
12.3.2 NFS共享目录使用
通过路由器网线连接开发板和路由器。系统启动之后首先使用以下命令查看开发板 ip。
ifconfig
如下图所示:
然后在ubuntu同样使用以下命令查看 NFS 服务器的 ip,如下图所示:
ifconfig
可以查看到开发板和服务器在同一网段,使用 ping 命令测试网络可以看到开发板和 ubuntu 服务器之间的网络是连通的,如下图所示,
在开发板串口终端使用以下命令将ubuntu虚拟机端的 nfs共享目录/home/nfs 挂载到/mnt目录下,如下图所示:
mount -t nfs -o nfsvers=3,nolock 192.168.1.7:/home/nfs /mnt/
下面对部分参数进行讲解
192.168.1.7:ubuntu虚拟机的IP地址
/home/nfs :表示nfs共享目录的路径
/mnt :表示要挂载的路径
然后回到虚拟机 Ubuntu 系统中的”/home/nfs”目录(这个目录是 NFS 服务器目录,也就是在配置文件中设置的目录),使用“vim hello”命令新建 hello 文件,并添加“hello topeet nfs”内容,如下图:
此时在开发板挂载的目录下,可以看到刚刚创建的文件,如下图所示:
至此nfs共享目录的使用就演示完成了,之后的实验都会使用nfs共享目录来进行文件的传递,在后续的章节中也不会再加入文件传输相关的内容了。