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

Assembly 我如何开始为ARM处理器编写自己的移动操作系统?,assembly,operating-system,arm,Assembly,Operating System,Arm,我对创建自己的移动操作系统感兴趣。我读到现有的移动操作系统运行在ARM处理器上,并使用汇编语言,而像Linux和Windows这样的桌面操作系统是用asm编写的。C似乎是两种语言的共同语言。这就引出了一些问题: 如果我想以ARM Cortex处理器为目标构建自己的移动操作系统,我需要学习ARM汇编语言吗 如果是这样,那么一旦我开始这样做: 在哪里/如何测试它?它可以在虚拟机中运行吗 有像Beagleboard这样的板,但我不明白如果我可以使用虚拟机,为什么我需要购买它们——我是不是遗漏了什

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

  • 如果我想以ARM Cortex处理器为目标构建自己的移动操作系统,我需要学习ARM汇编语言吗
如果是这样,那么一旦我开始这样做:

  • 在哪里/如何测试它?它可以在虚拟机中运行吗
  • 有像Beagleboard这样的板,但我不明白如果我可以使用虚拟机,为什么我需要购买它们——我是不是遗漏了什么
  • 一个操作系统可以同时在x86和ARM上运行吗
我确信我想构建一个可以像大多数现有移动操作系统一样在ARM处理器上运行的移动操作系统

  • 我的初始步骤应该是什么?看看像android或其他操作系统这样的开源项目会有帮助吗
  • 在哪里可以找到ARM汇编语言资源和IDE
1)所有平台都需要一些程序集,您可能需要一些启动代码来涵盖编程语言的假设,例如,C编译器假设您已经设置了堆栈(指针),并调零了.bss内存,.数据位于正确的位置等,这取决于处理器,但通常,您可能需要一些用于中断处理的代码,以及任务切换等

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

3) 指令集模拟器或虚拟机等与处理器完全匹配的情况非常罕见。仅仅因为它在虚拟机/sim卡上工作并不意味着它可以工作。与在调试器中运行代码和在调试器外部运行代码没有区别。您应该尝试不同的模拟器以及硬件来验证模拟器的质量。一个arm处理器与另一个处理器或一个x86处理器与另一个处理器之间的差异足以导致软件出现故障,因此即使在硬件上运行也不足以解决所有潜在的bug

4) linux可以在很多平台上运行是吗?Netbsd的运行速度甚至更高,是吗?取决于你如何设计你的程序,它可以是非常可移植的,也可以是不可移植的,或者介于两者之间的任何地方。这取决于你

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

6) IDE和编辑等都是非常私人的事情,一个人最喜欢的是别人讨厌的。对于ARM开发,您需要获得ARM(ARM架构参考手册)。过去的单个文档由于具有如此多不同的核心和族而分裂。最古老的是什么?ARMv5或ARMv6 ARM是以前唯一的。如果你得到了它,你至少可以编写出在整个arm内核家族中更具可移植性的代码。你会想要一些TRM(技术参考手册)。获得一个用于ARM7TDMI(ARMv4T),就像从intel获得486手册一样,几乎所有内容(32位arm指令)都与该内核兼容。可能想为其他家庭获得TRM。请理解,即使旧版本(例如rev 1.0(r1p0))可能会被标记为过时,但如果有it手册,ARM已将其出售给某人,并且它存在于某些芯片中的某个位置,并且您可能需要了解内核之间的差异(如果您的目标非常接近)。pl310二级缓存等外围设备通常连接到一些内核,如果您对打开和使用缓存感兴趣,您可能会想知道其中有什么。嗯,arm7(ARMv4,不要与ARMv7混淆)没有mmu,我认为ARM9有,因此根据您管理应用程序及其内存的方式,您可能希望使用ARM9或更新的东西作为基准

获取基于codesourcery lite gnu的工具链。codesourcery现在是mentor graphics的一部分。为arm构建自己的交叉编译器或获得其他编译器并不困难(emdebian等)。ARM是一个很好的编译器,但它价格昂贵,而且大多数支持都会以一定的价格从他们那里获得,当然也有一些在线谷歌帮助,但大多数免费帮助都是基于gcc的。llvm编译器工具每天都在进步,据我所知,它们在iPhone上使用。我使用clang编译器,它是llvm的一部分。您不必构建一个现成的交叉编译器,它们是从语言到中间语言再到目标程序集的交叉编译器。组装和链接的目标是主机,但最后一步可以使用gnu binutils组装器和链接器

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


你可能会发现我在github上的arm示例有用与否,它们都是低级的、板带式的示例。大部分是基于拇指的,但在可能的情况下也有一些手臂。

为什么你的问题会出现在代码标签中?它伤了我的眼睛。。。如果我想阅读整行内容,它还要求我水平滚动。这个用户chirag做到了。等等。@AustinHenley:我刚刚把它编辑成了正常值。