如何在 x86 Linux 下为 ARM 主板 AT91SAM7-EX256 设置开发环境



我是嵌入式开发的新手,如图所示。我有一个小型 ARM 主板,AT91SAM7-EX256。我还有一个JTAG程序员加密狗。我在笔记本电脑和台式机上使用Linux(Ubuntu x86_32)。我正在使用CodeSourcery Lite交叉编译到ARM-Linux。

  1. 我不能使用这个 Linux 目标交叉编译器为小型 ARM 板(它没有任何操作系统)制作二进制或十六进制文件是对的吗?我应该改用名为 ARM EABI 的版本吗?

  2. 如我所见,它是一个"通用"ARM编译器。我已经阅读了一些文档,并且有很多选项可以指定处理器类型和指令集(拇指等),它不会有问题。但是我如何告诉编译器,特定板(启动、代码/数据块等)的图像(bin/hex)应该是什么样子?(在汇编程序中,有它的组织和负载指令。

  3. 我需要什么软件才能从PC上的开发板捕获一些调试消息?我不想板载调试,我只需要一些详细的运行时信号,而不仅仅是闪烁的LED。

  4. 我可以选择使用MS-Windows,我可以为它买一台专用机器。你推荐它,它容易得多吗?

  5. 我可以在我的 C 代码中以某种方式使用内联程序集吗?我对此一无所知。我可以使用C++还是只使用 C?


我还有一个问题,不需要回答:真的有 4096 种 GNU 编译器和交叉编译器(来自 Linux_x86_32 -> Linux_x86_32、Linux_x86_32 -> Linux_ARM、OSX -> Linux_ARM、PPC_Linux -> OSX)和 16 种不同的 GNU 编译器源(因为存在许多目标平台/处理器)吗?标志上写着"是",但我不敢相信。纠正我,并向我展示可以为任何平台/处理器生成目标文件的 GNU 编译器,以及可以为任何平台生成可执行文件的通用链接器。

虽然Windows不是一个"更好"的平台进行这种嵌入式开发,但它可能更容易开始,因为你可以得到一个预先构建的环境来工作。例如,Yagarto(我会推荐)。

在 Linux 上设置嵌入式开发环境可能需要大量的知识,但这并非不可能。

要回答您的问题:

  1. 您的 Linux 交叉编译器附带库,用于为 Linux 环境构建可执行文件。您已经暗示要为此板构建裸机可执行文件。虽然您可以使用编译器执行此操作,但它只会混淆事情。我建议构建一个裸机交叉编译器。由于您正在构建自己的裸机可执行文件(因此您操作系统),因此 ABI 无关紧要,因为您正在生成所有代码,而不是与其他以前构建的代码进行互操作。

  2. ARM指令集(和Thumb)有几个版本。您需要为特定处理器生成代码。如果为较新版本的指令集生成代码,则可能会生成生成保留指令异常的代码。大多数用于ARM的预构建gcc交叉编译器工具链都是"multilib",并将在ARM和Thumb中为各种架构构建。

  3. 不确定您在这里寻找的确切内容。这是一个裸机平台。如果要在目标上进行调试,则可以使用调试器通道发送消息,或者需要在编写的固件中构建自己的通信通道(即 uart 支持)。

  4. 见上文。

  5. 是的。有关 gcc 扩展内联程序集语法的详细信息,请参阅此处。您可以在 C++ 和 C 中执行此操作。您也可以简单地链接纯程序集文件。

没有通用的 gcc 编译器/链接器。您需要为使用的每个主机/目标组合构建一个唯一构建的编译器。

最后,请看一下 Atmel 的文档。他们拥有有关为此目标开发的大量信息,以及包含所需链接器指令和示例程序的电路板包。请注意,当然,该软件包适用于 Atmel 自己的评估板,但它会帮助您入门。

http://sam7stuff.blogspot.com/

我使用任何一个代码源代码精简版本。 但是我对 gcc 库和 C 库都没有用处,我只需要一个编译器。

在 gcc 3 天里,newlib 很棒,修改了两个文件,系统支持(简单的打开、关闭、读取、putc 类型的东西),你可以编译任何东西,但使用 gcc 4.x,你甚至不能回去交叉编译 gcc 3.x,你必须在虚拟机中安装旧的 Linux 发行版。

要获得 gcc 库是的,您可能希望使用 eabi 版本,而不是文件名中带有 linux gnueabi 的版本。

你也可以考虑 llvm(如果你不需要 C 库,你仍然需要 binutils),嗯,我想知道 newlib 是否使用 llvm 编译。

我宁愿避免陷入沙箱,学习工具以及如何操作链接器等来构建二进制文件。

相关内容

  • 没有找到相关文章

最新更新