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))로 컴파일할 수 있습니다. (x86의 경우 my init)과 같은 특수 형식으로 파일을 지정합니다.

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(Spanning Tree Protocol)를 지원하는 경우 STP가 작동 중일 때 STP는 6초 이상 스위치의 이더넷 포트를 활성화하지 않을 수 있다는 점을 명심하십시오. 이 지연은 호스트가 호스트의 이더넷 포트를 재설정할 때마다 다시 시작될 수 있으며, 이는 전원 켜기, DHCP 요청, 네트워크 드라이버의 커널 로딩 등 사이에 여러 번 발생할 수 있습니다. 이는 디스크가 없는 시스템의 NFS 부팅, DHCP, 킥스타트 등을 방해하여 많은 시스템 관리자에게 많은 문제를 일으킬 수 있습니다. 몇 가지 예를 보려면 RedHat을 참조하세요.버그 189795 - Kickstart 중 DHCP 시간 초과, 그리고이 PXE 가이드.

Cisco 스위치 및 HP ProCurve 스위치와 같은 대부분의 고급 스위치는 STP를 지원하며 모든 포트에서 이 기능을 활성화합니다.

관련 정보