NFS 启动前调试以太网

NFS 启动前调试以太网

我正在尝试使用通过 NFS 服务的远程计算机上的文件系统从嵌入式 ARM 板上的 U-boot 启动 Linux。以太网连接似乎未正确连接,导致挂载 NFS 共享失败。不过,我知道以太网硬件可以工作,因为 U-boot 通过 TFTP 加载内核。

我该如何调试这个?我可以尝试调整内核,但这意味着每次迭代都要重新编译内核,这很慢。有没有一种方法可以让内核在无法挂载外部文件系统的情况下运行?

答案1

您可以将 initrd 映像编译到内核中 ( General Setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support -> Initramfs source file(s))。您以特殊格式指定文件,例如(my init for x86):

dir /bin                                    0755 0 0
file    /bin/busybox                        /bin/busybox    0755 0 0
file    /bin/lvm                        /sbin/lvm.static0755 0 0
dir /dev                                    0755 0 0
dir /dev/fb                                 0755 0 0
dir /dev/misc                               0755 0 0
dir /dev/vc                                 0755 0 0
nod /dev/console                                0600 0 0    c  5   1
nod /dev/null                               0600 0 0    c  1   3
nod /dev/snapshot                               0600 0 0    c 10 231
nod /dev/tty1                               0600 0 0    c  4   0
dir /etc                                    0755 0 0
dir /etc/splash                             0755 0 0
dir /etc/splash/natural_gentoo                      0755 0 0
dir /etc/splash/natural_gentoo/images                   0755 0 0
file    /etc/splash/natural_gentoo/images/silent-1680x1050.jpg  /etc/splash/natural_gentoo/images/silent-1680x1050.jpg  0644 0 0
file    /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg 0644 0 0
file    /etc/splash/natural_gentoo/1680x1050.cfg        /etc/splash/natural_gentoo/1680x1050.cfg        0644 0 0
slink   /etc/splash/tuxonice                    /etc/splash/natural_gentoo              0755 0 0
file    /etc/splash/luxisri.ttf                 /etc/splash/luxisri.ttf                 0644 0 0
dir /lib64                                  0755 0 0
dir /lib64/splash                               0755 0 0
dir /lib64/splash/proc                          0755 0 0
dir /lib64/splash/sys                           0755 0 0
dir /proc                                   0755 0 0
dir /mnt                                    0755 0 0
dir /root                                   0770 0 0
dir /sbin                                   0755 0 0
file    /sbin/fbcondecor_helper                 /sbin/fbcondecor_helper                 0755 0 0
slink   /sbin/splash_helper                 /sbin/fbcondecor_helper                 0755 0 0
file    /sbin/tuxoniceui_fbsplash               /sbin/tuxoniceui_fbsplash               0755 0 0
file    /sbin/tuxoniceui_text                   /sbin/tuxoniceui_text                   0755 0 0
dir /sys                                    0755 0 0
file    /init                           /usr/src/init   0755 0 0

我还没有在 ARM 上使用过它,但它应该可以工作。/init是您可以放置​​启动命令的文件。其余的是所需的各种文件(如 busybox 等)。

答案2

我想到了一些事情:

  • 使用 tcpdump、wireshark 或其他以太网数据包检查器来查看板是否将数据包发送到错误的地址或根本不发送任何内容。
  • 串行控制台上有什么(如果有的话)?
  • 尝试连接一个远程内核调试器
  • 如果您有可以重现问题的模拟器,请尝试在模拟器中运行。
  • 不只是获取内核,而是将引导和根文件系统放入闪存,或将根文件系统加载到内存盘

答案3

这篇文章是关于问题中提出的网络问题,而不是关于内核调试。

如果您的交换机支持生成树协议 (STP),请记住,当 STP 工作时,STP 可能不会在 6 秒或更长时间内激活交换机上的以太网端口。每次主机重置主机上的以太网端口时,这种延迟可能会重新开始,这种情况可能会在加电、DHCP 请求、内核加载网络驱动程序等之间多次发生。这可能会干扰无盘系统的 NFS 引导、DHCP、kickstart 等,给许多系统管理员带来了很多麻烦。有关一些示例,请参阅 RedHatBug 189795 - Kickstart 期间 DHCP 超时, 和本 PXE 指南

大多数高端交换机(例如 Cisco 交换机和 HP ProCurve 交换机)都支持 STP,并且所有端口均已启用该功能。

相关内容