【发布时间】:2015-04-20 10:07:30
【问题描述】:
我继承了一个为两个嵌入式系统开发的嵌入式项目:基于 Atmel AT91SAM9g20 的 Glomation GESBC-9G20 和基于 Atmel AT91SAM9g25 的 Acme Systems Aria G25。目前,该项目是使用实现这些处理器的不同板的制造商提供的库存编译器构建的,并且这些板运行不同版本的 Linux 内核:
GESBC-9G20 上的uname -a 提供Linux 2.6.31.5 #10 Thu Nov 5 15:46:30 GMT 2009 armv5tejl GNU/Linux
Aria G25 上的uname -a 提供Linux ariag25 3.16.1 #1 Mon Oct 13 11:44:47 BST 2014 armv5tejl GNU/Linux
制造商为每种工具链提供的工具链不兼容,一种使用 EABI 二进制文件,另一种则不兼容。
我做了一些研究,发现这两个微控制器都运行ARM926EJ-S处理器内核,但是根据数据表here和here,G20有32KB的缓存,G25有16KB的缓存。我可以使用相同的工具链为这两个微控制器构建二进制文件吗?缓存大小的差异会影响为这些处理器编译的二进制文件/内核吗?
此外,由于两个系统的应用程序共享大部分源代码,我有兴趣重新编译 linux 内核和应用程序,以便两个板运行相同版本的内核和工具-链。我认为这将使开发更容易,并会减少部署到系统所需的额外工作量。我这样想对吗?
最后,从长远来看,重新编译内核和重新构建工具链所需的额外努力是否值得?我明白每种情况可能会有所不同,但鉴于可用的信息(我目前掌握的信息也一样多),您会选择什么?
总结一下:
- 两个基于 ARM926EJ-S 的具有不同缓存大小的微控制器是否可以交叉兼容?
- 将来为这些微控制器重新构建工具链和内核是否有益并节省开发时间?
- 鉴于此信息,您会选择重新构建工具链和内核,还是继续使用现有的单独工具链?
【问题讨论】:
-
您的主板目前运行的是哪个版本的 Linux 内核?
-
@RichardPennington 我已经更新了原始问题,在两个板上都包含 uname -a 的输出。
-
我不确定您的应用程序是什么样的,但一种选择可能是使用单个工具链构建用户空间的东西并保持内核完好无损。如果您静态链接您的用户空间应用程序,它们可能会在两个板上运行。这样您就不必处理升级内核的复杂性,但可以从通用工具链中获得一些好处。
-
这些不是“微控制器”; Atmel 称它们为 MPU。缓存大小差异与代码无关。我将使用一个工具链(针对 ARM926ej-s 优化)和一个通用代码库来重建所有内容。这两个板可以使用相同的 Linux 内核映像,但使用单独的设备树 blob 启动。
标签: linux compilation arm embedded atmel