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.

[参考译文] AM5728:u-boot 的作用不及运行 Linux

Guru**** 633105 points
Other Parts Discussed in Thread: AM5728, BEAGLEBOARD-X15
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1128946/am5728-what-does-the-u-boot-do-more-than-running-linux

器件型号:AM5728
主题中讨论的其他器件: BeagleBoard-X15

大家好。

直到今天、我确信 u-boot 的最小任务是启动 CPU 和 DDR、加载 DTB 和 Linux 并运行 Linux、从而告诉它 DTB 的位置。
我知道它可以提供更多的服务,但最重要、最起码的是上述服务。

似乎我错了!

我生成了 u-boot、除 NAND 外没有其他组件、这在我的定制板中属于我的情况。 我不需要 MMC、SPI、PCI、任何显示选项等
我的案例非常简单-从 NANDs 引导 Linux -就是这样。

这种"极简"的 u-boot 似乎甚至不允许启动预构建的 Linux 映像!!
简而言之:
(我的 u-boot)+(预构建的 DTB)+(预构建的内核) ->不启动内核("启动内核..."之后没有任何内容)
(预构建 u-boot)+(预构建 DTB)+(预构建内核) ->运行一切正常。

那么、我的问题是:u-boot 应该为 Linux 做些什么来保证 Linux 完全正常工作?
在哪里可以找到详细解释这些方面的内容?

非常感谢。

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

    您好!

    是否提示您的自定义 MLO 和 U-Boot? 您将需要 UART 初始化、pinmux 和 PMIC 初始化。 因此、我要说的是、首先使用运行中的引导加载程序、然后进行优化。

    此致、

    基尔西

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

    谢谢、Kerrthy。
    但是、正如我在文章中所说的、我确实会出现提示、并且能够通过 TFTP 加载内核。 但内核甚至不会启动。
    请注意(!) 我的问题:u-boot 对于 Linux 应该做些什么来保证 Linux 能够完全正常工作?
    我编译的内核会运行、但某些功能(例如- DSS)不会出现、尽管我在".config"中配置了它们。 它们仅在我运行预构建的 u-boot 时出现!
    这就是为什么我的问题- u-boot 对内核的作用不仅仅是运行它?

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

    Leon、

    我会说使用预构建的内核尝试您的自定义 u-boot。 它是否具有所有功能? 您是否尝试过这种组合?

    请将完整日志作为文本文件附加。

    此致、

    基尔西  

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

    尊敬的 Keermy:

    请阅读我的帖子!!!!

    [引用 userid="274047" URL"~/support/processors-group/processors/f/processors-forum 1128946/am5728-what-do-we-u-boot-do-mo-mo-and-than -running - linux/4196101#4196101]]我会说使用预编译内核尝试您的自定义 u-boot。 它是否具有所有功能? 您是否尝试过这种组合?

    这正是我在问题帖子中所写的内容!:

    [引用 userid="50076" URL"~/support/processors-group/processors/f/processors-forum 1128946/am5728-whit-do-we-u-boot-do-more than -running - linux"](my u-boot)+(预构建 DTB)+(预构建内核) ->不启动内核(在"启动内核..."之后没有任何内容)


    请、请-如果可以、请回答问题 -除 RAM 和 UART 外、u-boot 需要为内核提供什么?
    我们看到内核依赖于 u-boot 完成的一些初始化(否则内核应该启动)-它们是什么、这些初始化是什么?

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

    Leon、

    抱歉。 您能否共享用于引导 Linux 内核的 bootargs?

    您需要传达 u-boot 选择内核和 DTB 的位置。 您说过您正在使用 tftp 加载、但能否共享完整的引导日志? 此外、您还可以在目标中添加耳塞、以获得一些早期打印。

    如果您有基本的 U-boot 问题、我建议您查看邮件列表: u-boot-bounces@lists.denx.de

    此致、

    基尔西

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

    谢谢、Keerty。

    bootargs 不变。 除了 u-boot 之外、测试之间没有任何变化。
    内核命令行:console=ttyS2,115200n8 root=/dev/nfs ip=192.168.1.1:192.168.1.57:192.168.1.254:255.255.255.0::eth0:off nfsroot=192.168.1.57:/opt/FS_AM5728 RW noinitrd

    !!! 添加"arlycon"确实提供了一些结果、尽管我不理解它。。。。:-)

    因此、再说一次-预构建的 u-boot 工作正常。 现在、我只将预构建更改为 u-boot。 这是唯一的改变!
    以下 是我的 u-boot 的日志文件、其中包含预构建的 DTB 和内核:

    ========================================================================================================

    <13:45:55.901> U-Boot 2021.01.PLL (2022年8月7日- 16:01:49 +0300) eHDVR

    <13:45:55.901>型号:am5728-eHDVR
    <13:45:55.902>电路板:eHDVR 修订版1.
    <13:45:55.902> DRAM:1 GiB
    <13:45:55.952> NAND:0 mib
    <13:45:55.952>从 NAND 中加载环境... ***警告- readenv()失败,使用默认环境

    <13:45:55.953>无需 EEPROM
    <13:45:56.000>网络:eth2:以太网@48484000
    <13:45:56.031> u-boot-eHDVR=>设置 ipaddr 192.168.1.1
    <13:45:56.111> u-boot-eHDVR=>项目为10516
    设置 ipNFS 192.168.1.57
    <13:45:58.521> u-boot-eHDVR=>设置 ipaddr 192.168.1.1
    <13:45:58.776> u-boot-eHDVR=>设置 netargs 'setenv bootargs console=ttyS2、115200n8 root=/dev/nfs ipaddr:$ipnf:192.168.1.254:255.255.255.0:eth0:off n
    fsroot=$ipnfs:/opt/Fs_AM5728 rw noinitrd 只读 con'
    <13:45:59.493> u-boot-eHDVR=>设置 serverip $ipNFS
    <13:45:59.621> u-boot-eHDVR=>设置子网掩码255.255.255.0
    <13:45:59.828> u-boot-eHDVR=>设置自动载入否
    <13:46:00.022> u-boot-eHDVR=>设置引导延迟3.
    <13:46:00.227> u-boot-eHDVR=>设置 uvencmd 'setenv autoloadno;tftp 0x82000000 am5728_zImage.bin;tftp 0x88000000 am5728_eHDVR.dtb;运行 netargs;bootz 0x8200
    0000 - 0x88000000'
    <13:46:00.865>u-boot-eHDVR=>运行 uvencmd
    端口0、速度1000、全双工上的<13:46:01.204>链路
    <13:46:01.204>使用以太网@48484000器件
    服务器192.168.1.57的<13:46:01.205> TFTP;我们的 IP 地址为192.168.1.1
    <13:46:01.205>文件名"am5728_zImage.bin"。
    13:46:01.219>加载地址:0x82000000
    <13:46:01.219>加载:##########################################################################################
    <13:46:01.299>##################################################################################################
    <13:46:01.379>######################################################################################################
    <13:46:01.459>####################################################################################################
    <13:46:01.538>##########################
    13:46:01.570 > 11.5 MIB/s
    13:46:01.605>完成
    13:46:01.605>传输的字节= 4375040 (42c200十六进制)
    端口0、速度1000、全双工上的<13:46:01.605>链接
    <13:46:01.607>使用以太网@48484000器件
    服务器192.168.1.57的<13:46:01.607> TFTP;我们的 IP 地址为192.168.1.1
    <13:46:01.609>文件名"am5728_eHDVR.dtb"。
    13:46:01.609>加载地址:0x88000000
    <13:46:01.639>正在加载:########
    13:46:01.639> 9.6 MIB/s
    13:46:01.639>完成
    13:46:01.639>传输的字节= 90792 (162a8十六进制)
    <13:46:01.641>##平展设备树 blob、88000000
    <13:46:01.641>使用0x88000000处的 FDT blob 启动
    <13:46:01.642>正在将设备树加载到 bdf27000,结束 bdf402a7... 好的

    <13:46:01.661>正在启动内核...

    <13:46:03.591>[0.000000]在物理 CPU 0x0上引导 Linux
    13:46:03.657>[ 0.000000] Linux 版本4.19.94-rt39-ga242ccf3F1 (OE-USER@OE-host)(gcc 版本8.3.0 (A 配置文件架构的 GNU 工具链)
    8.3-2019.03 (arm-rel-8.36))#1 SMP 优先于 RT Sun 2020年4月19日02:32:36 UTC
    13:46:03.662>[0.000000] CPU:ARMv7处理器[412fc0f2]修订版2 (ARMv7)、CR=30c5387d
    <13:46:03.665>[0.000000] CPU:可用的 div 指令:修补分部代码
    13:46:03.667>[0.000000] CPU:PIPT/VIPT 非混叠数据高速缓存、PIPT 指令高速缓存
    13:46:03.670>[0.000000]、共页:FDT:机器模型:TI AM5728 BeagleBoard-X15
    13:46:03.671>[0.000000]耳塞:MMIO 0x0000000048020000处的 omap8250 (选项'')
    启用了<13:46:04.023>[0.000000]引导控制台[omap8250]
    13:46:04.023>[0.000000]内存策略:数据高速缓存 writealloc
    <13:46:04.028>[0.000000] EFI:从 FDT 获取 EFI 参数:
    <13:46:04.028>[0.000000] EFI:未找到 UEFI。
    13:46:04.032>[0.000000]保留存储器:创建了0x000095800000 (大小为56 MIB)的 CMA 存储器池
    13:46:04.035>[0.000000]、共:保留内存:初始化节点 ipu2-memory@95800000、兼容 id shareda-dma-pool
    13:46:04.041>[0.000000]保留存储器:已创建 CMA 存储器池、地址为0x0000000099000000、大小为64 MiB
    13:46:04.047>[0.000000]、共:保留内存:初始化节点 dsp1-memory@99000000、兼容 ID shared-dma-pool
    13:46:04.055>[0.000000]保留存储器:已创建 DMA 存储器池、地址为0x000000009d000000、大小为32 MiB
    13:46:04.058>[0.000000]、共:保留内存:初始化节点 ipu1-memory@9d000000、兼容 id shareddma-dma-pool
    13:46:04.070>[0.000000]保留存储器:创建了0x000000009f000000的 CMA 存储器池、大小为8 MiB
    13:46:04.073>[0.000000]、共:保留内存:初始化节点 dsp2-memory@9f000000、兼容 id shared-dma-pool
    13:46:04.076>[0.000000] CMA:保留0x00000000 be400000处的24 MIB
    13:46:04.076>[0.000000] OMAP4:将0x0000bfd00000映射到 DRAM 隔离层的(ptrval)
    节点0上的<13:46:04.078>[0.000000]总页:203776
    <13:46:04.080>[0.000000] DMA 区域:用于 memmap 的1728页
    <13:46:04.081>[0.000000] DMA 区域:保留0页
    13:46:04.081>[0.000000] DMA 区域:139008页、LIFO 批处理:31
    13:46:04.083>[0.000000] HIGHMEM 区域:64768页、LIFO 批处理:15
    13:46:04.084>[0.000000]无法处理虚拟地址 fdf27000处的内核分页请求
    <13:46:04.086>[0.000000] PgD =(ptrval)
    13:46:04.086>[0.000000][fdf27000]* PgD=80000080007003、* PMD=00000000
    <13:46:04.088>[0.000000]内部错误:Oops:206 [#1]抢占 SMP ARM
    13:46:04.089>[0.000000]链接的模块:
    13:46:04.089>[0.000000] CPU:0 PID:0 Comm:swapper 未被污染4.19.94-rt39-ga242ccf3F1 #1
    <13:46:04.091>[0.000000]硬件名称:通用 DRA74X (平展器件树)
    13:46:04.092>[0.000000] PC 处于 FDT_CHECK_HEADER+0xc/0x80
    13:46:04.093>[ 0.0000] LR 位于_ unflatten_device_tree+0x28/0x10c
    13:46:04.093>[0.000000] PC :[ ] LR:[ ] PSR:a00000d3
    13:46:04.094>[0.000000] sp:c1201ea8 ip:c1201eb8 fp:c1201eb4
    13:46:04.095>[0.000000] R10:c1293b90 R9:00000000 R8:fdf27000
    13:46:04.096>[0.000000] r7 : 00000000 R6 : 00000000 R5 : c1032380 r4 : c1032380
    13:46:04.097>[0.000000] r3:c1032380 r2:c1293b90 r1:00000000 r0:fdf27000
    13:46:04.097>[0.000000]标志:NzCv IRQ 关闭 FIQ 关闭模式 SVC_32 ISA ARM 段用户
    13:46:04.098>[0.000000]控制:30c5387d 表:80003000 DAC:fffffffffd
    <13:46:04.098>[0.000000]进程交换器(pid:0、栈限制= 0x (ptrval))
    <13:46:04.099>[0.000000]堆栈:(0xc1201ea8至0xc1202000)
    13:46:04.100>[0.000000] 1ea0:c1201ee4 c1201eb8 c083892c c09f2640 c1032380 c1032380
    13:46:04.100>[0.000000] 1ec0:bfd00000 00000000 c120b7b8 c1284300 c1255f00 c1042120 c1201f04 c1201ee8
    13:46:04.101>[0.000000] 1e0:c1033458 c0838910 00000000 c1201ef8 c0233e54 c120a100 c1201f94 c1201f08
    13:46:04.102>[ 0.000000] 1f00:c1004c38 c1033428 00000000 00000000 00000000 00000000 0000ffff c0286a7c
    13:46:04.103>[0.000000] 1f20:c0dbfd0c c1042120 00000000 fff000 c1220568 bfcffff c1201f94 c1201f48
    13:46:04.104>[0.000000] 1f40:c1014afc c0a011c0 c1207488 00000000 30c0387d c1207480 c1201f84 c1201f68
    13:46:04.105>[0.000000] 1f60:c02871fc 00000000 c1201f8c 00000000 00000000 30c0387d c1207480 00000000
    13:46:04.105>[0.000000] 1f80:412fc0f2 c1207488 c1201ff4 c1201f98 c1000a28 c100423c 00000000 00000000
    13:46:04.106>[0.000000] 1fa0:00000000 00000000 00000000 00000000 00000000 00000000 00000000 c104aa38
    13:46:04.107>[ 0.000000] 1fc0:00000000 00000000 00000000 c1000330 00000000 30c0387d 00000000 bdf27000
    13:46:04.108>[0.000000] 1fe0:412fc0f2 30c5387d 00000000 c1201ff8 00000000 c10009c0 00000000 00000000
    13:46:04.109>[0.000000]回溯:
    13:46:04.109>[0.000000][ ](FDT_CHECK_HEADER)、来自[ ](_unflatten_device_tree+0x28/0x10c)
    13:46:04.110>[0.000000][ ](_unflatten_device_tree)、来自[ ](unflatten_device_tree+0x3c/0x4c)
    13:46:04.111>[0.000000] R10:c1042120 R9:c1255f00 R8:c1284300 r7:c120b7b8 R6:00000000 R5:bfd00000
    13:46:04.111>[0.000000] R4:c1032380 R3:c1032380
    13:46:04.111>[0.000000][ ](unflatten_device_tree)从[ ](setup_arch+0xa08/0xc30)
    13:46:04.113>[0.000000] R4:c120a100
    13:46:04.113>[0.000000][ ](setup_arch)从[ ](start_kernel+0x74/0x488)
    13:46:04.113>[0.000000] R10:c1207488 R9:412fc0f2 R8:00000000 r7:c1207480 R6:30c0387d R5:00000000
    13:46:04.114>[0.000000] R4:00000000
    13:46:04.115>[0.000000][ ](start_kernel)、从[<000000000000>](null)
    13:46:04.115>[0.000000] R10:30c5387d R9:412fc0f2 R8:bdf27000 r7:00000000 R6:30c0387d R5:00000000
    13:46:04.116>[0.000000] R4:c1000330
    13:46:04.116>[0.000000]代码:e89da800 e1a0c00d e92dd800 e24cb004 (e5903000)
    <13:46:04.117>[0.000000]--[结束跟踪000000000001 ]--
    13:46:04.118>[0.000000]内核紧急情况-未同步:尝试终止空闲任务!

    ===================================================================================================================================

    请您注意、它对您说什么? 为什么它在解平设备树上失败? 这两种情况下的所有地址都是相同的-任何地方都没有变化!
    从您的角度讲、这将非常好!

    非常感谢!

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

    谢谢、Keerty。
    虽然我不明白解决方案的工作原理、但似乎我找到了解决方案。
    我在互联网中发现、在 u-boot 中设置"set FDT_high 0xffffffffffffffffffff"可能会有所帮助。
    它真的很有帮助!
    现在、我的 u-boot 可加载任何内核。
    非常感谢!!!!!