我有兴趣尝试通过jtag从windows或mac机器(交叉编译)编译、打包和flashEmbox到mcu,我有很多顾虑。观察我认为编写Embox应用程序并将其部署/闪烁到MCU的正常方式:如你所见,在我以上的理解中:embox源代码被编译(通过make)成一些文件(目标文件?),<file>.<ext>同时,我的应用程序的源代码被交叉编译(以某种方式)到一个与embox兼容的对象文件(myapp.o)中一些工具组合:(a)由<file>.<ext>产生的emboxmake,(b)myapp.o和(c)我指定的任何其他lib。它将这些作为输入,并生成一个可以通过jtag刷新的应用程序图像。我的担忧,也在插图中指出:在embox源代码上运行make生成的embox“工件”的确切名称和文件扩展名是什么?这个工件是不同的取决于你是在windows还是mac上?除了make之外,生产这个工件还需要什么工具?这个神奇的工具是什么,它接收对象/临时文件并生成一个应用程序映像?这个应用程序映像的确切名称和文件扩展名是什么?我需要使用什么工具将myapp.c和myapp.h交叉编译成与embox兼容的myapp.o? 最佳答案 我是embox开发人员之一,负责构建工具。对整个过程的正确概述:源代码被编译成一个可重定位的embox.o,其中包含ld -r,然后链接到elf二进制文件,…然后又转化为embox和.bin,它们经常用于闪烁。二进制工件进入.srec。让我补充一些细节。首先,您可能不需要深入研究将应用程序链接到embox的细节。相反,正确的方法是将你的应用程序集成到embox构建系统中,并让它为你处理低级的链接细节。因此,首先构建vanilla embox并在模拟器上运行是值得的。手臂embox的建立与运行我建议您从build/base/bin模板开始。这不适合您的mcu,但是如果您的应用程序没有做一些不寻常的事情,那么在将它移植到目标mcu之前,在qemu上测试它会更容易。不管怎样,这是一个很好的起点,可以检查开发环境是否正常,并且所有的构建都正常。在linux上开发真的会让你的生活变得更轻松,比如只需要arm/qemu加上几个包和安装一个交叉编译器。但是,如果您要在windows上开发,您可能会发现has given很有用。此外,您还需要修补sudo apt-get install build-essential才能在windows:Mybuild上运行。这里是this guide设置qemu。推荐的arm交叉编译器是官方的Issue 504。因此,基本上,以下是为构建和运行Embox for ARM准备Linux开发机器的步骤:sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embeddedsudo apt-get updatesudo apt-get install build-essential gcc-arm-none-eabi u-boot-tools qemu-system克隆存储库:git clone https://github.com/embox/embox emboxcd embox构建:make confload-arm/qemumakemaketarget使用名为arm/qemu的预定义模板初始化confload目录。conf/是目标图像(embox+你的应用程序)的配置所在。跑旗鼓。有一个方便的包装器,可以从embox配置中推断出必要的选项并正确运行qemu:sudo ./scripts/qemu/auto_qemu如果一切顺利,你会看到一些how to。键入arm/qemu以列出可用的命令。将应用程序添加为embox命令就我个人而言,当我尝试一些新的东西时,我通常会“模仿”别人的方法,从应用程序/系统获得第一个反馈。在这里,我建议派生,例如一个现有的 >,扔掉一切,有效地把它变成一个Hello World应用程序。现在,在conf/中创建一个目录help并添加两个文件:cat文件/** * Plain C Hello World application. */#include <stdio.h>int main(int argc, char **argv) { printf("Hello world!\n"); return 0;}如您所见,这是一个常规的c程序,它不使用任何特定于embox的api。现在让我们把它集成到embox中。hello文件(GNU Tools for ARM):package embox.cmd.hello@AutoCmd@Cmd(name = "hello", help = "<This is what `help hello` will output>", man = ''' <What is shown when running `man hello`> ''')module hello { source "hello.c" depends embox.compat.libc.all // for stdio}现在将新定义的模块添加到配置中。src/cmds文件package genconfigconfiguration conf { ... include embox.cmd.hello.hello}建立并运行运行。这将编译hello.c并适当地将其与embox链接。之后,使用Hello.my运行它,并在Cat.my提示符中键入conf/mods.config。就是这样。关于你的问题总结一下:embox源代码被编译(通过make)成一些文件(目标文件?),hello.c同时,我的应用程序的源代码被交叉编译(以某种方式)到一个与embox兼容的对象文件(sudo ./scripts/qemu/auto_qemu中应用程序和embox本身都是通过一个hello变量与一个常规(交叉)编译器like that一起编译的。一些工具组合:(a)由embox>产生的emboxmake,(b)<file>.<ext>和(c)我指定的任何其他lib。它将这些作为输入,并生成一个可以通过jtag刷新的应用程序图像。作为构建过程的一部分,它们与myapp.o)链接。在embox源代码上运行conf/build.conf生成的embox“工件”的确切名称和文件扩展名是什么?这个工件是不同的取决于你是在windows还是mac上?主要的构建工件是CROSS_COMPILE(elf)和<file>.<ext>(binary)。如果我没有弄错的话,这些都在所有构建平台上有相同的扩展(嗯,可能会有make而不是myapp.o,但这不太可能)。除了ld之外,生产这个工件还需要什么工具?本质上是交叉编译器。make command是个不错的选择。加上窗户的一些怪癖(见上文)。这个神奇的工具是什么,它接收对象/临时文件并生成一个应用程序映像?这个应用程序映像的确切名称和文件扩展名是什么?没有这么神奇的工具。:)我需要使用什么工具将build/base/bin/embox和build/base/bin/embox.bin交叉编译成与embox兼容的embox.exe?这是,再次,隐藏在我的建设。简而言之,它:使用交叉编译器将embox编译成make如果应用程序定义为myapp.c模块,则它:在命令注册表中注册应用程序,方法是使用一些元数据(如名称)存储指向myapp.h的指针从对象文件中去掉myapp.o符号,以防止在出现多个应用程序时发生冲突链接myapp.c因为它是embox的一部分,进入myapp.o然后进入@AutoCmdelf 07-24 14:35