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.

[参考译文] AM5718:内核启动挂起

Guru**** 2779535 points

Other Parts Discussed in Thread: AM5718

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/877226/am5718-kernel-boot-hangs

器件型号:AM5718
主题中讨论的其他器件: PMP

您好!

     我使用的是 AM5718 IDK EVM 和 ti-processor-sdk-linux-am57xx-evm-05.03.00.07。
     我们已开发出基于 AM5718的定制板。

      在电路板中、我们运行了内存测试和 SD 卡诊断。 我们还通过 JTAG 建立了连接。 我们已经验证了 UART3、QSPI、GPIO 等 我们还将电路板详细信息编程到 EEPROM。

     我们在电路板上启用了最小外设的引脚复用(DDR、DEBUGSS、GMAC_MDIO、GMAC_sw0、1 GPIO、 MMC1、I2C、OSC0、PRCM、QSPI 和 UART3)。 引脚多路复用文件在 mux_data.h 中给出

我们已禁用大多数节点(如 GPMC、McASP、RTC、pciephy、QSPI、 SPI、高斯、邮箱...) 和我们的组合 DTS 连接在 am571x-idk.dts (转换为 am571x-idk)中。 DTB 至 DTS)。

在定制电路板中、我们维护了以下设计、如 EVMe2e.ti.com/.../booting_5F00_after_5F00_sdcard_5F00_format.txte2e.ti.com/.../printenv_5F00_after_5F00_sdcard_5F00_format.txte2e.ti.com/.../am571x_2D00_idk.dts.dtb.txte2e.ti.com/.../0312.am571x_2D00_idk.dts.txt 中所示

1. MMC1 (SD 卡)、  

PMIC (TPS6590379)、PMIC_INT 映射到不同的 GPIO、

3. EEPROM、

QSPI

5、UART

6.具有通过(GPIO)复位控制的 GMAC 以太网(与 EVM 设计不同)

      

 定制板的 e2e.ti.com/.../5383.mux_5F00_data.he2e.ti.com/.../hw_5F00_data.ce2e.ti.com/.../2287.board.cDDR 为 MT41K256M16TW-107P。 DDR 更改是通过以下"SPRAC36E–2016年4月–2020年1月修订版"完成的。 随附 U-boot 文件 board.c 和 hw_data.c。

      我们正在尝试从 SD 卡引导,引导 在“正在启动内核...”的位置停止。

      已附加 printenv 和引导日志。

      我们已经从 u-boot 提示符处完成了 DDR 测试0x80000000 bdf15d00、它显示该测试通过。

--------

U-Boot 2018.01 (2020年2月03日- 11:22:17 +0530)

CPU:DRA722-GP ES2.0
型号:TI AM5718 IDK
电路板:AM571x IDK REV 1.3B
DRAM:1 GiB
MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
卡未响应电压选择!
***警告- MMC 初始化失败,使用默认环境

卡未响应电压选择!
MMC 设备无效
SCSI:SATA link 0 timeout。
AHCI 0001.0300 32插槽1端口3 Gbps 0x1不支持 SATA 模式
标志:64位 NCQ stag pm led clo only pmp pio 贫民窟 part ccc apst
正在扫描设备总线...
找到0个器件。
NET:无法获取以太网的 PHY@48484000:Addr 0

警告:以太网@48484000使用 ROM 中的 MAC 地址
eth0:以太网@48484000
按任意键停止自动引导:0
切换到分区#0,确定
mmc0是当前器件
在器件0上找到 SD/MMC
**无法读取文件 boot.scr **
2ms (727.5 KiB/s)内读取1490字节
从 uEnv.txt 加载了 env
正在从 mmc0导入环境...
正在运行 envcmd ...
2ms 内读取1个字节(0字节/s)
已设置。
切换到分区#0,确定
mmc0是当前器件
在器件0上找到 SD/MMC
在290 ms (13.2 MIB/s)内读取4026880字节
97137字节在56ms (1.7 MIB/s)内读取
###展开的设备树 blob、88000000
使用0x88000000处的 FDT blob 进行引导
正在将设备树加载到8ffe5000,结束8ffb70... 好的

正在启动内核...

------------------------------------------

是否可以提供任何建议以继续?

此致、

Anupama

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

    Anupama、

    您能否使用 JTAG 来查看内核在做什么?

    此致、Andreas

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

    尊敬的 Andreas:

    我尝试使用 CCS 调试 Linux 内核。 我已访问 training.ti.com/linux-board-porting-series-module-8-installing-sdk-and-building-kernel-debug-symbols

    我已完成以下步骤:


    步骤1 -使用调试信息构建 Linux 内核
    已从菜单配置中选择选项 a、b 和 c。

    菜单 Config->Kernel Hacking->
    a)内核调试
    b)使用调试信息编译内核
    c)启用堆栈展开支持(实验)

    第2步-构建内核映像
    使 arch=arm cross_compile=arm-linux-gnueabihf- uImage LOADDR=0x82000000


    步骤3-从 SD 卡运行 U-boot。 执行步骤 A-d
    a. setenv mmcroot /dev/mmcblk0p2 rw
    b. setenv bootargs console=${console}${optargets}root=${mmcroot}rootfstype=${mmcrootfstype}
    c.加载 MMC ${bootpart}${loadaddr}${bootdir}/zImage
    d.加载 MMC ${bootpart}0x88000000 ${bootdir}/am571x-idk.dTB
    e. bootz ${loadaddr}- 0x88000000


    第4步-连接到 CCS。

    运行到第3步的项目 d 后、连接了 CCS。 连接到目标
    Load Symbols->Load vmlinux (board_support/linux/vmlinux )。 已加载。
    在下面给出的文件中放置一个硬件断点。 按“运行”。

    A.断点只是在头. S
    b.断点在 Linux/arch/arm/kernel/main.c 的 start_kernel()中

    步骤5 -从 U-Boot 提示符运行内核
    e.bootz ${loadaddr}-${fdtaddr}
    (执行步骤3的项目 e)

    在 EVM 中,我们可以看到内核在 CCS 中的断点 B 停止,即 start_kernel()。 我们能够从那里继续前进。
    在我们的定制板中、内核没有在任何断点停止。 如果我们在看到"正在启动内核..."后暂停 CCS、则地址为0x82002a10。 它似乎在个无限循环中。

    我的问题是:  
    1.要在 head.S 处获取断点,我该怎么办? start_kernel()之前是否有任何可以放置断点的点? 请就此为我提供指导。 我们的定制板肯定不会到达 start_kernel()。

    我记得在 config.mk 中添加以下用于调试 u-boot 的标志、并在 start.S 中放置断点
    DBGFLAGS =-G2 -gdwarf-2
    AFLAGS_DEBUG =-Wa、-gdwarf2
    OPTFLAGS =-O1

    如何在内核调试中完成此操作?

    2.我已在许多地方读取以启用 CONFIG_DEBUG_LL。 但在本例中、我对要启用哪个 UART 感到困惑。 我们使用的是 AM5718的 UART3。 我在 menuconfig 中找不到任何这样的 UART 选项。

    如果我启用 CONFIG_DEBUG_LL、我还可以启用 EARLY_printk。

    请指导我如何继续。

    此致、

    Anupama

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

    您好!

      我的定制板已启动。  在关注另一个 TI 论坛帖子后、RTC 节点已从 DTS 文件中删除。

    此致、

    Anupama

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

    [引用 USER="Rakesh Muralidharan">我的定制板已启动。 RTC 节点 已从 DTS 文件中删除

    感谢您关闭此处的环路。 这对其他人也很有帮助(我也会看到我可以将它记录在一个常见问题中、就像之前出现的那样)。

    此致、Andreas

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

    尊敬的 Andreas:

              我还有两个要引导的定制板。 因此、我想了解有关 Linux 内核调试的更多信息、正如我在前面所说的那样。 在我看到的每个地方、初始低级调试都需要使用 CCS 完成。 但是、我们如何在不加载包含汇编代码信息的符号的情况下调试汇编代码(例如 head.S)?

    如何为汇编文件生成调试信息?

    使用 CCS 构建/调试 Linux 内核是否有任何其他方法?

    此致、

    Anupama

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

    Anupama、

    如果要对内核进行符号调试、则需要在启用调试选项的情况下进行编译。 使用 TI SDK 最简单的方法是使用"defconfig builder"脚本、如下所示:

    a0797059@Jiji:~/git/linux (ti-linux-4.19.y-dev)
    $ ti_config_frages/defconfig_builder.sh -t ti_sdk_dra7x_debug
    创建 defconfig 文件/home/a0797059/git/linux/arch/arm/configs/ti_sdk_dra7x_debug_defconfig 

    然后构建生成的 defconfig (通过 make [...] TI_SDK_dra7x_debug_defconfig)。

    您可以通过在内核上执行完全符号的 objdump (当然是交叉版本)来验证内核是否使用调试符号构建。 即使是汇编器代码(如 head.S)、您也会看到符号信息 该信息在本质上也应显示在 CCS 或 Lauterbach Trace32等调试器中。 您甚至可以将 objdump 用作"穷人的工具"、以检查属于某个内核地址的源代码(如果只有这些代码)。 通常不需要做什么、但在某些情况下会有所帮助。

    示例:

    a0797059@Jiji:~/git/linux (ti-linux-4.19.y-dev)
    $ arm-linux-gnueabihf-objdump -S vmlinux | head -n 50
    
    vmlinux: 文件格式 ELF32-littlearm
    
    
    .head.text 部分的反汇编:
    
    c0008000 :
    Thum( BX R9) @如果这是 Thumb-2内核,
    thum(.thum) @现在切换到 Thumb。
    拇指(1:)
    
    #ifdef CONFIG_ARM_virt_EXT
    BL _hyp_stub_install
    c0008000: eb083cee BL c02173c0 <__hyp_stub_install>
    #endif
    @确保 SVC 模式和所有中断被屏蔽
    SAFE_svcmode_maskall R9
    c0008004: e10f9000 夫人 R9、CPSR
    c0008008: e229901a 异或 R9、R9、#26
    c000800c: e319001f TST R9、#31
    c0008010: e3c9901f BIC R9、R9、#31
    c0008014: e38990d3 OR R9、R9、#211;0xd3
    c0008018: 1a000004 BNE C0008030 
    C000801c: e3899c01 OR R9、R9、#256;0x100
    c0008020: e28fe00c 添加 LR、PC、#12
    c0008024: e16ff009 MSR SPSR_fsxc、R9
    c0008028: e12ef30e .word 0xe12ef30e
    c000802c: e160006e .word 0xe160006e
    c0008030: e121f009 MSR CPSR_c、R9
    
    MRC P15、0、R9、c0、c0 @获取处理器 ID
    c0008034: e109f10 MRC 15、0、R9、cr0、cr0、 {0}
    BL __lookup_processor_type @ r5=procinfo r9=CPUID
    c0008038: eb07e9cb BL c020276c <__lookup_processor_type>
    MOV R10、R5 @无效的处理器(R5=0)?
    c000803c: e1b0a005 MOV SL、R5
    Thumb (IT EQ) @强制使用可固定的长分支编码
    波克 _error_p @是、错误"p"
    c0008040: 0a07e9db 波克 c02027b4 <__error>
    
    #ifdef CONFIG_ARM_LPAE
    MRC P15、0、R3、c0、c1、 4. @读取 ID_MMFR0
    c0008044: ee103f91 MRC 15、0、R3、cr0、CR1、 {4}
    和 R3、R3、#0xF μ@解压 VMSA 支持
    c0008048: e203300f 和 R3、R3、#15
    CMP R3、#5 @长描述符转换表格式?
    c000804c: e3530005 CMP r3、#5
    thumb (IT LO) @强制使用可固定的长分支编码
    Blo _error_lpae @仅限经典页面表格式
    c0008050: 3a07e9d6 密件抄送 c02027b0 <__error_lpae>

    [引用 USER="Rakesh Muralidharan"]是否有任何其他方法可以使用 CCS 构建/调试 Linux 内核?

    您可以将内核导入为"Makefile"工程、但需要在工程选项中进行大量配置才能使其正常工作(您可以使用 google 步骤)。 可以完成但不容易。 为了简单起见、我只需从命令行构建内核、并仅将 CCS 用作调试器。

    此致、Andreas

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

    尊敬的 Andreas:
          感谢您分享的详细信息。 我一定会稍后再试。 再次感谢您提供的支持。

    此致、
    Anupama