NFS 启动
环境设置
- 硬件:Neardi LPA3588 开发板,Ubuntu 20.04 PC
- 软件:LPA3588 最新 SDK
为内核添加 NFS 支持
--- a/kernel/arch/arm64/configs/rockchip_linux_defconfig
+++ b/kernel/arch/arm64/configs/rockchip_linux_defconfig
@@ -24,7 +24,6 @@ CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
-CONFIG_BLK_DEV_INITRD=y
CONFIG_EMBEDDED=y
# CONFIG_COMPAT_BRK is not set
CONFIG_PROFILING=y
@@ -91,6 +90,10 @@ CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
CONFIG_IP_MROUTE=y
CONFIG_SYN_COOKIES=y
CONFIG_INET_ESP=y
@@ -118,6 +121,7 @@ CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_BRIDGE=y
+CONFIG_DNS_RESOLVER=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CAN=y
CONFIG_CAN_ROCKCHIP=y
@@ -228,9 +232,11 @@ CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
+CONFIG_USB_NET_QMI_WWAN=y
CONFIG_WL_ROCKCHIP=y
CONFIG_WIFI_BUILD_MODULE=y
CONFIG_AP6XXX=m
+CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_ADC=y
@@ -637,6 +643,19 @@ CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_SWAP=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_ROOT_NFS=y
+CONFIG_NFS_USE_LEGACY_DNS=y
+CONFIG_NFS_V4_2_READ_PLUS=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_BLOCKLAYOUT=y
+CONFIG_NFSD_SCSILAYOUT=y
+CONFIG_NFSD_FLEXFILELAYOUT=y
+CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_936=y
@@ -670,11 +689,3 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
CONFIG_FUNCTION_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_LKDTM=y
-CONFIG_USB_NET_DRIVERS=y
-CONFIG_USB_USBNET=y
-CONFIG_USB_NET_QMI_WWAN=y
-CONFIG_USB_WDM=y
-CONFIG_USB_SERIAL_WWAN=y
-CONFIG_USB_NET_CDCETHER=y
-CONFIG_USB_NET_CDC_NCM=y
-CONFIG_USB_NET_RNDIS_WLAN=y
更新内核
./build.sh kernel
生成路径 SDK/rockdev/boot.img
参考对应型号单独烧录 boot 分区
创建 NFS 服务器
sudo apt update
sudo apt install nfs-kernel-server
安装完成后,修改以下文件并添加最后一行(注意 NFS 目录可能不是 /home/neardi/nfs):
neardi@ubuntu2004:~$ cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/neardi/nfs *(rw,sync,no_root_squash,no_subtree_check)
/home/neardi/nfs 目录是根文件系统,对应 rockdev/rootfs.img 的内容。
配置 NFS 后,使用以下命令重启 NFS 服务器:
sudo systemctl restart nfs-kernel-server
验证 NFS 服务器配置
mkdir nfs
sudo mount -t nfs -o nfsvers=3 192.168.0.103:/home/neardi/nfs ./nfs/
IP 地址 192.168.0.103 对应安装 NFS 服务器的主机。如果成功,nfs 目录内容将镜像 NFS 服务器的 /home/neardi/nfs。
验证 NFS 启动
通过 UART 连接 LPA3588 开发板进行调试,在启动过程中按 ctrl + c 中断 u-boot
Hit key to stop autoboot('CTRL+C'): 0
=>
设置 u-boot 环境变量如下:
=> setenv ipaddr 192.168.0.100
=> setenv nfsroot /home/neardi/nfs
=> setenv nfsserverip 192.168.0.103
=> setenv bootargs console=ttyS2,1500000 root=/dev/nfs rw nfsroot=${nfsserverip}:${nfsroot},v3,tcp ip=${ipaddr}
根据您的设置修改 IP 地址。
最后,输入启动命令(如果要保存这些设置,请输入 saveenv):
=> boot
在启动挂载 NFS 期间,可能需要一些时间。由于 NFS 目录的大小较大(大约 3-4 GB),挂载需要时间。
在 LPA3588 板上成功挂载后,您将看到类似的日志:
[ 510.528586] #0: rockchip,es8388
[ 510.528593] #1: rockchip-hdmi0
[ 510.548504] VFS: Mounted root (nfs filesystem) on device 0:17.
[ 510.549499] devtmpfs: mounted
[ 510.565141] Freeing unused kernel memory: 7104K
[ 510.594388] Run /sbin/init as init process
完全启动后,您可以在 LPA3588 板上创建文件并检查它是否出现在 NFS 服务器目录中。例如:
root@LPA3588:/# echo "neardi nfs test" > test.log
检查 NFS 服务器目录:
neardi@ubuntu2004:~/nfs$ ls
bin boot.img dev firmware lib media opt rockchip-test run sdcard sys test.log udisk var
boot data etc home Lost+found mnt proc root sbin srv system tmp usr vendor
neardi@ubuntu2004:~/nfs$ cat test.log
neardi nfs test
要从 eMMC 复制 rootfs 系统,首先挂载 /dev/mmcblk0p7,如下所示:
root@LPA3588:/# mount -t ext4 /dev/mmcblk0p7 /mnt
root@LPA3588:/# ls /mnt
bin dev home media proc run srv tmp var
boot etc lib mnt rockchip-test sbin sys udisk vendor
data fireware lost+found opt root sdcard system usr
最后,将 /mnt/* 复制到 USB 驱动器。