我有兴趣创建自己的移动操作系统。我读到现有的移动操作系统在 ARM 处理器上运行并使用它们的汇编语言,而 Linux 和 Windows 等桌面操作系统是用 asm 编写的。 C 似乎是两者共同的语言。这让我想到了一些问题:
如果是这样,那么一旦我开始这样做:
我确信我想构建一个可以像大多数现有移动操作系统一样在 ARM 处理器上运行的移动操作系统。
最佳答案
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/