如何开始为ARM处理器编写自己的移动操作系统?

时间:2012-03-31 08:04:58

标签: assembly operating-system arm

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:18)

1)所有平台都需要一些程序集,您可能需要一些启动代码来涵盖编程语言的假设,例如C编译器假设您已经设置了堆栈(指针),并将.bss内存归零, .data是在正确的位置,等等。根据处理器的不同,通常,您可能需要一些代码来处理中断,也可能需要任务切换等。

2)是的,有很多虚拟机,qemu,skyeye等。

3)指令集模拟器或虚拟机等与处理器完全匹配的情况非常少见。仅因为它适用于vm / sim并不意味着它有效。与在调试器中和调试器外部运行代码没什么不同。您应该尝试使用不同的模拟器和硬件来验证模拟器的质量。一个处理器到另一个处理器或一个x86到另一个处理器可以变化到足以导致软件失败,因此即使在硬件上运行也不足以解决所有潜在的错误。

4)linux在很多平台上运行是吗? Netbsd运行得更多,是吗?根据您设计程序的方式,它可以是非常便携或不可携带的,也可以介于两者之间。这取决于你。

5)您需要一些操作系统基础知识。也许可以获得MicroC / OS-II书或其他类似材料。了解任务切换等基础知识

6)IDE和编辑等都是非常个人化的东西,一个人最喜欢被别人厌恶。对于ARM开发,您需要获得ARM ARM(ARM架构参考手册)。曾经是单个文档的原因已经分裂,因为它们具有许多不同的核心和系列。什么是最古老的ARMv5或ARMv6 ARM以前是单一的ARM。得到那个,你至少可以编写在整个arm核心系列中更便携的代码。您将需要获得一些TRM(技术参考手册)。得到一个用于ARM7TDMI(ARMv4T),就像从英特尔获得486手册一样,几乎所有东西(32位臂指令)都可以兼容回到那个核心。可能想要为其他家庭获得TRM。明白,即使旧版本例如rev 1.0(r1p0)可能被标记为过时,如果有一本手册,ARM已将它卖给某人并且它存在于某些芯片的某个地方,你可能需要知道它们之间的差异核心(如果你密切关注)。诸如pl310 L2缓存之类的外围设备经常被发现连接到某些内核,如果您有兴趣打开并使用缓存,您可能想知道其中的内容。嗯,arm7(ARMv4,不要与ARMv7混淆)没有mmu,我认为ARM9有,所以根据你想管理应用程序及其内存的方式,你可能想要使用ARM9或更新的东西作为基准。

获取基于codesourcery lite gnu的工具链。 codesourcery现在是导师图形的一部分。为arm建立自己的交叉编译器或获取其他一些(emdebian等)并不难。 ARM是一个很好的编译器,但价格昂贵,而且大多数支持都是以合理的价格来自它们,当然有些在线谷歌搜索帮助,但大多数免费帮助是基于gcc。 llvm编译器工具每天都在变得越来越好,它们在我理解的iPhone上使用。我使用clang编译器,它是llvm的一部分。您不必构建交叉编译器,它们是开箱即用的,它们是从语言到中间到目标程序集的交叉编译器。汇编和链接是针对主机的,但您可以使用gnu binutils汇编器和链接器进行最后一步。

与IDE /编辑器一样,您的编程风格和首选项可能会让您倾向于一个编译环境而不是另一个编译环境。

你可能会发现我在github上的arm示例是否有用,它们是低级别的,董事会提出类型示例。大多数都是基于拇指的,但有些手臂也是可能的。