NFS経由で提供されるリモートシステムのファイルシステムを使用して、組み込みARMボードのU-bootからLinuxを起動しようとしています。イーサネット接続が誤って接続されているように見え、NFS共有はマウントされません。ただし、U-bootがTFTPを介してカーネルをロードするため、Ethernetハードウェアが機能していることがわかります。
どのようにデバッグできますか?カーネルを調整してみることもできますが、これは繰り返すたびにカーネルを再コンパイルする必要があるため、遅くなります。外部ファイルシステムをマウントせずにカーネルを実行する方法はありますか?
答え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 - キックスタート中のDHCPタイムアウトとこのPXEガイド。
CiscoスイッチやHP ProCurveスイッチなど、ほとんどの高度なスイッチはSTPをサポートし、すべてのポートでこの機能を有効にします。