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/AM3352:SPI 引导和 NFS 引导之间的网络启动差异

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/586149/linux-am3352-network-startup-differences-between-spi-boot-and-nfs-boot

器件型号:AM3352

工具/软件:Linux

你(们)好

根据我是从闪存上的 JFFS2 rootfs 引导还是通过 NFS 引导,我在行为上遇到一些差异。
我使用的是运行最新 SDK 的 BeagleBoneBlack 开发板。

我尝试使用的 ROOTFS 是通过 Arago 项目创建的核心映像最小化版本
我们的项目空间非常大,因此我已经将 bitbake 构建配置为尽可能使用 busybox
例如

virtual-Runtime_dev_manager_forcevaribable ="busybox-mdev"
virtual-Runtime_login_manager_forcevaribable ="busybox"
virtual-Runtime_init_manager_forcevaribable ="busybox"
virtual-Runtime_initscripts_forcevaribable ="initscripts" 

我已将此图像转换为 JFFS2、以便在微米 SPI NOR 闪存芯片上运行:  

- JFFS2压缩版本与我导出用于 NFS 引导的文件夹相同。

我可以很高兴地将其作为基于 NFS 的 rootfs 运行、但从 SPI 闪存运行时会出现几个问题。
它们很可能相互关联。

我首先注意到、在从 SPI 闪存运行的引导上没有创建 eth0
-我想这是在 NFS 引导情况下触发的,因为需要找到 rootfs?
-引导程序中缺少的部分看起来像

[1.285988] net eth0:正在初始化 cpsw 版本1.12 (0)
[1.290956] net eth0:已初始化 cpsw ale 版本1.4
[1.295724] net eth0:ALE 表大小1024
[1.386304] net eth0:找到 PHY:ID:0x7c131
[1.390275] ethphy: PHY 4a101004]
net mDIO:未找到 PHY "4a101000.MDIO:01"在从站1上找不到 ERR -19
[1.430579] IPv6:ADDRCONF (NETDEV_UP):eth0:链路未就绪
[4.386685] CPsw 4a100000.Ethernet eth0:链路向上- 100Mbps/全-流控制 Rx/TX
[4.405973](NETDREV): 链路准备就绪
[4.426114]发送 DHCP 请求。
[4.515934]确定
[4.545932] IP-Config:从10.255.255.254获得 DHCP 应答,我的地址为10.255.0.152
[4.554253] IP-Config:完成:
[4.5557374] device=eth0、rootaddr=7c:66:9d:14=10.57152=255.255.0.0
、net=4.521.520.24=2.951.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00. mydomain.com.au



使用 SPI 闪存上的 rootfs 启动后、我似乎能够使用"udhcpc -i eth0"启动 eth0

root@elle-board:/etc/# udhcpc -i eth0
udhcpc (v1.24.1)已启动
[20115.764058] net eth0:正在初始化 cpsw 版本1.12 (0)
[20115.769100] net eth0:已初始化 cpsw 版本1.4
[20115.773871] net eth0:ale Table size [20115.769100] net
eth0:20115.0231.242]:
neth
:20115.8132phy:20115.08132] PHY "4a101000.MDIO:01"在从站1上找不到、错误-19
[20115.878488] IPv6:ADDRCONF (NETDEV_UP):eth0:链路未就绪
、正在发送发现...
[20118.856628] cpsw 4a100000.以太网 eth0:链路速率高达- 100Mbps/全速-流控制 Rx/TX
[20118.864124] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路已准备
好发送 discover...
正在发送10.255.255.0.152...的选择
已获得10.255.0.152的租赁,租赁时间86400
/etc/udhcpc.d/50default:添加 DNS 10.255.255.1
/etc/udhcpc.d/50default:添加 DNS 10.255.255.2

-是否只是在 init 脚本中找到正确的位置来启动此操作?


第二个 dropbear 无法开始引用:"加载共享库时出错:/lib/libdl.so.2:无效 ELF 标题"

初始化已启动:Busybox v1.24.1 (2017-03-22 16:26:43 AEDT)
起始 pid 67、tty '':'/etc/init.d/rcS
'启动 Dropbear SSH 服务器:dropbearkey:加载共享库时出错:/lib/libdl.so.2:无效 ELF 标头
起始 pid 81、tty '/dev/ttyS0:'/sbin/getty 115200 ttyS0'

初始化已启动:Busybox v1.24.1 (2017-02-09 12:59:11 AEDT)
起始 pid 67、tty ''
:'/etc/init.d/rcS 起始 Dropbear SSH 服务器:[ 5.915631]随机:Dropbear:未初始化 Dropurandom 读取(32字节读取、91位熵可用)
dropbear。
启动 pid 82、tty '/dev/ttyS0:'/sbin/getty 115200 ttyS0"

这让我感到非常困惑。

/lib/libdl.so.2是指向 libdl-2.21.so 的链接、用于比较此文件开头的内容、两种情况显示相同的字节
-内容本身就像这样

root@elle-board:/lib# dd if=/lib/libdl-2.21.so bs=256 count=2 | hexdump -C
2+0中的记录
输出
00000000 7f 45 4c 46 01 01 00 00 00 00 00 00 00 00 00 00 00 00 |.ELF ........... |
00000010 03 00 28 00 01 00 00 3c 09 00 34 00 00 00 |..( <...4...|00000020
f0 76 01 00 02 04 00 05 34 00 20 00 06 00 28 00 |.v. 4....(.|
00000030 25 00 22 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |%." |
00000040 00 00 00 68 14 00 68 14 00 00 05 00 00 00 |……………………………
| 00000050 00 01 00 00 00 e4 1e 00 e4 00 1e 01 00 |..........
|00000060 E4 1e 01 00 A4 01 00 D4 01 00 06 00 00 |..........
|00000070 00 01 00 02 00 00 F8 1e 00 F8 1e 01 00 |………………………………………………………………………………… |00000080
F8 1e 01 00 08 01 00 08 01 00 06 00 00 |.......... |
00000090 04 00 00 04 00 00 00 F4 00 00 F4 00 00 00 00 00 00 |..........
| 000000a0 F4 00 00 00 20 00 00 00 00 00 04 00 00 00 |…… (笑声) . |
000000b0 04 00 00 51 E5 74 64 00 00 00 00 00 00 00 00 00 00 |……问题… |
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 | |
000000d0 10 00 00 52 E5 74 64 e4 1e 00 00 e4 1e 01 00 |……R.Td……
| 000000e0 e4 1e 01 00 1c 01 00 1c 01 00 04 00 00 |..........
|000000f0 01 00 00 04 00 00 00 10 00 00 01 00 00 00 |.......... |
00000100 47 4e 55 00 00 00 00 00 02 00 00 06 00 00 | GNU .......... |
00000110 20 00 00 12 00 00 00 1D 00 00 04 00 00 00 00 |…………………………………………………………………… |00000120
07 00 00 00 98 00 11 00 42 00 82 00 0A |.......... B. |
00000130 93 28 00 D8 1D 00 00 00 00 00 00 00 00 00 00 1e 00 00 00 |.. |
00000140 00 00 00 00 00 00 00 00 00 1f 00 00 21 00 00 |........... !...|
00000150 23 00 00 24 00 00 25 00 00 00 00 00 00 00 00 00 |#...$...%..... |
00000160 26 00 00 00 00 00 00 00 27 00 00 00 00 00 00 00 00 ||。。 ”… |
00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 af C4 4D 0f |.......... m|
00000180 91 21 fc F8 c0 53 80 18 D9 3D 6c F6 94 B3 5F 19 |!... S..=L.._。|
00000190 05 e8 07 F9 7f 9e d0 18 61 A2 92 06 EB 16 A9 18 |… A. |
000001a0 61 af 00 f9 06 02 04 f9 fb 33 fb 0f 00 00 00 00 | a. 3… |
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.......... |
000001c0 40 08 00 00 00 00 00 00 03 00 0A 00 00 00 00 00 00 |@.......... |000001d0
F4 1e 01 00 00 00 00 03 00 13 00 60 01 00 |........... `……|
000001e0 00 00 00 00 00 00 00 12 00 00 00 df 00 00 00 |.......... |
000001f0 00 00 00 00 00 00 00 20 00 00 F4 00 00 00 |… . |
00000200

即使在使用 udhcpc 手动启动 eth0后、任何启动 dropbear 的尝试都会导致相同的错误

如果有任何关于我可以尝试进一步诊断这一问题的建议、我们将不胜感激

此致、
Richard

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

    [引用]cpsw 4a100000.ethernet eth0:链路速率高达- 100Mbps/全速-流控制 Rx/TX[/引用]

    我看到内核以一定的方式初始化 eth0。 因此、这应该起作用。

    [引用]-是否只是在初始化脚本中找到正确的位置来启动此操作? [/报价]

    文件系统是否使用 systemd 或 udev 从/etc/init.d?启动 init 脚本

    库。。。 这是非常奇怪的... 它是根据您使用的内核版本构建的

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

    你(们)好

    抱歉、如果我不清楚- SPI 引导中缺少我发布的有关 eth0的行(但在 NFS 引导中存在)

    我正在使用 busybox (或 busybox 内的 mdev)来运行 init 脚本-或者至少这是我通过 BitBake 变量强制我发布的意图

    我确信所有内容都是为正确的内核构建的:当我使用与 NFS 引导相同的文件运行时、所有内容都可以正常工作、并且我不必从 bitbake (或 Arago 项目)创建文件的方式中修改这些文件即可使其正常工作

    我开始怀疑在创建/转换到 JFFS2映像时可能会发生一些损坏(我必须修补 mkfs.jffs2以允许我们正在使用的芯片的小型擦除块)

    我将看到我在这方面可以发现的东西

    对于跟踪 库错误的可能原因、您可能会有任何其他建议、这将非常有用

    感谢你的帮助

    Richard

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

    你(们)好

    如果我在引导参数中的内核上抛出"ip=DHCP"、则可以解决第一个问题:这是合理的

    第二个问题更加令人困惑:

    这似乎是由于用于创建 rootfs 映像的 mkfs.jffs2应用程序之间的差异造成的

    如果我通过修补 Arago 工程编译中使用的 mkfs.jffs2来创建可安装、可靠的映像、我可以创建此映像

    但是、如果我尝试使用 mkfs.jffs2创建映像 、我在外部构建了该映像、则会出现错误行为。

    版本(以及压缩依赖项的版本)不同:

    工作:MTD-utils 1.5.2 zlib-1.2.8 lzo-2.9

    失败: MTD-utils 2.0.0  zlib-1.2.11 lzo-2.10

    补丁我应用了小改动以允许 eraseblocks < 4K:对于 mkfs.jffs2.c 的两个版本、这是相同的  

    因此、似乎自 Arago 工程编译中提到的版本以来发生了一些事情、以牺牲我所使用的设置的图像?

    使用的设置为:  

    --faketime -q --pad -l --eraseblock=0x1000 --no-cleanmarkers 

    我将确保使用通过 Arago 项目构建创建的 mkfs.jffs2;如果我有一些空闲时间、我将尝试重新访问此文件以确定问题所在的确切位置

    感谢你的帮助

    -Ricahrd