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

标签 assembly operating-system arm

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

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

  • 如果是这样,那么一旦我开始这样做:
  • 我在哪里/如何测试它?它可以在虚拟机中运行吗?
  • 有像 Beagleboard 这样的板,但我不明白如果我可以使用 VM,为什么我需要购买它们——我在这里遗漏了什么吗?
  • 一个操作系统可以同时在 x86 和 ARM 上运行吗?

  • 我确信我想构建一个可以像大多数现有移动操作系统一样在 ARM 处理器上运行的移动操作系统。
  • 我的初始步骤应该是什么?看看像 android 或任何其他操作系统这样的开源项目会有所帮助吗?
  • 在哪里可以找到 ARM 汇编语言资源和 IDE?
  • 最佳答案

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

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

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

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

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

    6) IDE 和编辑器等都是很私有(private)的东西,一个人喜欢的东西,别人就讨厌。对于 ARM 开发,您需要获取 ARM ARM(ARM 架构引用手册)。由于它们具有许多不同的核心和系列,曾经是单个文档的内容已经 split 。什么是 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 示例有用与否,它们是低级的、板子启动类型的示例。主要基于拇指,但在可能的情况下也有一些 ARM 。

    关于assembly - 如何开始为 ARM 处理器编写自己的移动操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9954184/

    相关文章:

    algorithm - 什么是最有效的给出素数的算法,最高值(所有 32 位机器都可以处理)

    c - 我正在尝试创建一个僵尸进程

    linux - ARM 汇编时间系统调用意外值

    c++ - 如何在 VS 中使用 asm 中的浮点变量

    c - alá insight for windows

    javascript - 内联执行生成的汇编程序

    windows - 使用CMake在Visual Studio中构建ARM64 ASM

    linux - 如果我在子进程中使用 wait() 会发生什么?

    operating-system - os161 父子线程pid

    c - 如何防止 ARM Compiler 5 armcc 内联汇编程序中的 LDM/STM 指令扩展?