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.

[参考译文] TDA4VM:Arago / Yocto 的 PSDKLA 构建输出和 Linux 的引导流程

Guru**** 2587345 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/947549/tda4vm-psdkla-build-output-of-arago-yocto-and-boot-flow-of-linux

器件型号:TDA4VM

您好!

我尝试了解 Linux 的引导流程、以及 TDA4VMX 上的必要文件。
U-Boot 基本上由 A72内核执行并加载/启动 Linux 内核。

在执行"machine=j7-evm bitbake -e tisdk-rootfs-image"后、查看 Arago 的 rootfs-image 输出、我在"/boot"中有以下文件:

Thomas@dt-tda4:~/deleteMe/boot ll
总计134796
drwxr-xr-x 2 Thomas Thomas 4096 Okt 12 10:31 ./
drwxr-xr-x 21 Thomas Thomas 4096 Okt 12 10:31……
lrwxrwxrwx 1 Thomas Thomas 24 Okt 12 15:09 Image -> Image-5.4.40-g66cf445b76
-rw-r- 1 Thomas Thomas 16652296 Okt 1 12:26 Image-5.4.40-g66cf445b76
-rw-r- r- 1 Thomas Thomas Thomas 89857 Okt 1 12:26 K3-j721e-common-proc-board.dtb
-rw-r- r- 1 Thomas Thomas 8948 Okt 1 12:26 K3-j721e-common-proc-board-infotainmainm.dtbo
-rw-r- r- 1 Thomas Thomas 1160 Okt 1 12:26 K3-j721e-common-proc-board-jailhouse .dtbo
-rw-r- r- 1 Thomas Thomas 1025 Okt 1 12:26 K3-j721e-pcie-backboard.dtbo
-rw-r--r- 1 Thomas Thomas Thomas 90806 Okt 1 12:26 K3-j721e-proc-board-tps65917.DTB
-rw-r- r- 1 Thomas Thomas 1719 Okt 1 12:26 k3-j721e-vision-apps.dtbo
-rw-r- 1 Thomas 6615552 Okt 1 12:32 tisdk-Tina-image-j7-evm.cpio
lrwxrwxrwx 1 Thomas Thomas 29 Okt 12 15:09 vmlinux.gz -> vmlinux.gz-5.4.40-g66cf445b76
-rw-r- 1 Thomas Thomas 114537861 Okt 1 12:26 vmlinux.gz-5.4.40-g66cf445b76
Thomas@dt-tda4:~/deleteMe/boot 

我对此有一些疑问:

问题1:为什么在/boot 中包含文件"vmlinux.gz-5.4.40-g66cf445b76"? 我知道它是未压缩的内核、但不用于引导? 我找不到相应的 Yocto 配方、它会在那里移动。

问题2:"Image-5.4.40-g66cf445b76"是否是"vmlinux.gz-5.4.40-g66cf445b76"中的 gzip 压缩文件?

问题3:为什么"vmlinux.gz-5.4.40-g66cf445b76"这么大? (> 100 MB)未压缩的 vmlinux 甚至有230 MB。 我觉得这里有些奇怪...

Q4:"tisdk-Tina-image-j7-evm.cpio"是也是 Linux 启动过程一部分的 initramfs 吗?

非常感谢您的参与

此致、
Thomas

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

    尊敬的 Thomas:

    请在下面找到您的问题的答案:

    问题1:为什么在/boot 中包含文件"vmlinux.gz-5.4.40-g66cf445b76"? 我知道它是未压缩的内核、但不用于引导? 我找不到相应的 Yocto 配方、它会在那里移动。

    Linux 内核方法 linux-ti-staging 将 vmlinux 和 gz 复制到/boot 文件夹中、查看 linux-ti-staging 的 run.do_install 脚本、该脚本将位于"build/arago-tmp-externel-arm-glibc/j7_evm-linux/linux-ti-stag/5.4.40+rgategra-mand-r4+rgpruata/r64ppruata/rg5+gpru40+rg4rgpruata/rgpruata/r64p66pruata/rgpra+ 它可用于调试以加载到调试器上。

    问题2:"Image-5.4.40-g66cf445b76"是否是"vmlinux.gz-5.4.40-g66cf445b76"中的 gzip 压缩文件?

    image-5.4.40-g66cf445b76是参与引导的实际内核映像。  

    问题3:为什么"vmlinux.gz-5.4.40-g66cf445b76"这么大? (> 100 MB)未压缩的 vmlinux 甚至有230 MB。 我觉得这里有些奇怪...

    令人惊讶的是、在我的例子中、它分别只有大约20MB 和~8MB。

    rw-r--r-- 1 a0393906常量20M 七月2008:49 vmlinux-5.4.40-g66cf445b76
    lrwxrwxrwx 1 a0393906 autosw 7月29日08:49 vmlinux.gz -> vmlinux.gz-5.4.40-g66cf445b76
    rw-r--r-- 1 a0393906常量7.7M 7月20日08:49 vmlinux.gz-5.4.40-g66cf445b76

    Q4:"tisdk-Tina-image-j7-evm.cpio"是也是 Linux 启动过程一部分的 initramfs 吗?

    不可以、tisdk-Tina-image-j7-evm.cpio 不是默认启动过程的一部分。 除非要使用 initramfs 进行引导,否则不使用此选项。

    此致

    Karthik

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

    您好、Karthik、

    非常感谢您回答我的问题!

    在深入探讨该主题后、还出现了一些其他问题:

    Q5:如何避免在目标 rootfs/boot 上部署 vmlinx.gz? 我希望使 rootfs 在生产中尽可能小。 例如,从"kernel_IMAGETYPES ="Image vmlinux.gz"行中删除"meta-ti/conf/machine/include/k3.inc" vmlinux.gz 是否足够?
    或者、我应该覆盖我自己的层中的 kernel_IMAGETYPES 变量吗?

    对于下一个问题、我需要提供一些其他信息:

    我创建了一个基于方法核心/images/arago-image.in c 的图像配置 我尝试这样做是为了得到一个没有 GUI 相关内容的精简 rootfs。
    我向该映像添加了以下包组:

    image_install +="\
           packagegroup-arago-base \
           packagegroup-arago-console \
           packagegroup-arago-base-tisdk \
           packagegroup-arago-tisdk-addons \
    "
    这基本上会创建一个功能内核和 rootfs。 但是、当对此映像进行"位烘烤"时、其他引导二进制文件(如 R5 SPL、DMSC 固件、A72 SPL 和 A72的 u-boot)不会出现在 temp/deploy/images/J7-EVM 中。

    Q7:哪些方法负责将 tidoot3.bin、sysfw.itb、tispl.bin 和 u-boot.img 构建和移动到 temp/deploy/images/J7-EVM?

    通过状态控制和 Arago 配方进行"绿色化"、我认为配方"u-boot-ti-staging "应生成这些文件。

    但是、通过构建此配方(MACHINE=J7-EVM bitbake u-boot-ti-staging)、只会创建以下文件:

    lrwxrwxrwx 2 ewdt ewdt 10月50日13 09:40 tispl.bin -> tispl.bin-j7-evm-2020.01+gitAUTOINC+f9b0d030d3-R12
    lrwxrwxrwx 2 ewdt 10月50日13 09:40 tispl.bin-J7-EVM -> tispl.bin-J7-EVM-2020.01+gitAUTOINC+f9b0d030d3-R12
    -rw-r--2 ewdt 687160 oct 13 09:40 tispl.bin-j7-evm-20dex-r20d012+dewr20dr 012+dwdwdr 013+dwdewr20dr 012+dwdr 013+dwdwdwd20dr 013-010r20dr 013+dwdwdwdr 0dr 0dr 0dr 013+dwdwdwdr 0d20d20dwdr 0dr 0dr 0dr 0dr 0dr 0d20d20dr
    
    10月51日09:40 u-boot-J7-evm.img -> u-boot-J7-evm-2020.01+gitAUTOINC+f9b0d030d3-R12.img
    lrwxrwxrwx 2 ewdt 10月51日13日09:40 u-boot.img -> u-boot-J7-EVM-2020.01+gitAUTOINC+f9b0d030d3-R12.img 

    在我看来、仅构建了 A72的二进制文件、R5F 和 M3的二进制文件(DMSC 固件)缺失。

    很抱歉给您带来不便、但我在这里有点卡滞。

    此致!
    Thomas

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

    尊敬的 Thomas:

    请在下面找到我的回答。

    问题5. 如何避开 vmlinux.gz

    这似乎能满足您的需求

    diff --git a/conf/machine/include/k3.inc b/conf/machine/include/k3.inc
    index 6b78f4ca.4be89459 100644
    -- a/conf/machine/include/k3.inc
    ++ b/arch/machine/include/k3.inc
    @@-15、7 + 15、7 @@ preferred_provider _virtual/bootenu_kernel
    
    
    
    ="vmtradu_enu_enue_boot_kernel"
    
    
    
    ="="8000u_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_kernel_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_enu_u_
    

    问题6. 其他引导二进制文件不像 R5 SPL 那样出现

    如果不看您所做的更改、我只能怀疑配方不是封装组的一部分。 有关参与的配方列表、请参阅下面对 Q7的答复。

    问题7. 哪些方法构建 R5F 和 M3 (DMSC 固件)。

    M3 (DMSC 固件): meta-ti/meta-ti/meta-bSP/ti-sci-fW/ti-sci-fw_2020.04a.bb

    R5F 对于 tiboot3.bin、请参阅 meta-ti/conf/machine/include/k3r5.inc、因为它是作为 u-boot-ti-staging 配方本身的一部分构建的。

    此致

    Karthik

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

    您好 Karthik、

    感谢您的回答!

    关于 Q6:

    我刚才在我自己的图层中添加了一个额外的图像定义:

    #基于 Arago TI 的图像、以"VIOP"
    为目标摘要="VIOP 测试图像"
    
    #Require 方法-核心/图像/tisdk-Tina-image.bb
    要求方法-核心/图像/arago-image.inc
    
    #在此处删除不需要的分发包和机器功能
    # TODO: 考虑将这些文件移至 distro 和机器配置文件
    distro_features _remove ="wayland"
    dstro_features _append ="systemd"
    machine_features _remove ="alsa"
    machine_features _remove ="wayland"
    machine_features _remove ="GPU"
    
    
    image_install +="\
    packagegroup-arago-base \
    packagegroup-arago-console \
    packagegroup-arago-base-tisdk \
    packagegroup-arago-tisdk-addons "
    
    export image_BASENAME ="viop-image"
    

    这里没什么特别的 作为最后获得精简 Linux rootfs 的起点 我将检查 ti-sci-fw_2020.04a.bb 和 k3r5.inc 是否包含在电池组定义中的某个位置。

    关于 Q7:
    您能否确认、"MACHINE=J7-EVM bitbake u-boot-ti-staging "会在您的侧面产生 tidoot3.bin、tispl.bin 和 u-boot.img?
    在我的计算机上,仅创建 tispl.bin 和 u-boot.img。

    再次感谢!
    此致、

    Thomas

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

    尊敬的 Thomas:

    在 Q7上、您可以执行如下操作:

    toolchain_base=/sdk/tools machine=j7-evm-k3r5 bitbake -k u-boot-ti-staging

    请注意上述命令中机器的变化。

    输出将在  Arago-tmp-externo-arm-glibc/work /j7_evm_k3r5-linux-gnueabi/u-boot-ti-stage/1_2020.01+gitAUTOINC+f9b0d030d3*/image/.中生成

    此致

    Karthik

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

    您好、Karthik、

    谢谢!

    通过"machine=j7-evm-k3r5 bitbake u-boot-ti-staging ",我终于获得了 tiboot3.bin:)

    我可能对这里的概念有误解:根据 TI 文档、我认为使用命令"machine=j7-evm bitbake tisdk-default-image"构建了在 A72上启动 Linux 所需的所有内容。 所有内容都包括适用于我的 tidoot3.bin、sysfw.itb、tispl.bin 和 u-boot.img。

    假设是错误的吗? 是否打算单独执行"MACHINE=J7-EVM-k3r5 bitbake u-boot-ti-staging "以获取 R5的引导二进制文件?

    我仍然在构建 DMSC 固件。 遇到了一些错误、但在我再次询问您之前、我先尝试自行解决。

    此致

    Thomas

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

    尊敬的 Thomas:

    当您执行命令"machine=j7-evm bitbake tisdk-default-image"时、它会满足此机器要求。 这实际上称为 multiconfig、我先前提供给您的配方的指针在代码中实现了诀窍。

    当您独立构建配方时、如 machine=j7-evm-k3r5 bitbake u-boot-ti-staging、我发现这是可行的。 不确定是否有其他方式,但这是可行的! )

    感谢您的确认。

    此致

    Karthik

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

    您好、Karthik、

    我想结束这一主题并分享我的结论:

    首次执行"machine=j7-evm bitbake tisdk-default-image"后,所有内容都将在/temp/deploy/image 中构建和部署。

    当我手动删除/temp/deploy/image 并第二次运行 bitbake tisdk-default-image 时、/temp/deploy/image 将丢失一些引导二进制文件(尤其是对于 R5)。

    我认为有些部署任务没有重新执行、也没有缓存。 因此、当我删除整个 temp 目录并再次运行 bitbake tisdk-default-image 时、一切都正常。

    我的自定义映像配置也是如此。 这花费了我2天的时间,因为我对可能的错误做出了错误假设,所以我的自定义映像错过了/temp/deploy/image 中的一些引导二进制文件 ;)

    其次、我的未压缩/未剥离内核映像非常大、因为内核配置片段启用了内核的调试符号。 现在也修复了这一问题。

    感谢您的支持! 我肯定会遇到更多问题、但我会为他们创建新的线程。

    此致、
    Thomas

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

    尊敬的 Thomas:

    感谢您的总结、很高兴我们能够解决本次讨论中的大多数问题。

    我将继续跟进在重建过程中无法执行的部署任务问题。 我还没有亲自尝试过。 这可能需要一些时间才能恢复、我将在该主题上记录以供将来参考。

    是的、如果您有任何其他主题需要讨论、请创建新主题。

    此致
    Karthik