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.

[参考译文] CCS/OMAP-L138:Linux 18.04 LTS 上的 OMAP-L138 Linux SDK 问题

Guru**** 2539500 points
Other Parts Discussed in Thread: OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/933550/ccs-omap-l138-omap-l138-linux-sdk-issues-on-linux-18-04-lts

器件型号:OMAP-L138

工具/软件:Code Composer Studio

您好!

我一直在尝试交叉编译 CCS v10中的一个简单的 hello world 示例、以便在 OMAP-L138 LCDK 开发板上执行(程序如下所示)

#include

int main (空)

   printf ("Hello World!\n");

   返回0;

根据 TI 的文档、我下载并安装了 OMAP-L138 Linux SDK、但我遇到了编译错误和链接器错误、尝试进行分类。

编译错误之一是编译器找不到位于 hello world 程序顶部的文件 stdio.h。

我认为必须引用位于中的目录 stdio.h 作为项目的包含路径。

我向我的项目"/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/usr/include "添加了以下 include 目录、该目录解决了找不到文件的问题(下图也是该文件的图片)。

再次编译工程后、我仍然遇到链接器错误(显示在工程的控制台输出下方)

建筑目标:HelloWorld2.
调用:交叉 GCC 链接器
arm-oE-linux-gnueabi-gcc -o "HelloWorld2" ./HelloWorld2.o   
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crt1.o:没有这样的文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crti.o:没有此类文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crtbegin.o:没有这样的文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到-lgcc
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到-lgcc_s
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到-lc
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到-lgcc
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到-lgcc_s
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crtend.o:没有这样的文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crtn.o:没有这样的文件或目录
collect2:错误:LD 返回1退出状态
Makefile:35:目标'HelloWorld2'的配方失败
制造:***[HelloWorld2]错误1.
"make all"以退出代码2终止。 构建可能不完整。

我开始查看文件及其位置、并决定将以下目录添加到链接器包含路径中(下图所示的工程配置):

/home/ben/ti/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/lib
/home/ben/ti/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/usr/lib/arm-oe-linux-gnueabi/8.2.0

这解决了一些问题、但不是所有链接器文件错误。

项目输出现在用于找不到的3个文件的新输出(见下面的输出)

建筑目标:HelloWorld2.
调用:交叉 GCC 链接器
arm-oE-linux-gnueabi-gcc -l/home/be/ti/linux-devkit/sysroots/armv5e-oE-linux-gnueabi/lib -l/ge/be/ti/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/usr/lib/arm-linux-linux-eabi/heldoo-e2.0"    
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crt1.o:没有这样的文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crti.o:没有此类文件或目录
/home/ben/ti/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/real-ld:找不到 crtbegin.o:没有这样的文件或目录
collect2:错误:LD 返回1退出状态
Makefile:35:目标'HelloWorld2'的配方失败
制造:***[HelloWorld2]错误1.
"make all"以退出代码2终止。 构建可能不完整。

这些文件出现在我为链接器包含部分添加的目录中、但链接器出于某种原因看不到它们。

经过一些研究、我在 TI 表格上找到了以下帖子:

https://e2e.ti.com/support/processors/f/791/t/669575?tisearch=e2e-sitesearch&keymatch=%2525252525252522cannot%2525252525252520find%2525252525252520crti.o%2525252525252522

这个人的问题与我遇到的问题非常相似。  为了查看我是否也有损坏的链接、我运行了他们执行的 cmd 行搜索(对于我的 CPU 和环境路径):

查找/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux -type l | xargs 文件| grep "broken \ symbolic\ link"

该输出指出了一些断开的链路:

/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/var/lib/opkg/lists/oe-x86_64-nativesdk:                                             到/oe/bld/build-ARM9_1/arago-tmp-glibc/work/armv5e-oe-linux-gnueabi/meta-toolchain-arago-tisdk-server/1.0-r5.0/oe-sdk-repo/x86_64-nativesdk/Packages 的符号链接中断
/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/var/lib/opkg/lists/oe-all:                                                          到/oe/bld/build-ARM9_1/arago-tmp-glibc/work/armv5e-oe-linux-gnueabi/meta-toolchain-arago-tisdk-server/1.0-r5.0/oe-sdk-repo/all/Packages 的符号链接中断
/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/var/lib/opkg/lists/oe-buildtools-dummy-nativesdk:                                   到/oe/bld/build-ARM9_1/arago-tmp-glibc/work/armv5e-oe-linux-gnueabi/meta-toolchain-arago-tisdk-server/1.0-r5.0/oe-sdk-repo/buildtools-dummy-nativesdk/Packages 的符号链接中断
/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/var/lib/opkg/lists/oe:                                                              到/oe/bld/build-ARM9_1/arago-tmp-glibc/work/armv5e-oe-linux-gnueabi/meta-toolchain-arago-tisdk-server/1.0-r5.0/oe-sdk-repo/Packages 的符号链接中断
/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/arm-oe-linux-gnueabi/include:                                                   到/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/include 的符号链接中断
/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/lib/ssl-1.1/private:                                                            到./../../etc/ssl/private 的符号链接中断

我可以理解的唯一断开的链接(上面列表中的第五个)是链接:

/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/arm-oe-linux-gnueabi/include

我的计算机上不存在该路径、我认为它试图指向 include 文件文件夹、也许是 stdio.h 所在的文件夹。。。。

我运行了以下命令来按照我认为的方式解决链接(这仅是我在前面提到的 TI 表单问题链接中了解到的内容):

RM /home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/arm-oe-linux-gnueabi/include

LN -s /home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/arm-oe-linux-gnueabi/include /home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/usr/include

然后、我返回到 CCS 中的 hello world 项目、并删除了我首先提到的 include 文件目录(/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.03.00.106/linux-devkit/sysroots/armv5e-oe-linux-gnueabi/usr/include)

清理和编译工程后、错误提示编译器找不到文件 stdio.h、但未返回。

我假设我更正的链接是修复 stdio.h 未找到问题的链接。

下面的问题现已提出。

1. OMAP-L138 Linux SDK 的安装文件是否存在问题、或者我安装它的方式是否存在一些链接无法正确解决的问题?

2. TI 是否提供了任何有关链接具有的目标文件夹/功能的文档? (为了在安装后解决这些问题)

找到的其余断开链接是否会导致我看到的链接器错误?

谢谢、

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

    您好、Ben、

    我们不使用 CCS 进行 Linux 应用程序开发、也 不将其用于内核开发、因此我没有头脑中的答案可以回答什么可能导致问题。 我将尝试设置它、看看我是否可以完成它。 我需要一段时间才能完成设置并尝试复制。

    雷克斯

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

    谢谢 Rex、

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

    您好、Ben、

    我需要就这个问题进行内部咨询。 这将需要比我预期的时间更多的时间。 我稍后会在取得任何进展后向您提供更新。

    雷克斯

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

    谢谢 Rex、

    最后、我也在继续处理这一问题  如果您认为有任何其他信息可能对您有所帮助、请告诉我、我将尝试将其提供给您。

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

    您好、Ben、

    仅供参考。 我将 CCS 编译转换为 Linux 命令、您可以从 CCS 编译窗口复制这些命令。 我可以编译、但链接失败。 我正在寻求内部帮助、以了解这是设置问题还是其他问题。 当我取得进一步进展时、我会随时向您提供最新信息。 我在任务之间进行杂耍、因此我的反应可能很慢。

    雷克斯

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

    尊敬的 Rex:

    是的、这与我遇到的情况相同。

    编译成功、但链接失败。

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

    您好、Ben、

    实际上、mem_util 是您应该参考的最佳示例。  它是一个用户空间应用程序、并且顶层编译工作正常、这意味着它可以交叉编译用户空间应用程序。 您应该查看 Makefiles 的设置方式。 重要的是$(CC)和$(CFLAGS)。 $(CC)具有额外的--sysroot=定义、而 CFLAGS 具有-March =、-marm、-mtune =定义、这些在 CCS 中缺失。 您应该在 CCS 中定义它们。

    编译 HellowWorld.c 时、CCS 编译窗口将执行2个步骤、即编译和链接、如下所示:

    arm-oE-linux-gnueabi-gcc -i/xxx/work /ti-processor-sdk-linux-omapl138-lcdk-06.00.07/linux-devkit/sysroots/armv5e-oE-linux-gnueabi/usr/include -O0 -g3 -Wall -c -fmessage-length=0 "helo-World-mf-hloo"-mf-noo-mf"-mf-noo-md "mf"-mf-noo-mf"-loo-west-mf-noo-md -mf-noo-md -mf-noo
    
    
    

    我将其复制到 Linux 计算机、并使用不带"-c"选项的单步编译和以下命令:

    arm-oE-linux-gnueabi-gcc --sysroot=/home/xxx/work/ti-processor-sdk-linux-omapl138-lcdk-06.00.00.07/linux-devkit/sysroots/armv5e-oe-linux-gnueabi -March =armv5te -mtune =ARM926EJ-s -LC -L/home/xxx/work /ti-processor-sdk-linux-omapl138-lcdk-06.00.07/linux-devkit/sysroots/linux-ahrom-World-ohloodlie-lib-ahrom-ahrom-cloodlib-oe-ove.cloodlib-cloo-cloo-clove.cloo-cloo-arbi-clove.cloo-cloo-clove.cl
    

    构建成功、我将二进制文件复制到 OMAP-L138。 下面是构建的输出:

    root@omapl138-lcdk:~# chmod +x HelloWorld
    root@omapl138-lcdk:~#./HelloWorld
    !!!Hello World!!!root@omapl138-lcdk:~  

    请注意、可能不需要我的命令中的-L 路径。 当我认为需要提供库路径时、我在先前的测试中使用了它、但在 mem_util 示例中没有它。 我没有尝试删除它、但您可以在没有 ithe 库路径的情况下尝试删除它。

    雷克斯

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

    谢谢 Rex!

    我将对此进行测试、并告诉您结果。

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

    尊敬的 Rex:

    解决了我的问题。  我只需将以下内容添加到我的链接器选项中、它没有任何问题:

    --sysroot=/home/ben/ti-processor-sdk-linux-omapl138-lcdk-06.00.00.07/linux-devkit/sysroots/armv5e-oe-linux-gnueabi

    然后、我获取了可执行映像、并将其从根文件系统的 SD 卡上运行、运行时没有问题。

    我想知道安装 SDK 时安装脚本中的内容是否未正确执行?

    不过、如果是这种情况、可能其他区域也未正确配置。

    不管怎样、这对于现在来说都是一件好事!

    谢谢、

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

    您好、Ben、

    很高兴听到它能解决您的问题。 否、它与安装脚本无关。 设置脚本不会配置交叉编译的方式。 根据 ARM 架构、这些参数位于 makefile 文件中、内核和 mem_util 示例都将它们直接存储在 makefile 文件中。 有关交叉编译的更多信息,您应使用" gcc --help"以查看可用的选项、还需要通过用于 armv5te 的 ARM TRM 了解 OMAP-L138的 ARM 架构(我认为这是 OMAP-L138所基于的架构)。 交叉编译器和 ARM 不在 TI 支持范围内。  

    雷克斯