This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/66AK2G12:NFS 装载超时

Guru**** 2943400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/673223/linux-66ak2g12-nfs-mount-times-out

器件型号:66AK2G12

工具/软件:Linux

您好!

我正在尝试在定制板上引导 Linux。   我使用的是2月15日下载的 Linux SDK 04.02.00.09。 我还在使用 CCS 7.3.0.00019。 U-Boot 版本为2017.01。

我已通过 wiki 上的说明配置了 NFS。  我的 bootargs 是"console=ttyS0、115200n8 rootwait=5 loglevel=8 rootfstype=NFS root=/dev/nfs rw nfsroot=192.168.0.14:/export/targetNFS、v3、TCP、rsize=4096、wsize=4096 IP=DHCP"。

尝试装入 NFS 卷时,我收到错误代码-110,超时。  我已在办公室的 Mac 上成功安装了 NFS 共享、因此 NFS 似乎在服务器端工作。 我还使用命令行通过 NFS 成功下载了 U-Boot 中的文件。

以下是/etc/exports 的内容:

/export*(rw、fsid=0、不安全、no_subtree_check、async、no_root_squash)
/export/targetNFS*(rw、noohide、unsecure、no_subtree_check、ashide、no_root_squash)
/home/jeff/ti/targetNFS *(rw、noync、unsecure、no_subtree_check、async、no_root_squash) 

我在"status = nfs_mount (&request)"行跟踪了 FS/nfs/super.c nfs_request_mount 的错误代码。

假设 U-Boot 和 Linux 之间的硬件配置发生了一些变化、这似乎是逻辑上的、这是导致问题的原因、因此我转储了以太网寄存器和 bootcfg 寄存器、没有发现影响时钟或相关引脚的差异。

在端口上,绿色链路指示灯呈稳定亮起,并且系统尝试安装 NFS 时,琥珀色活动指示灯会定期闪烁。  Linux 主机上的 Wireshark 捕获显示没有来自 K2G 板的活动。

我已按如下方式修改了相关的器件树节点:

Keystone-k2g-evm.dts

uart0{
pinctrl-names ="默认值";
pinctrl-0 =<< uart0_pines>;
状态="确定";
}

;&gbe0{
phy-handle =<&phy0>;
};

&netcp{
status ="确定";
};

&MDIO{
status ="确定";
}&gebe0:phy0@

=<以太网0>=内部延迟 ;
ti、tx 内部延迟= ;
ti, fifo-depth = ;
//phy-mode ="RGMII-id";
compatible ="以太网-phy-IEEE802.3-C22";
};
}; 

除了更深入地跟踪调用栈以查找错误源之外、我还不知道要在何处进一步执行此操作。  我可以说、我配置了一些错误的东西。  我们非常感谢您的任何帮助。

Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jeff:

    我们将对此进行研究。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 、我期待收到您的回复。  我将继续调查并将调查结果发布在此处。

    Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jeff、

    EVM 是否获得分配的 IP 地址? 我在运行4.2版本的 K2G 中使用 NFS 时没有发现任何问题。
    您可以"setenv boot net"并从 u-boot 中的默认设置中获取所有内容。 您可能需要修改 serverip、tftp_root、nfs_root。 args_net 具有 NFS 装载设置。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rex、

    感谢您的回答。

    由于此处理器上的 U-Boot 不支持 NAND 闪存(我们在订购电路板之后才知道这一点)、因此我无法存储 U-Boot 的自定义环境、而是修改了源代码中的默认环境。  我每次都通过 UART 加载 U-Boot、因为此平台不支持 NAND 引导。  因此、我丢失了默认引导命令的内容。  我认为我采取了从默认设置中执行的步骤、并将其修改为仅处理 tftp/NFS 引导。  我还必须在加载 PMMC 后停止处理器以禁用 RMII_REFCLKOUT 位、因此我的引导步骤如下所示:

    1. setenv serverip 192.168.0.14
    2. setenv nfs_root /export/targetNFS
    3. setenv 自动载入否
    4. DHCP
    5. tftpboot skern-k2g.bin
    6. MON_INSTALL ${loadaddr}
    7. tftpboot ti-sci-firmware-k2g.bin
    8. rproc init;rproc load 0 ${loadaddr}0x8354;rproc start 0;
    9. 使用 CCS 和 XDS100v2停止处理器并设置 ETHERNET_CLKCTRL=0x1
    10. 如有必要、加载符号/设置断点
    11. 恢复处理器
    12. tftpboot zImage
    13. tftpboot 0x88000000 keystone-k2g-evm.dtb
    14. bootz 0x82000000 - 0x88000000

    由于我正在通过 IP=DHCP、我将假定电路板正在尝试 DHCP。   我还尝试了 IP=any、结果相同。  DHCP、BOOTP 和 RARP 都内置在内核中。

    我想我可以尝试手动将 IP 地址作为 bootarg.  我将尝试此操作并报告我的调查结果。

    Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeff、

    在 u-boot 提示符下、您应该能够发出"env default -f -a"以恢复默认设置。 然后、您应该具有所有 u-boot 环境变量。 默认设置假定 DHCP 和 NFS 服务器是相同的系统。 您可以将 NFS 配置修改为 nfsroot=${nfsserverip}:${nfs_root}、而不是使用默认的 nfsroot=${serverip}:${nfs_root}。

    由于未分配 IP 地址、我通常会看到 NFS 挂载失败。 在引导日志中、您是否看到内核发送的 DHCP 请求并得到 DHCP 的应答? 如果由于某种原因未分配、我想知道它是否有助于在 args_net 中静态配置 IP 地址。 以下是我之前的引导。


    => pri 引导
    boot=net
    => pri serverip
    serverip=158.218.109.194
    => pri tftp_root
    TFTP_ROOT=psdk4209-k2g
    => pri nfs_root
    nfs_root=/nfs/nfs_fs1
    =>引导
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    正在读取 BOOT.SCR
    **无法读取文件 boot.scr **
    正在阅读 uEnv.txt
    **无法读取文件 uEnv.txt **
    。 完成
    BOOTP 广播1
    BOOTP 广播2.
    BOOTP 广播3.
    DHCP 客户端绑定到地址158.218.109.198 (1046 ms)
    使用 netcp@4000000器件
    来自服务器158.218.109.194的 TFTP;我们的 IP 地址为158.218.109.198
    文件名"psdk4209-k2g/skern-k2g.bin"。
    加载地址:0x87000000
    正在加载:########
    1.3 MIB/s
    完成
    传输的字节= 32832 (8040十六进制)
    K2_BM_15.07-53-ge1f885a soc:k2g built:09:30:18、2017年12月23日

    ##已安装显示器@ 0xc0f7000、freq [24000000]、状态202338304
    。 完成
    BOOTP 广播1
    DHCP 客户端绑定到地址158.218.109.198 (36ms)
    使用 netcp@4000000器件
    来自服务器158.218.109.194的 TFTP;我们的 IP 地址为158.218.109.198
    文件名"psdk4209-k2g/ti-sci-firmware-k2g.bin"。
    加载地址:0x82000000
    正在加载:########
    1.3 MIB/s
    完成
    传输的字节= 33620 (8354十六进制)
    0 -名称:'PMMC@2900000'类型:'内部存储器映射'支持:加载启动
    使用数据载入远程处理器0@addr=0x82000000 33620字节:成功!
    。 完成
    BOOTP 广播1
    DHCP 客户端绑定到地址158.218.109.198 (35ms)
    使用 netcp@4000000器件
    来自服务器158.218.109.194的 TFTP;我们的 IP 地址为158.218.109.198
    文件名"psdk4209-k2g/zImage"。
    加载地址:0x82000000
    正在加载:############################################################################
    ::::
    ::::
    [8.664338] IPv6:ADDRCONF (NETDEV_UP):eth0:链路未就绪
    [11.761411] netcp-1.0 2620110.netcp eth0:链路速率高达- 1Gbps/全速率-流控 Rx/TX
    [11.781031] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
    [11.811107]发送 DHCP 请求,好的
    [11.901017] IP-Config:从158.218.109.4获得 DHCP 应答、我的地址为158.218.109.198
    [11.909487] IP-配置:完整:
    [11.912941] device=eth0、hwaddr=50:72:24:d6:03:34、ipaddr=158.218.109.198、mask=255.255.255.0、gw=158.218.109.1
    [11.924013] host=DHCP-158-218-109-198、domain=am.dhcp.ti.com、nis 域=(无)
    [11.932144] bootserver=0.0.0.0、rootserver=158.218.109.194、rootpath= nameserver0=192.0.2.2,nameserver1=192.0.2.3
    [11.961198] ALSA 器件列表:
    [11.964309]未找到声卡。
    [12.111349] VFS:在设备0:15上安装根(NFS 文件系统)。
    [12.117866] devtmpfs:已安装
    [12.123250]释放未使用的内核内存:2048K
    [12.434312] systemd[1]:构建时间之前的系统时间、提前时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 IP=192.168.0.15:192.168.0.14:192.168.0.1:255.255.0.0作为 bootarg(根据 Documentation/filesystems/nfs/nfsroot.txt )传递,并找到相同的结果。 我不确定如何验证 Linux 是否获得 IP 地址。 以太网驱动程序初始化后,控制台上没有 IP 地址、DHCP 或 BOOTP 的指示。

    我签出了 include/configs/k2g_evm.h 文件以查看原始 u-boot 环境、并发现我省略的唯一步骤是 initrd、但我在内核配置中没有包含此 initrd。 我还尝试将 noinitrd 传递到内核、并获得与以前相同的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeff、

    您意味着您错过了" run init_fw_rd_${boot}"。 此步骤是下载以太网固件。 没有它、以太网端口就不会出现。 这可能是原因。

    => pri init_fw_rd_net
    init_fw_rd_net=DHCP ${rdaddr}${tftp_root}/${name_fw_rd};运行 set_rd_spec
    => pri 读数器
    读数地址= 0x88080000
    => pri name_fw_rd
    NAME_FW_rd = k2-fw-initrd.cpio.gz
    => pri set_rd_spec
    set_rd_spec=setenv rd_spec ${rdaddr}:${filesize}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在引导命令中按如下所示插入了此命令:

    1. setenv serverip 192.168.0.14
    2. setenv nfs_root /export/targetNFS
    3. setenv 自动载入否
    4. DHCP
    5. tftpboot skern-k2g.bin
    6. MON_INSTALL ${loadaddr}
    7. tftpboot ti-sci-firmware-k2g.bin
    8. rproc init;rproc load 0 ${loadaddr}0x8354;rproc start 0;
    9. 使用 CCS 和 XDS100v2停止处理器并设置 ETHERNET_CLKCTRL=0x1
    10. 如有必要、加载符号/设置断点
    11. 恢复处理器
    12. tftpboot ${rdaddr}${name_fw_rd};运行 set_rd_spec
    13. tftpboot 0x82000000 zImage
    14. tftpboot 0x83000000 keystone-k2g-evm.dtb
    15. bootz 0x82000000 ${rd_spec}0x83000000

    我看到的结果与以前相同。  我还尝试 了 DHCP ${rdaddr}${tftp_root}/${name_fw_rd};运行 set_rd_spec 但未成功。

    我错过了您之前的消息、因为我在发布前未刷新页面。  我仔细检查了 DHCP 消息、没有发现与 DHCP 相关的消息。  也就是说、手动传递 IP 地址也不成功。

    感谢您的帮助和及时响应。

    Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jeff、

    我尝试不使用默认脚本、而是使用您的脚本。 除了跳过步骤9-11、并将 DTB 加载地址从0x83000000更改为0x88000000之外、我能够顺利启动 K2G。 我还需要首先运行 findfdt 和 init_net 以设置 name_FDT 和 bootargs。 我的 tftp_root 被设置为 tftp 主目录下的子目录 psdk4209-k2g。 请参阅随附的控制台日志捕获。

    雷克斯

    e2e.ti.com/.../k2g.log

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我执行了与您完全相同的步骤、并获得了截然不同的日志输出。  然后、我意识到我可能已经在各种努力中对配置进行了皇家拧紧、因此我恢复到 defconfig、现在输出看起来更加相似。  几个器件树稍后进行了调整、我成功启动了!

    非常感谢您的帮助!

    Jeff