挂载 nfs 文件系统

111 篇文章 30 订阅
104 篇文章 24 订阅

环境

硬件:I.MX6U ALPHY V2.2
宿主机:Ubuntu 20.04

概述

我们的目的是在 kernel 启动后,将 nfs 文件系统挂载成板子的根文件系统。因此,bootloader、kernel、dtb 文件都可以使用板子存储介质(emmc、SD 卡)上的,只将根文件系统参数设置成宿主机上的一个 nfs 目录即可。
不过,我在进行上述尝试时,总是无法挂载成功,原因是 kernel 启动后,网卡初始化有问题,导致系统无法找到 eth0,网络不通,也就无法挂载 nfs。
出错信息如下,供遇到相同问题的小伙伴们参考:

Starting kernel ...

Booting Linux on physical CPU 0x0
...
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
lib80211: common routines for IEEE802.11 drivers
Key type dns_resolver registered
Registering SWP/SWPB emulation handler
snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 2023-03-26 19:57:45 UTC (1679860665)
IP-Config: Failed to open eth0
IP-Config: Device `eth0' not found

根据下面这两个帖子的介绍,尝试更换 kernel 试试
求助NFS挂载不上,IP-Config: Failed to open eth0
IP-Config: Failed to open eth0 IP-Config: Device ‘eth0’ not found
在正点原子资料下载中心,找到了更新后的 kernel
i.MX6ULL Linux阿尔法开发板
在这里插入图片描述
不过我的板子明明是 I.MX6U ALPHY V2.2 版本的,使用 01、V2.4版本之前的底板 的 kernel 竟然还是不行,使用 02、V2.4版本及以后的底板 竟然可以,如下。

更换 kernel

由于不想重新烧录 emmc,就直接在 uboot 启动时从宿主机下载 kernel。uboot 环境变量 bootcmd 修改如下:

bootcmd=tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-evk.dtb; bootz 80800000 - 83000000

这样,在 uboot 就会从宿主机下载 kernel 和 dtb 到内存,然后启动。
另外,要想挂载 nfs,uboot 环境变量 bootargs 还需修改如下:

bootargs=console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.223:/home/liyongjun/project/board/IMX6ULL/rootfs,proto=tcp rw ip=192.168.31.224:192.168.31.223:192.168.31.1:255.255.255.0::eth0:off'

02、V2.4版本及以后的底板 中的 zImage 拷贝到宿主机 tftp 目录下,然后启动板子,kernel 成功驱动网卡,网络通了,nfs 也就挂载成功了

fec 20b4000.ethernet eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=20b4000.ethernet:01, irq=-1)
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
IP-Config: Complete:
     device=eth0, hwaddr=00:04:9f:04:d2:35, ipaddr=192.168.31.224, mask=255.255.255.0, gw=192.168.31.1
     host=192.168.31.224, domain=, nis-domain=(none)
     bootserver=192.168.31.223, rootserver=192.168.31.223, rootpath=
can-3v3: disabling
ALSA device list:
  #0: wm8960-audio
VFS: Mounted root (nfs filesystem) on device 0:15.
devtmpfs: mounted
Freeing unused kernel memory: 404K (80929000 - 8098e000)
INIT: version 2.88 booting
Starting udev
udevd[88]: starting version 3.1.5
random: udevd urandom read with 118 bits of entropy available
random: nonblocking pool is initialized
kjournald starting.  Commit interval 5 seconds
EXT3-fs (mmcblk1p2): using internal journal
EXT3-fs (mmcblk1p2): 1 orphan inode deleted
FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
EXT3-fs (mmcblk1p2): recovery complete
EXT3-fs (mmcblk1p2): mounted filesystem with ordered data mode
mmc0: Timeout waiting for hardware interrupt.
------------[ cut here ]------------
WARNING: CPU: 0 PID: 0 at drivers/mmc/host/sdhci.c:1008 sdhci_send_command+0x88c/0xdfc()
Modules linked in:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.1.15 #1
Hardware name: Freescale i.MX6 Ultralite (Device Tree)
[<80015ed4>] (unwind_backtrace) from [<80012794>] (show_stack+0x10/0x14)
[<80012794>] (show_stack) from [<8069d5b0>] (dump_stack+0x80/0xc8)
[<8069d5b0>] (dump_stack) from [<8003824c>] (warn_slowpath_common+0x74/0xb0)
[<8003824c>] (warn_slowpath_common) from [<80038324>] (warn_slowpath_null+0x1c/0x24)
[<80038324>] (warn_slowpath_null) from [<804bf3d0>] (sdhci_send_command+0x88c/0xdfc)
[<804bf3d0>] (sdhci_send_command) from [<804c1a58>] (sdhci_timeout_timer+0x70/0xb8)
[<804c1a58>] (sdhci_timeout_timer) from [<8007d61c>] (call_timer_fn+0x24/0x9c)
[<8007d61c>] (call_timer_fn) from [<8007dbc8>] (run_timer_softirq+0x1b8/0x250)
[<8007dbc8>] (run_timer_softirq) from [<8003b3e4>] (__do_softirq+0xf0/0x228)
[<8003b3e4>] (__do_softirq) from [<8003b7ac>] (irq_exit+0xb0/0xfc)
[<8003b7ac>] (irq_exit) from [<8006f61c>] (__handle_domain_irq+0x70/0xe8)
[<8006f61c>] (__handle_domain_irq) from [<80009440>] (gic_handle_irq+0x20/0x60)
[<80009440>] (gic_handle_irq) from [<80013240>] (__irq_svc+0x40/0x74)
Exception stack(0x8098ff30 to 0x8098ff78)
ff20:                                     8098ff78 00000009 190ab536 00000004
ff40: 144713f4 00000004 00000002 8bb34dd8 190ab536 00000004 8098b740 00000001
ff60: 00000017 8098ff78 a6aaaaab 804a9ec0 000c0013 ffffffff
[<80013240>] (__irq_svc) from [<804a9ec0>] (cpuidle_enter_state+0xcc/0x1f8)
[<804a9ec0>] (cpuidle_enter_state) from [<800671ac>] (cpu_startup_entry+0x1c0/0x324)
[<800671ac>] (cpu_startup_entry) from [<80929be8>] (start_kernel+0x334/0x3a0)
---[ end trace 3fedfe05f719614a ]---
mmcblk0: error -84 sending status command, retrying
mmcblk0: error -110 sending stop command, original cmd response 0x0, card status 0x900
mmcblk0: error -110 transferring data, sector 15564672, nr 8, cmd response 0x0, card status 0x0
mmc0: tried to reset card
kjournald starting.  Commit interval 5 seconds
EXT3-fs (mmcblk0p2): using internal journal
EXT3-fs (mmcblk0p2): recovery complete
EXT3-fs (mmcblk0p2): mounted filesystem with ordered data mode
FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
bootlogd: cannot allocate pseudo tty: No such file or directory
Populating dev cache

ALSA: Restoring mixer settings...
Found hardware: "wm8960-audio" "" "" "" ""
Hardware is initialized using a generic method
Running postinst /etc/rpm-postinsts/100-hostapd-rtl871xdrv...
Running postinst /etc/rpm-postinsts/101-hostapd-rtl871xdrv...
Running postinst /etc/rpm-postinsts/102-hostapd...
Running postinst /etc/rpm-postinsts/103-hostapd...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... ifup skipped for nfsroot interface eth0
run-parts: /etc/network/if-pre-up.d/nfsroot: exit status 1
Starting system message bus: Starting Xserver
dbus.
Starting Connection Manager
Starting Dropbear SSH server: Generating key, this may take a while...

Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCX+R4dMzOcDZW1yid0WWvFH3efkHn2mmGTKwViYhxlPxa/kpEzP2guiOiwmin5FA7cPl88y57VOvVps1V0uwM8MyI8pOB70F1/60i9AMvN0uKAED9YE05JZMelo6jMdmIGAa2c4LvZRTk+4cWH3zQq+xIYBr6wEtvWPrh99ZxRu4Puj34Ao+hXlyfzh7bKktLCTvOekM2uZ80Na/dSzd4dpxOZc5An/9aSpfRKfRoNVu7Oo1ueTdpARknOD6nEY5jx37vB3i/bNN3OXsYqslXwu4N9ulX7ya6WPkggxRzLx7gILIxXe6Hly1xpxLu5Ql8VJXZvtPlw9mFDobxbG8gn root@ATK-IMX6U
Fingerprint: md5 c6:7a:70:fd:fe:6b:ea:5b:79:30:e6:fe:c6:7b:3e:4e
dropbear.
Starting rpcbind daemon...done.
Starting watchdog: [  OK  ]
starting statd: done
Starting advanced power management daemon: No APM support in kernel
(failed.)
Starting atd: OK
exportfs: can't open /etc/exports for reading
NFS daemon support not enabled in kernel
Starting system log daemon...0
Starting kernel log daemon...0
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon                       [ ok ]
Starting Telephony daemon
Starting Linux NFC daemon
* starting FTP Server: vsftpd... done.
Starting crond: OK
Starting nginx: nginx.
Running local boot scripts (/etc/rc.local).

root@ATK-IMX6U:~# 
root@ATK-IMX6U:~# 
root@ATK-IMX6U:~# imx6ul-tsc 2040000.tsc: Timeout for adc calibration

root@ATK-IMX6U:~# 
root@ATK-IMX6U:~# ls
driver  shell
root@ATK-IMX6U:~# ls
driver  shell

在宿主机创建的文件,可以在板子同步看到,验证成功
在这里插入图片描述

root@ATK-IMX6U:~# ls
driver  shell  test
root@ATK-IMX6U:~# date
Sun Mar 26 20:36:04 UTC 2023
root@ATK-IMX6U:~# ls -lh
total 8.0K
drwxr-xr-x 6 1000 tracing 4.0K Nov  5  2021 driver
drwxr-xr-x 6 1000 tracing 4.0K Nov  5  2021 shell
-rw-rw-r-- 1 1000 tracing    0 Mar 26 12:36 test

总结

关键点:kernel 报 eth0 not found,要快速定位问题(是 kernel 阶段的问题,可能是 kernel 的网卡驱动编译有问题,可能是设备树和硬件不匹配等),并找到解决办法。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 要在Linux上挂载NFS文件系统,需要执行以下步骤: 1. 确保NFS服务器已经启动并且共享了需要挂载的目录。 2. 在Linux上创建一个本地目录,用于挂载NFS文件系统。 3. 执行以下命令挂载NFS文件系统: mount -t nfs <NFS服务器IP地址>:<共享目录路径> <本地目录路径> 例如,如果NFS服务器的IP地址是192.168.1.100,共享目录路径是/export,本地目录路径是/mnt/nfs,那么挂载命令应该是: mount -t nfs 192.168.1.100:/export /mnt/nfs 4. 如果需要在系统启动时自动挂载NFS文件系统,可以将挂载命令添加到/etc/fstab文件中。例如: 192.168.1.100:/export /mnt/nfs nfs defaults 这样,系统启动时就会自动挂载NFS文件系统。 ### 回答2: NFS(Network File System)可以让不同的计算机共享它们的文件系统。Linux可以挂载其他计算机上的NFS文件系统,从而实现文件共享。 挂载NFS文件系统需要进行以下步骤: 步骤一:安装NFS客户端 在Linux中,挂载NFS文件系统需要安装NFS客户端,可以使用以下命令进行安装: sudo apt-get install nfs-common 步骤二:创建本地挂载点 在Linux中,需要先创建一个本地的挂载点,作为NFS文件系统挂载位置。可以使用mkdir命令创建一个目录,例如: sudo mkdir /mnt/nfs 步骤三:挂载NFS文件系统 使用mount命令挂载远程的NFS文件系统,例如: sudo mount -t nfs 远程NFS服务器地址:/共享目录路径 /mnt/nfs 其中,远程NFS服务器地址是NFS服务器的IP地址或主机名;共享目录路径是NFS服务器上共享的目录路径;/mnt/nfs是本地挂载点。 步骤四:验证挂载 挂载完成后,可以使用df命令来查看挂载NFS文件系统,例如: df -h 如果看到了挂载NFS文件系统的信息,则说明挂载成功。 步骤五:设置自动挂载 如果需要在Linux启动时自动挂载NFS文件系统,可以在/etc/fstab文件中添加一条挂载记录,例如: 远程NFS服务器地址:/共享目录路径 /mnt/nfs nfs defaults 0 0 其中,远程NFS服务器地址是NFS服务器的IP地址或主机名;共享目录路径是NFS服务器上共享的目录路径;/mnt/nfs是本地挂载点。 通过以上步骤,就可以在Linux中成功挂载NFS文件系统了。需要注意的是,在使用NFS文件系统时,要确保网络连接畅通,否则会出现无法访问的情况。 ### 回答3: Linux挂载nfs文件系统是利用网络文件系统NFS)协议,在Linux系统中挂载远程服务器上的文件夹或磁盘分区。在Linux服务器中,可以使用以下命令来挂载NFS文件系统: 1. 创建挂载点:使用mkdir命令创建一个挂载点,假设我们将要挂载一个名为nfs_share的目录,那么可以执行以下命令创建挂载点: ```sudo mkdir /mnt/nfs_share``` 2. 确保安装NFS客户端:在Linux服务器上安装NFS客户端,可以通过命令检查是否已经安装,如果没有安装,则通过命令安装: ```sudo apt-get install nfs-common``` 3. 挂载远程文件系统:利用mount命令,将服务器的资源挂载到本地计算机,需要指定服务器IP地址和文件系统的共享目录,例如: ```sudo mount 192.168.1.100:/nfs_share /mnt/nfs_share``` 其中`192.168.1.100`是NFS服务器的IP地址,`/nfs_share`是共享目录的路径,`/mnt/nfs_share`是挂载点目录。 4. 挂载完成:挂载完成后,可以使用命令`df -h`查看挂载点所占用的磁盘空间,以及命令`mount`查看已挂载文件系统。 5. 自动挂载:如需在系统重启后仍然保持挂载,则需在`/etc/fstab`文件中添加挂载项。例如,可以在该文件中添加以下内容: ```192.168.1.100:/nfs_share /mnt/nfs_share nfs defaults 0 0``` 这样,系统重启后会自动挂载`192.168.1.100`服务器上`/nfs_share`目录到本地`/mnt/nfs_share`目录。 总之,通过以上步骤,我们可以简单快速地将Linux系统中的NFS文件系统挂载到本地,实现文件的共享和访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Yongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值