在 R32.7.2 上使用桥接接口和 DHCP 在 Jetson Xavier 上进行 NFS 启动时出现问题

在 R32.7.2 上使用桥接接口和 DHCP 在 Jetson Xavier 上进行 NFS 启动时出现问题

我目前正在 Jetson Xavier 设备上设置 NFS 启动,遇到了一些问题,希望得到帮助。我使用的是 Jetson Linux R32.7.2,并一直试图将设备配置为使用通过 DHCP 配置的桥接网络接口通过 NFS 启动,并在不切断 nfs 连接的情况下保留桥接。注意:我已经成功进行了静态 IP NFS 启动,并且我使用脚本手动刷新而不是使用 Jetpack。我还使用了 nvidia 提供的示例 rootfs。

该设置涉及桥接 Xavier 上的 eth0 和 eth1 接口。我手动修改了 initrd 中的 init 脚本以创建桥接,当我ifconfig进入引导加载程序时,它似乎设置正确。但是,我无法通过 DHCP 获取桥接接口的 IP 地址。我观察了来自 DHCP 服务器的流量和来自的详细输出,/sbin/dhclient并尝试纠正/sbin/dhclient吐出的错误。

以下是我迄今为止采取的步骤的简要概述:

  • 修改了 l4t_initrd.img 初始化脚本以在 nfs 启动时设置桥接。请参阅下面的代码片段。
  • 我尝试/sbin/dhclient通过添加 arm64 编译库、bin 和 sbin 程序以及缺失目录来修复使用时出现的所有错误
  • 我补充道brctl
  • 我添加了dhclient-script所有 lib.so 类型 deps
  • 我添加了缺少的目录,例如/var/lib/dhcp保存租约

initrd初始化脚本中nfs部分的修改:

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;

桥接器本身似乎设置正确,但 dhclient 似乎无法为桥接接口分配 IP 地址。init 脚本在 nfs 挂载到 bash 时退出,我可以运行 ifconfig 来查看 br1 接口没有 ip。

奇怪的是,我能够使用单个(非桥接)DHCP 接口、单个(非桥接)静态 IP 和桥接静态 IP 成功进行 nfs 启动。所以我知道 dhcp 可以正常工作,并且我知道 brctl 正在正确设置静态桥接。

由于丢失了 nfs 挂载,一旦操作系统启动,我就无法修改接口。

有人能提供一些见解,说明可能出了什么问题,或者我应该采取哪些其他步骤来解决这个问题吗?任何有关在 Jetson 平台上桥接 NFS 启动接口的建议都将不胜感激。如有必要,我可以提供更详细的配置文件和脚本更改。

感谢您的时间和帮助。

肖恩

相关内容