Hello,
I am currently working on setting up NFS boot on a Jetson Xavier device and have run into some issues I hope to get assistance with. I’m using Jetson Linux R32.7.2 and have been trying to configure the device to boot over NFS using a bridged network interface configured via DHCP and preserve the bridge without severing the nfs connection. NOTE: I’ve been successful with static IP NFS booting, and I’m manually flashing with the script rather than using Jetpack. I’m also using the example rootfs provided by nvidia.
The setup involves bridging the eth0 and eth1 interfaces on the Xavier. I’ve manually modified the init script within the initrd to create the bridge and it appears to set up correctly when I ifconfig
in the bootloader. However, I’m unable to acquire an IP address through DHCP for the bridged interface. I have watched the traffic from the DHCP server and the verbose output from the /sbin/dhclient
and attempted to correct the errors the /sbin/dhclient
spits out.
Here’s a brief overview of the steps I’ve taken so far:
- Modified the l4t_initrd.img init script to set up the bridge on nfs boot. See below for code snippet.
- I’ve tried to fix all errors spit out using
/sbin/dhclient
by adding arm64 compiled libraries, bin and sbin programs, and missing directories
– I addedbrctl
– I addeddhclient-script
and all lib.so type deps
– I added directories that were missing such as/var/lib/dhcp
to hold the lease
initrd init script modification in the nfs section:
elif [[ "${rootdev}" == "nfs" ]]; then
brctl addbr br1
brctl addif br1 eth1
brctl addif br1 eth0
ifconfig eth1 0.0.0.0
ifconfig eth0 0.0.0.0
ifconfig br1 up
timeout 8s /sbin/dhclient br1
if [ $? -ne 0 ]; then
echo "ERROR: DHCP Bridge br1 fail..." > /dev/kmsg;
exec /bin/bash;
fi;
nfsroot_path="`cat /proc/cmdline | sed -e 's/.*nfsroot=\([^ ,]*\)[ ,].*/\1 /'`";
nfsroot_opts="`cat /proc/cmdline | sed -ne 's/.*nfsroot=\([^ ,]*\),\([^ ]*\).*/\2 /p'`";
if [[ "${nfsroot_opts}" == "" ]]; then
nfsroot_opts="nolock"
fi
mount -t nfs -o ${nfsroot_opts} ${nfsroot_path} /mnt/ &>/dev/kmsg;
if [ $? -ne 0 ]; then
echo "ERROR: NFS mount fail..." > /dev/kmsg;
exec /bin/bash;
fi;
The bridge itself seems to be getting setup correctly, but dhclient does not seem to be able to assign an IP address to the bridged interface. The init script exits on the nfs mount to bash and I’m able to run ifconfig to see that the br1 interface does not have an ip.
What is odd is I’m able to successfully nfs boot with a single (non-bridged) DHCP interface, a single (non-bridged) static IP, and a bridged static IP. So I know dhcp works and I know the brctl is setting up a static bridge correctly.
I can not modify the interfaces once the OS comes up due to losing the nfs mount.
Could someone provide insight into what might be going wrong or what additional steps I should take to troubleshoot this issue? Any advice on bridging interfaces for NFS boot on the Jetson platform would be greatly appreciated. I can provide more detailed configuration files and script changes if necessary.
Thank you for your time and assistance.
Sean