我是嵌入式开发的新手,如图所示。我有一个小型ARM板,AT91SAM7-EX256。我也有一个JTAG程序员加密狗。我在笔记本电脑和台式机上使用Linux( Ubuntu x86_32 )。我正在使用CodeSourcery Lite对ARM-Linux进行交叉编译。
我是否正确,我不能使用这个Linux目标交叉编译器为小型ARM板制作二进制或十六进制文件(它没有任何操作系统)?我应该使用名为ARM EABI的版本吗?
正如我所见,它是一个“通用”ARM编译器。我已经阅读了一些文档,并且有很多选项来指定处理器类型和指令集(拇指等),它没有任何问题。但是,如何告诉编译器,特定板(启动,代码/数据块等)的图像(bin / hex)应该如何? (在汇编程序中,有 org 和加载指令。)
从PC上的主板上捕获一些调试信息需要哪些软件?我不想进行板载调试,我只需要一些详细的运行时信号,而不仅仅是闪烁的LED。
我可以选择使用MS-Windows,我可以为它获得一台专用机器。你推荐它,它更容易吗?
我可以在C代码中以某种方式使用内联汇编吗?我不知道这件事。我可以使用C ++还是只使用C?
答案 0 :(得分:2)
虽然Windows不是一个“更好”的平台进行这种嵌入式开发,但可能更容易入手,因为您可以使用预先构建的环境。例如,Yagarto(我建议)。
在Linux上设置嵌入式开发环境需要大量的知识,但这并非不可能。
回答你的问题:
您的Linux交叉编译器附带了用于为Linux环境构建可执行文件的库。您已暗示要为此板构建裸机可执行文件。虽然您可以使用编译器执行此操作,但这只会让事情变得混乱。我建议构建一个baremetal交叉编译器。由于您正在构建自己的裸机可执行文件(因此 操作系统),因此ABI无关紧要,因为您生成了所有代码,而不是与其他以前构建的代码互操作。< / p>
ARM指令集(和Thumb)有多个版本。您需要为特定处理器生成代码。如果为较新版本的指令集生成代码,则可能会生成生成保留指令异常的代码。用于ARM的大多数预构建的gcc交叉编译工具链都是“multilib”,将为ARM和Thumb中的各种体系结构构建。
不确定你到底在找什么。这是一个裸机平台。如果您正在调试目标,可以使用调试器通道发送消息,或者您需要在您编写的固件(即uart支持)中构建自己的通信通道。
见上文。
是。有关gcc扩展内联汇编语法的详细信息,请参阅here。您可以在C ++和C中执行此操作。您还可以简单地链接纯汇编文件。
没有通用的gcc编译器/链接器。您需要为您使用的每个主机/目标组合构建一个独特的编译器。
最后,请查看Atmel's documentation。他们拥有关于为此目标开发的大量信息,以及具有所需链接器指令和示例程序的电路板包。请注意,该软件包适用于Atmel自己的评估板,但它可以帮助您入门。
答案 1 :(得分:0)
http://sam7stuff.blogspot.com/
我使用的是codesourcery lite版本。但我没有使用gcc库或C库,我只需要一个编译器。
在gcc 3天内,newlib非常好,修改了两个值得系统支持的文件(简单的open,close,read,putc类型的东西),你可以编译任何东西,但是使用gcc 4.x你甚至不能回去并且交叉编译gcc 3.x,你必须在虚拟机中安装旧的Linux发行版。
要获得gcc库,您可能希望在文件名中使用eabi版本而不是linux gnueabi版本。
你也可以考虑llvm(如果你不需要C库,你仍然需要binutils),嗯,我想知道newlib是否与llvm编译。
我更愿意避免陷入沙箱,学习工具以及如何操作链接器等来构建二进制文件。