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开发板nfs&tftp烧写手册》
【全套资料及网盘获取方式】联系淘宝客服加入售后技术支持群内下载
【视频介绍】:【强者之芯】 新一代AIOT高端应用芯片 iTOP -3588人工智能工业AI主板
第1章 TFTP&NFS网络烧写
使用网络烧写的方式来进行调试是非常方便的,本章将介绍使用tftp在服务器下载Linux内核镜像和设备树,并使用NFS网络挂载根文件系统的方法。
文档中使用的开发环境:Ubuntu20.04 LTS
平台:迅为iTOP-3588开发板
此外,开发板和Ubuntu的IP.0要在同一网段下,本文档Ubuntu的IP地址为192.168.1.19,开发板的IP地址设置为192.168.1.2,关于网络配置不再赘述。
手册以buildroot系统为例,如使用ubuntu系统,Debian系统,yocto系统等系统,也可以参考本手册。
1.1 安装TFTP服务端
首先在ubuntu 中执行以下命令安装 TFTP 服务:
apt-get install tftp-hpa tftpd-hpa
安装完成以后创建 TFTP 服务器工作目录,并对TFTP的服务配置文件进行修改,具体步骤如下:
输入以下命令在家目录创建tftpboot文件夹,如下图所示:
mkdir -p /home/topeet/tftpboot
然后输入以下命令修改tftpboot文件夹权限,如下图所示:
chmod 777 /home/topeet/tftpboot
最后修改配置文件,打开配置文件以后如下图所示:
vim /etc/default/tftpd-hpa
修改为如下内容:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/topeet/tftpboot/"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l-c-s"
修改完成如下图所示:
修改完成保存退出,在终端输入以下命令重启tftpd-hpa服务。
service tftpd-hpa restart
如下图所示:
1.2 安装NFS服务
首先执行以下命令安装 NFS 服务:
apt-get install nfs-kernel-server
然后使用以下命令创建ubuntu20desktop文件并赋予其权限如下图所示:
mkdir ubuntu20desktop
chmod 777 ubuntu20desktop/
使用以下命令编辑/etc/exports 文件,并添加 NFS 服务的工作目录的路径:
vim /etc/exports
添加 NFS 目录:
以/home/topeet/ubuntu20desktop 为例,将其添加到/etc/exports 文件中, 如下所示:
/home/topeet/ubuntu20desktop *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
使用以下命令编辑/etc/exports 文件,并添加 NFS 服务的工作目录的路径:
vim /etc/exports
添加 NFS 目录:
以/home/topeet/ubuntu20desktop 为例,将其添加到/etc/exports 文件中, 如下所示:
/home/topeet/ubuntu20desktop *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
配置参数说明:
rw :读写访问
sync :所有数据在请求时写入共享
async :NFS在写入数据前可以相应请求
secure :NFS通过1024以下的安全TCP/IP端口发送
insecure :NFS通过1024以上的端口发送
wdelay :如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay :如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
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_squas root用户具有根目录的完全管理访问权限
使用以下命令重启 NFS 服务:
service nfs-kernel-server restart
最后使用命令:“showmount -e ”查看nfs目录是否成功挂载(这里也可能要重启ubuntu才会又挂载目录),如下图所示:
至此,Ubuntu nfs 服务器端的配置完成。
1.3 配置开发板网络
连接好网线,上电启动开发板,在加载阶段点击“ctrl+c”进入uboot命令行,如下图所示:
然后来到ubuntu虚拟机终端,输入命令“ifconfig”来查看虚拟机ubuntu的ip,如下图所示:
可以看到ubuntu虚拟机的ip地址为192.168.1.19,然后输入以下命令设置开发板的网络,设置完成如下图所示:
setenv ipaddr 192.168.1.2
setenv serverip 192.168.1.19
setenv gateway 192.168.1.1
然后输入以下命令测试开发板与ubuntu虚拟机之间的网络是否畅通,测试成功如下图所示:
ping 192.168.1.19
如果环境变量不知道哪里设置错了,或者想要恢复成emmc启动,可以使用以下命令重置环境变量
env default -a
saveenv
注:若saveenv打印如下内容,需要进u-boot源码使用make menuconfig命令修改如下配置:
Environment --->
Select the location of the environment
(X) Environment in a block device
修改完配置,使用以下命令覆盖默认配置文件,重新编译烧写uboot镜像。
cp .config configs/rk3588_defconfig
1.4 tftp加载内核和设备树
内核镜像boot.img和设备树镜像rk3588-evb7-lp4-v10-linux.dtb需要通过Linux源码编译获得,具体的源码编译步骤可以查看“【北京迅为】itop-3588开发板源码编译手册v1.0.pdf”文件。
内核源码编译完成之后将内核镜像boot.img和设备树文件rk3588-evb7-lp4-v10-linux.dtb拷贝到第一小节创建的“/home/topeet/tftpboot”目录下,拷贝完成如下图所示:
然后根据上一小节内容配置自身ip和server ip,设置完成之后,使用以下命令将内核和设备树通过网络加载进内存之中,如下图所示:
setenv bootcmd "tftpboot 0x08300000 rk3588-evb7-lp4-v10-linux.dtb;tftpboot 0x0027f800 boot.img ; bootm 0x0027f800 - 0x08300000"
通过以上命令将boot.img镜像下载到首地址为0x0027f800的内存空间;将rk3588-evb7-lp4-v10-linux.dtb设备树镜像将下载到首地址为0x08300000的内存空间;随后输入以下命令,等待网络下载内核和设备树,如下图所示:
env run bootcmd
系统启动完成如下图所示:
注意,本小节内容只是对内核、设备树进行了加载,可以更便捷的进行内核和设备树的调试,而如果想要进行文件系统的网络调试可以进行下一小节内容的学习。
1.5 nfs挂载文件系统
要实现nfs挂载文件系统,进入内核源码目录使用make menuconfig命令进入内核配置界面进下如下配置,如下图所示:
[*] Networking support --->
Networking options --->
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARP support
File systems --->
[*] Network File Systems --->
[*] Root file system on NFS
配置完使用以下命令覆盖默认配置文件,然后重新编译烧写内核。
cp .config arch/arm64/configs/rockchip_linux_defconfig
1.5.1 获取文件系统镜像
由于文件系统类型较多,为了统一,使用以下两种方法来进行文件系统镜像的获取。
1.Linux源码编译
第一种方法为通过Linux源码编译获得,具体的镜像编译步骤可以查看“【北京迅为】itop-3588开发板源码编译手册.pdf”手册。编译完成之后,来到源码目录下的rockdev文件夹,其中rootfs.ext4就是要烧写的文件系统镜像,如下图所示:
在第二小节中创建的nfs目录为“/home/topeet/ubuntu20desktop”,将rootfs.ext4文件拷贝到“/home/topeet”目录下,拷贝完成如下图所示:
然后使用以下命令将文件系统挂载到ubuntu20desktop文件夹,如下图所示:
mount rootfs.ext4 ubuntu20desktop/
至此ubuntu虚拟机中的配置就完成了。
- update.img解包
为了方便,提供好的镜像为多个独立镜像整合在一起的update.img镜像文件,可以使用RKDevTool 工具来进行update.img的解包,获得rootfs.img文件系统镜像,可以通过“【北京迅为】itop-3588开发板快速烧写手册.pdf”手册中的4.4 小节“解包 update.img”来进行解包解包完成之后如下图所示:
在第二小节中创建的nfs目录为“/home/topeet/ubuntu20desktop”,将rootfs.img文件拷贝到“/home/topeet”目录下,拷贝完成如下图所示:
然后使用以下命令讲文件系统挂载到ubuntu20desktop文件夹,如下图所示:
mount rootfs.img ubuntu20desktop/
至此ubuntu虚拟机中的配置就完成了。
1.5.2 网络挂载
开发板最新的uboot镜像已经适配了网络功能,iTOP-3588开发板俩个网口都支持uboot网络,作者选择使用eth1。
Ubuntu虚拟机配置完成之后,回到开发板uboot终端,输入以下命令设置要挂载的文件系统,注意:标黄的部分是nfs挂载目录,要根据实际情况进行修改。
setenv bootargs "root=/dev/nfs root=/dev/nfs nfsroot=${serverip}:/home/topeet/ubuntu20desktop,v3 rw ip=${ipaddr}:${serverip}:${gateway}:255.255.255.0::eth1:off"
saveenv
最后输入以下命令进行文件系统的网络挂载,挂载成功如下图所示:
env run bootcmd
系统正常启动完成之后,如下图所示:
至此nfs挂载文件系统章节就结束了。