【问题标题】:How can I get started on writing my own mobile OS for ARM processors?如何开始为 ARM 处理器编写自己的移动操作系统?
【发布时间】:2012-03-31 08:04:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 为什么你的问题在代码标签中?它伤害了我的眼睛......如果我想阅读整行,它还需要我水平滚动。
  • 这个用户 chirag 做到了..等等。
  • @AustinHenley :我刚刚将其编辑为正常。

标签: assembly operating-system arm


【解决方案1】:

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

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

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

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

5) 您需要一些操作系统基础知识。可能会得到 MicroC/OS-II 书或其他一些类似的材料。打通任务切换等基础知识。

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

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

与 IDE/编辑器一样,您的编程风格和偏好可能会使您倾向于一种编译环境而不是另一种。

你可能会发现我在 github 上的 arm 示例有用与否,它们是低级别的、板子启动类型的示例。主要是拇指,但也有可能是手臂。

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 2012-02-03
    • 2010-11-07
    • 2010-11-16
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2012-06-05
    • 2020-02-10
    相关资源
    最近更新 更多