我对嵌入式linux编程非常陌生,并不是很好地理解了这个概念。
谁能解释一下“主机-目标”关系的本质?这个模型是不是只针对“交叉编译”?使用它仅仅是因为“可执行代码将在另一个环境中运行”吗?那么目标系统上的linux内核有什么关系呢?例如,“构建嵌入式linux系统”一书提到了这一点,但没有解释这种开发的动机或目标。
非常感谢。
发布于 2011-03-19 06:35:22
这个模型的“动机”是,很少有嵌入式目标适合开发平台。它可能是资源受限的,没有操作系统,没有在目标系统上运行的编译器,没有源文件的文件系统,没有键盘或显示器,没有网络,可能相对较慢,或者您可能需要进行有效开发的任何其他东西。
如果您的嵌入式系统适合运行Linux,则可能并非所有上述限制都适用,但几乎可以肯定的是,它们足以使您避免直接在目标系统上进行开发。如果不是这样的话,他们可能很难称之为嵌入式系统。
发布于 2011-03-18 18:18:19
http://www.landley.net/writing/docs/cross-compiling.html
看起来很清楚。您有哪些特定于的问题?
发布于 2011-03-18 23:09:23
Linux,因为它的起源是以非常可移植的方式编写的。它可以在各种不同CPU的机器上运行,并且以可移植的方式编写被认为是一件好事,这样,例如,包维护者可以很容易地将您的程序移植到一些嵌入式ARM或Cygwin,或Amiga,或者...
所以,是的,该模型是特定于交叉编译的,但实际上Linux上的每个编译都是交叉编译的(变体),只是在默认情况下,build、host和target会自动设置为相同的值,与您运行的机器相同。
尽管如此,您仍然可以使用Linux-i386编译的编译器及其源代码,并为Linux-amd64“交叉编译”它。生成的二进制文件在64位CPU上的运行速度会快得多。
不过,它在嵌入式编程中是非常重要的。主要是因为您为不能运行编译器或运行速度缓慢的弱CPU编写程序。因此,您可以在快速CPU (例如,一些多核Intel)上使用交叉编译器,并针对嵌入式CPU (例如,一些低端ARM)进行交叉编译。
“在不同的环境中”是非常温和的说法。当交叉编译嵌入式时,你所做的是使用完全不同的指令集,不同的内存访问模式,不同的资源访问方法等等。与构建主机结构完全不同的机器。您的构建主机可以是运行Cygwin的Windows PC。你的目标可能是智能手机里的芯片。这个二进制文件看起来一点也不像Cygwin .exe文件。
其直接结果是,必须从头开始为目标编译所有内容。内核、系统实用程序、系统库以及目标必须运行的所有工具。问题是,如果目标是售票亭,那么为它交叉编译Eclipse、GCC和Gnome,然后在“本地”环境中开发,在售票亭键盘上键入代码是没有意义的。相反,您只需交叉编译操作系统和特定应用程序的要点即可。您将开发环境保留在构建机器上,并在嵌入式设备上交叉编译所需的所有内容。
实际上,您可以为目标获得一个Linux发行版,并且只需编译您需要修改的任何内容。
https://stackoverflow.com/questions/5350536
复制相似问题