我正在尝试通过 NFS 从运行 Windows 子系统 for Linux (Ubuntu 20.04.1 LTS) 的 Windows 10 机器加载根文件系统到运行 Angstrom Linux (v2017.06) 的嵌入式项目。我已将 Windows 中的驱动器 (R:) 映射到 WSL Linux 路径 (\wsl$\Ubuntu)。然后我有一个在 Windows 中运行的 NFS 服务器,指向路径 (R:\home\nfs\rootfs\rootfs)。在嵌入式项目(Angstrom)中,我使用以下命令挂载位置并获取文件系统。
'''
setenv nfsboot "setenv bootargs earlycon console=ttyS0,115200n8 root=/dev/nfs rootfstype=nfs
nfsroot=${serverip}:/R/home/nfs/rootfs/rootfs,nfsvers=3,nolock rw rootdelay=15
ip=${ipaddr}:${serverip}:${gatewayip}:255.255.255.0:hostname:eth0; booti ${loadaddr} - ${fdt_addr}"
'''
当 Angstrom 内核启动时,NFS 服务器(在 Windows 中运行)被挂载并验证了一些文件。我在 Windows 10 机器上使用 WinNFSd 作为服务器。这是 NFS 服务器的输出。
'''
=====================================================
Portmap daemon started
NFS daemon started
Mount daemon started
Local IP = 172.17.16.214
Type 'help' to see help
PORTMAP GETPORT 100005 1058
MOUNT NULL
MOUNT MNT R:\home\nfs\rootfs\rootfs from 172.17.16.79
PORTMAP GETPORT 100003 2049
NFS NULL OK
NFS FSINFO R:\home\nfs\rootfs\rootfs OK
NFS NOIMPNFS GETATTR R:\home\nfs\rootfs\rootfs OK
NFS FSINFO R:\home\nfs\rootfs\rootfs OK
NFS ACCESS R:\home\nfs\rootfs\rootfs OK
NFS LOOKUP R:\home\nfs\rootfs\rootfs\dev OK
NFS LOOKUPR:\home\nfs\rootfs\rootfs\sbin OK
NFS ACCESS R:\home\nfs\rootfs\rootfs\sbin OK
NFS LOOKUPR:\home\nfs\rootfs\rootfs\sbin\init OK
NFS ACCESSR:\home\nfs\rootfs\rootfs\sbin\init OK
NFS LOOKUPR:\home\nfs\rootfs\rootfs\etc OK
NFS ACCESSR:\home\nfs\rootfs\rootfs\etc OK
NFS LOOKUPR:\home\nfs\rootfs\rootfs\etc\init NOENT
NFS LOOKUPR:\home\nfs\rootfs\rootfs\bin OK
NFS ACCESS R:\home\nfs\rootfs\rootfs\bin OK
NFS LOOKUPR:\home\nfs\rootfs\rootfs\bin\init NOENT
NFS LOOKUPR:\home\nfs\rootfs\rootfs\bin\sh OK
NFS ACCESSR:\home\nfs\rootfs\rootfs\bin\sh OK
'''
但是,在嵌入式项目 (Angstrom) 中,我得到一个内核恐慌,指出由于错误 13 无法执行 sbin/init 和 bin/sh 文件。
'''
[ 2.408632]Waiting 15 sec before mounting root device...
[ 17.460112] VFS:Mounted root (nfs filesystem) on device 0:15.
[ 17.469007]devtmpfs: mounted
[ 17.472546]Freeing unused kernel memory: 1216K
[ 17.483119]Starting init: /sbin/init exists but couldn't execute it (error -13)
[ 17.511450]Starting init: /bin/sh exists but couldn't execute it (error -13)
[ 17.518567]Kernel panic - not syncing: No working init found. Try passing init= option to kernel.
See LinuxDocumentation/admin-guide/init.rst for guidance.
'''
init 文件看起来是一个链接,所以我尝试通过添加内核命令 init=/lib/systemd/systemd 来绕过它,但这也失败了,出现了与 systemd 相同的错误。错误 13 说这是权限失败,但我不确定为什么会得到它。我在 Ubuntu 中检查了这两个文件的文件权限,所有用户都拥有完全权限。可能是因为 Windows 中的映射到 R:?如果是这样,我该如何解决?
我是一个新手,我的想法已经不多了。你有什么想法可能会出错吗?