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.

[参考译文] AM625:Falcon 模式第一次引导调用跟踪问题

Guru**** 2460850 points
Other Parts Discussed in Thread: AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1476936/am625-falcon-mode-first-boot-call-trace-issue

器件型号:AM625

工具与软件:

您好、TI

应用下面的补丁后" am62x_fallcon_mode_9.2_changes.patch"、  

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1476197/am625-falcon-for-sdk-9-0/5667368#5667368中所示

在第一个开机内核日志中、下面显示了调用跟踪问题(如何修复? 似乎只在第一次引导时显示):

OK ]已启动 NFSv2/3锁定的 NFS 状态监视器。
[66.893915]大小126976的 VMAP 分配失败:使用 vmalloc= 以增加尺寸
[ 66.902005] warn_alloc:抑制2个回调
[ 66.902021] modprobe:vmalloc 错误:size 122880、vm_struct 分配失败、mode:0xcc0 (gfp_kernel)、nodemask=(null)、cpuset=/、mems_allowed=0
[66.919626] CPU:0 PID:752 Comm:modprobe tored:G O 6.1.33-g40c32565ca #1
[ 66.928154]硬件名称:德州仪器(TI) AM625 SK (DT)
[66.933634]呼叫跟踪:
[ 66.936077] dump_backtrace.part.0+0xdc/0xf0
[ 66.940367] show_stack+0x18/0x30
[ 66.94368] dump_stack_lvl+0x68/0x84
[ 66.947357] dump_stack+0x18/0x34
[ 66.950675] WARN_ALLOC+0x10c/0x1a4
[ 66.954168]__vmalloc_node_range+0x590/0x6e0
[ 66.958524] MODULE_alloc+0xec/0x100
[ 66.962107] LOAD_MODULE+0xa10/0x1c70
[ 66.965777]__do_sys_finit_module+0xa8/0x100
[ 66.970137]__ARM64_sys_finit_module+0x20/0x30
[ 66.974671] invoke_syscall+0x48/0x114
[66.978424] el0_Svc_common.constprop.0+0xd4/0xFC
[66.983131] DO_el0_Svc+0x30/0xd0
[66.986448] el0_Svc+0x2C/0x84
[ 66.989507] el0t_64_sync_handler+0xbc/0x140
[ 66.993781] el0t_64_SYNC+0x18c/0x190
[ 66.997606] Mem-Info:
[ 66.999918] ACTIVE_ANON:84 INACTIVE_ANON:6300 ISOLATED_ANON:0
[ 66.999918] ACTIVE_FILE:6603 INACTIVE_FILE:22682 isolated_file:0
[ 66.999918]未计算:0 dirty:60 writeback:0
[ 66.999918] Slab_relaimable:4178 slab_unrelaimable:5558
[ 66.999918]已映射:4190 shmem:2279页数:340
[ 66.999918] sec_pageables:0反弹:0
[ 66.999918] kernel_MISC_reClaimable:0
[ 66.999918] FREE:440406 FREE_PCP:2553 FREE_CMA:32273

====== info====

1. sdk: 9.0

2.应用补丁后、构建 xxx.rootfs.wiz.xz 并将其写入 SD 卡(使用 Ethcher 工具)

3.将 tispl-falcon.bin 复制到 SD 卡、然后将 SD 卡插入电路板并打开电源  

在内核日志下面、先引导(问题存在)、然后再引导(无问题)。

e2e.ti.com/.../Call_5F00_Trace_5F00_issue.txt

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

    Paul、你好!

    要解决该问题、请将以下补丁应用于 ATF 源代码并重新编译 ATF。 该补丁将内核映像加载地址从0x80080000更改为0x80200000。

    diff --git a/plat/ti/k3/common/k3_bl31_setup.c b/plat/ti/k3/common/k3_bl31_setup.c
    index bbfb5bbfce1c..08fb296e7811 100644
    --- a/plat/ti/k3/common/k3_bl31_setup.c
    +++ b/plat/ti/k3/common/k3_bl31_setup.c
    @@ -80,6 +80,7 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
            bl33_image_ep_info.pc = PRELOADED_BL33_BASE;
            bl33_image_ep_info.spsr = k3_get_spsr_for_bl33_entry();
            SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
    +       NOTICE("BL33 base: 0x%x\n", PRELOADED_BL33_BASE);
     
     #ifdef K3_HW_CONFIG_BASE
            /*
    diff --git a/plat/ti/k3/platform.mk b/plat/ti/k3/platform.mk
    index bce9ef176b3c..f1a008ed4251 100644
    --- a/plat/ti/k3/platform.mk
    +++ b/plat/ti/k3/platform.mk
    @@ -13,7 +13,7 @@ include ${PLAT_PATH}/board/${TARGET_BOARD}/board.mk
     BL32_BASE ?= 0x9e800000
     $(eval $(call add_define,BL32_BASE))
     
    -PRELOADED_BL33_BASE ?= 0x80080000
    +PRELOADED_BL33_BASE ?= 0x80200000
     $(eval $(call add_define,PRELOADED_BL33_BASE))
     
     K3_HW_CONFIG_BASE ?= 0x82000000

    然后、将新的 ATF 二进制文件"bl31.bin"复制到生成内核拟合映像"tispl-falcon.bin"的位置、并修改拟合映像以将内核加载地址从0x80080000更新为0x800200000、然后重新生成内核拟合映像。

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

    您好、Bin Liu

    您可以帮助在下方发表评论吗?

    1.在我的 Yocto SDK 9.0中、内核加载地址似乎位于 board.mk (不是 PLAT/ti/k3/platform.mk)、因此我手动修改并生成了一个补丁、如下所示、并将其置于我的元定制下。

    ( @:paul f ü r pau-ubt1804:~/300G_HDD/ti_am62x/build/arago-tmp-default-glibc/work/am62xx_evm-oe-linux/trusted-firmware-a/2.8+gitAUTOINC+2fcd408bb3-r0/git$)

    Paul@è re pau-ubt1804:~/300G_HDD/ti_am62x/sources/meta-custom/recips-bsp$ cat trusted-firmware-A/files/0000_TF-A_changes.patch
    diff -- git a/plat/ti/k3/board/generic/board.mk b/plat/ti/k3/board/generic/board.mk
    Index ef74cd64ca..3941b2b932 100644
    -- a plat/ti/k3/board/generic/board.mk
    ++ b/plat/ti/k3/board/general/board.mk
    @@-7 + 7、7 @@
    BL32_BASE?= 0x9e800000
    $(eval $(call add_define、BL32_BASE))

    -preloaded_BL33_BASE ?= 0x80080000
    +PREADED_BL33_BASE ?= 0x80200000
    $(eval $(call add_define、preloaded_BL33_BASE))

    k3_hw_config_BASE ?= 0x82000000
    diff - git a/plat/ti/k3/common/k3_bl31_setup.c b/plat/ti/k3/common/k3_bl31_setup.c
    索引457c95dd6f..12ff1e8b48 100644
    ——a/plat/ti/k3/common/k3_bl31_setup.c
    ++ b/plat/ti/k3/common/k3_bl31_setup.c
    @@-83、6 +83、7 @@ void bl31_early_platform_Setup2 (u_register_t arg0、u_register_t arg1、
    bl33_image_ep_info.pc = preloaded_BL33_BASE;
    bl33_image_ep_info.spsr = k3_get_spsr_for_bl33_entry ();
    SET_SECURITY_STATE (bl33_IMAGE_EP_INFO.h.ATTR、NON_SECURE);
    + notice ("BL33 base:0x%x\n"、Preloaded_BL33_BASE);

    #ifdef K3_HW_CONFIG_BASE
    /*

    Paul@pau-ubt1804:~/300G_HDD/ti_am62x/sources/meta-custom/recipers-bsp$ cat trusted-firmware-a/trusted-firmware-a_%.bbappend
    FILESEXTRAPATH:prepend :="${THISDIR}/files:"

    src_URI +="file://0000_TF-A_changes.patch"

    2.重建映像(使用  bitbake tisdk-default-image -c cleanstate ; bitbake -k tisdk-default-image ) ,并重新检查路径,我只找到"temp"文件夹下的"path:    paul~ pau-ubt1804 :@/300G_INC/ti_am62x/build/arago-hd-default-glibc/work/am62xx/am62xx-extrust-evm-buy-b3

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

    Paul、你好!

    [报价 userid="606011" url="~/support/processors-group/processors/f/processors-forum/1476936/am625-falcon-mode-first-boot-call-trace-issue/5674579 #5674579"]diff -- git a/plat/ti/k3/board/generic/board.mk b/plat/ti/k3/board/generic/board.mk

    您应该修补 plat/ti/k3/board/ LITE /board.mk 进行选择、因为 ATF 构建指令使用"target_Board= LITE "。 请参阅下面链接的说明。

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/linux/Foundational_Components_ATF.html

    我不知道 Yocto 要评论你的第二个问题。

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

    您好、Bin Liu

    是的、它是使用 Lite 板构建的。

    但是、它无法启动。 请提供帮助。

    我们的步骤:

    1) 1)应用补丁 am62x_fallcon_mode_9.2_changes.patch

      结果:跳过 u-boot 并直接加载内核。 看起来不错。 但有一个调用跟踪。

      

    2) 2)我们修改了  plat/ti/k3/board/ LITE /board.mk、内核映像加载地址从0x80080000到0x80200000

      然后、我们按如下方式手动构建 bl31.bin:  

      e2e.ti.com/.../build_5F00_bl31.txt

    3.然后我们构建 tispl-falcon.bin、如下所示:

    e2e.ti.com/.../build_5F00_tispl_2D00_falcon.txt

    4.我们将  tispl-falcon.bin 放在我们的引导 SD 卡上(由 lalenaEtcher 工具创建),并有其他文件(图像, tispl.bin 等)。  

      然后、我们上电时、出现错误;无法启动。

    U-Boot SPL 2023.04-g24098ea90d (2023年7月6日- 12:59:40 +0000)
    SYSFW ABI:3.1 (固件版本0x0009 '9.0.5--v09.00.05 (Kool Koala)')
    SPL 初始堆栈使用:13376字节
    尝试从 MMC2引导
    在 ARM64内核上启动 ATF。。。

    注意:BL33基地址:0x80200000
    注意:BL31:v2.8 (发布版):v2.8-226-g2fcd408bb3-dirty
    通知:BL31:建造时间:2025年2月26日16:05:44

    我们在 build  tispl-falcon.bin 脚本和 am62x_fallcon_mode_9.2_changes.patch 中找到

    我们是否还需要更改此加载地址/入口点? (我也尝试但也失败了)。

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

    Paul、你好!

    [报价 userid="606011" url="~/support/processors-group/processors/f/processors-forum/1476936/am625-falcon-mode-first-boot-call-trace-issue/5680194 #5680194"]

    2) 2)我们修改了  plat/ti/k3/board/ LITE /board.mk、内核映像加载地址从0x80080000到0x80200000

      然后、我们按如下方式手动构建 bl31.bin:  

    [报价]

    为什么需要在 ATF 中修补 Makefile? 这是否与这种猎鹰的工作有关、还是与另一件事有关? 我没有修改 ATF Makefile。

    我们是否还需要更改此加载地址/入口点?

    是、要将其与 ATF 中定义的位置相匹配。 我在 ATF 补丁后的第一个响应中提到了这一点。

    (我也尝试过、但也失败了)。

    此故障案例中的控制台日志是什么? 是否仍然与构建脚本中未更新加载/条目地址的情况相同?

    请使用"mkimage -l tispl-falcon.bin"命令验证内核加载/条目地址。

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

    您好、Bin Liu

    "为什么需要在 ATF 中修补 Makefile?" =>我们的 SDK/代码基于 TI AM62x SDK 9.0 Yocto Linux、在我们构建系统映像后、Makefile 最初包含一些修改补丁。 我们将手动将其删除、然后重试、还将执行验证内核加载/条目地址。   

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

    Hell Bin Liu

    此调用跟踪问题在内核开始引导后发生、然后它最终可以进入登录外壳、即使它有调用跟踪问题。

    似乎内核已加载。 (pllease 指我们在问题描述中提供的日志、 Call_Trace_.txt)。

    我们是否知道、为什么需要 在 ATF 和 tispl-falcon.bin 的 BL31.bin 中将内核映像加载地址从0x80080000修改为0x80200000?

    仅供参考、这两天、我们发现此调用跟踪问题未出现、即使我们未更改内核映像加载地址、但仅应用 falcon 补丁。  

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

    Paul、你好!

    [报价 userid="6011" url="~/support/processors-group/processors/f/processors-forum/1476936/am625-falcon-mode-first-boot-call-trace-issue/5684646 #568464646"]我们是否知道、为什么需要 在 ATF 和 tispl-falcon.bin 的 BL31.bin 中将内核映像加载地址从0x80080000修改为0x80200000?

    内核加载地址应该是2MB 对齐的(我认为是2MB、我忘记了详细信息)。 080200000满足要求、但0x80080000不满足。

    U-Boot 将内核加载到0x82000000:

    => print loadaddr
    loadaddr=0x82000000

    我不知道确切的原因、但如果内核加载地址没有2MB 对齐、它仍然可以引导、但内核 vmalloc 将失败。

    仅供参考、这两天、我们发现未出现此调用跟踪问题、即使我们没有更改内核映像加载地址、但只应用了 falcon 补丁程序。  [报价]

    "lsmod"命令是否显示已加载的所有必需内核模块? 我不知道为什么 vmalloc 现在不会失败,但我不愿意在0x80080000加载内核。