如何开始编写适用于ARM处理器的移动操作系统?

7

我有兴趣创建自己的移动操作系统。我了解到现有的移动操作系统运行在ARM处理器上并使用它们的汇编语言,而像Linux和Windows这样的桌面操作系统是用汇编语言编写的。C语言似乎是两者都通用的语言。这引发了一些问题:

  • 如果我想构建针对ARM Cortex处理器的移动操作系统,是否必须学习ARM汇编语言?

如果是这样,那么一旦我开始做:

  • 我应该在哪里/如何测试它?它可以在虚拟机中运行吗?
  • 有像Beagleboard这样的开发板,但我不明白为什么需要购买它们,如果我可以使用虚拟机-我错过了什么吗?
  • 一个操作系统可以在x86和ARM上同时运行吗?

我确定我想要构建一个可以在ARM处理器上运行的移动操作系统,就像大多数现有的移动操作系统一样。

  • 我的初始步骤应该是什么?查看类似于Android或任何其他操作系统的开源项目是否有帮助?
  • 在哪里可以找到ARM汇编语言资源和IDE?

为什么你的问题要在代码标签中?这让我很不舒服,还需要横向滚动才能阅读整行代码。 - Austin Henley
这个用户Chirag做了那件事情..等一下。 - Pointer
@AustinHenley:我刚刚将它编辑成了正常状态。 - Pointer
1个回答

22

1) 对于所有平台都需要进行一些组装,你可能需要一些启动代码来覆盖编程语言的假设,例如C编译器假设您已设置堆栈指针,并将.bss内存归零,.data处于正确位置等。根据处理器的不同,但通常情况下,您可能需要一些用于中断处理和任务切换等的代码。

2) 是的,有许多虚拟机,如qemu、skyeye等。

3) 几乎没有一种指令集模拟器或虚拟机等能完全匹配处理器。仅仅因为在虚拟机/模拟器上运行正常并不意味着它在实际处理器上也会正常运行。这与在调试程序中运行和在调试器之外运行代码没有什么区别。您应该尝试不同的模拟器以及硬件来验证模拟器的质量。一个ARM处理器与另一个ARM处理器或一个x86处理器与另一个x86处理器可能存在足够的差异,导致软件失败,即使在硬件上运行也无法解决所有潜在的错误。

4) Linux运行在许多平台上,是吗? NetBSD运行在更多平台上,是吗? 根据您设计程序的方式,它可以非常易于移植或不易于移植,任何中间状态都可能。这取决于您自己。

5) 您需要一些操作系统基础知识,可以获取MicroC/OS-II书籍或其他类似材料。学习一下任务切换等基础知识。

6) IDE(集成开发环境)和编辑器等是非常个人化的东西,一个人喜欢的工具可能会被其他人所讨厌。对于ARM开发来说,你需要获取ARM ARM(ARM体系结构参考手册)。由于有太多不同的核心和家族,原来的单一文档现在已经拆分了。看起来最古老的版本是ARMv5或ARMv6 ARM,这是曾经的单一版本。获得这个版本后,你至少可以编写更加可移植的ARM核心代码。你还需要获取一些TRM(技术参考手册),比如ARM7TDMI(ARMv4T)的TRM,就像从英特尔获取486手册一样,几乎所有32位ARM指令都向后兼容到该核心。可能还需要获取其他家族的TRM。要知道,即使较旧的版本(例如r1p0)可能被标记为过时,但如果存在相应版本的手册,ARM已将其出售给某人,并且它仍然存在于某些芯片中,你可能需要了解不同核心之间的差异(如果你需要精确地定位目标)。附加到某些核心的外设,例如pl310 L2缓存,你可能想知道其中的内容,如果你有兴趣启用和使用缓存。嗯,ARM7(ARMv4,不要与ARMv7混淆)没有mmu,而ARM9则有,所以根据你想要如何管理应用程序及其内存,你可能需要将ARM9或更新的版本作为基线。

获取Codesourcery Lite GNU工具链。Codesourcery现已成为Mentor Graphics的一部分。构建自己的ARM交叉编译器或获取其他(Emdebian等)并不难。ARM提供了一个不错的编译器,但它价格昂贵并且大多数支持将需要付费,当然可以通过在线搜索获得帮助,但大多数免费帮助是基于GCC的。LLVM编译器工具每天都在变得更好,据我了解,它们被用于iPhone上。我使用的是LLVM的一部分——Clang编译器。你不一定要从头开始构建交叉编译器,因为它们本身就是从语言到中间层再到目标汇编的交叉编译器。汇编和链接是针对主机的,但你可以使用GNU Binutils汇编器和链接器进行最后一步操作。

像IDE /编辑器一样,你的编程风格和偏好可能会倾向于使用某个编译环境。

你可能会发现我在Github上的ARM示例有用或没有用处,它们是低级别的板子启动类型示例。大多数是基于Thumb指令集,但尽可能也包括一些ARM指令集。


1
请在答案中添加您的Github链接。GitHub链接: https://github.com/[YourUsername] - lordvcs
好的,请稍等。 - tgunr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接