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.

[参考译文] AM62P:使用 Linux-SDK-11.00.09.04 交叉编译 kmscube:LD 找不到 crt1.o/crti.o/crtbegin.o

Guru**** 2580075 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1551845/am62p-cross-compiling-kmscube-with-linux-sdk-11-00-09-04-ld-cannot-find-crt1-o-crti-o-crtbegin-o

部件号:AM62P


工具/软件:

您好、  

我尝试 使用 Linux-SDK-11.00.09.04 交叉编译 kmscube、并在 EVM 上运行 exe。 kmscube 源代码是从其官方网站(Mesa / kmscube·GitLab) 拉出来的,我没有做任何调整。 Kmscube 基于 meson 构建系统、我编写了一个交叉编译脚本“arm_cc.txt"来“来配置  与 Linux-SDK 相关的编译工具链和 rootfs。  我在下面附上“arm_cc.txt"。“。

[binaries]
c = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc'
cpp = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-g++'
ar = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-ar'
strip = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-strip'
ld = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-ld'
pkgconfig = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/x86_64-arago-linux-gnu-pkg-config'
# pkgconfig has two options

[properties]
skip_sanity_check = true
sys_root = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux'
pkg_config_libdir = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux/usr/lib/pkgconfig:/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux/usr/share/pkgconfig'

[built-in options]
c_args = ['--sysroot', '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux']
c_link_args = ['-Wl,-rpath', '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux/usr/lib', '-Wl,--as-needed']

[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'armv8-a'
endian = 'little'

实现交叉编译时、我 首先使用命令“meson setup --cross-file arm_cc.txt build“来配置交叉编译环境。 下面随附了相关日志。

然后我使用命令“cd build/“,“meson 编译“来编译。 此处显示错误日志、指出“Cannot find crt1.o、crti.o、crtbegin.o“。 下面附上了相关的错误日志。

在提到 Linux-SDK 时、我确实通过路径“/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/lib 找到了 crt1.o/crti.o。 我想知道配置系统根路径后为什么会出现此错误。

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

    您好、

    我能够在目标 EVM 上编译 kmscube。  

    以下是我执行的步骤:

    1. 在 EVM 上、我们克隆了以下存储库:  https://gitlab.freedesktop.org/mesa/kmscube
    2. 接下来、cd 进入 kmscube 目录
    3. 运行 meson setup build/和 ninja -C build/
    4. cd 进入 build 目录
    5. 运行命令: ./kmscube

    如果您在目标上编译时遇到任何问题、请告诉我。

    此致、

    Suren

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

    您好、Suren、

    我想声明我尝试在 x86 Linux PC 上交叉编译 kmscube、然后将 exe 加载到 EVM 中、最后我可以在 EVM 上运行 exe。 我认为您上面描述的过程是本机编译、而不是交叉编译。 我坚持使用交叉编译而不是本地编译的原因 是我们的客户要求我们提供交叉编译环境。

    BR、

    Bomiao

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

    您好、

    请按照以下链接中提供的说明进行操作:

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62PX/11_01_05_03/exports/docs/linux/Overview/GCC_ToolChain.html

    此致、

    Suren

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

     大家好!

    现在我能够在 Linux 中交叉编译 kmscube。 构建计算机为带有 Ubuntu 22.04 虚拟机的 x86_64 Linux、主机为 ARMv8-A (EVM)。 下面随附了 meson 的交叉编译文件。

    [binaries]
    c = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc'
    cpp = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-g++'
    ar = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-ar'
    strip = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-strip'
    ld = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-ld'
    pkgconfig = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/pkg-config'
    
    [properties]
    skip_sanity_check = true
    sys_root = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux'
    pkg_config_libdir = '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux/usr/lib/pkgconfig:/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux/usr/share/pkgconfig'
    
    [built-in options]
    c_args = ['--sysroot', '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux']
    c_link_args = ['--sysroot', '/home/fanbm1/ti-processor-sdk-linux-am62pxx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux']
    
    [host_machine]
    system = 'linux'
    cpu_family = 'aarch64'
    cpu = 'armv8-a'
    endian = 'little'
    
    
    

    提到“ld 无法找到 crt1.o/crti.o/crtbegin.o“这个问题,我通过在“内置选项“中指定 ld 的系统根来解决这个问题。 此外、在开始 meson 编译过程之前、需要导出与 linux-SDK 中的系统根路径相关的环境变量(“./linux-devkit/sysroots/aarch64-oe-linux 和“../linux-devkit/sysroots/x86_64-arago-linux)。  

     在这篇文章中、我只想分享我的解决方案、希望这对其他开发人员将来遇到类似问题有所帮助。

    此主题可以关闭。

    谢谢、

    Bomiao