回答
看一看这篇文章:
http://www.codeproject.com/KB/tips/boot-loader.aspx
你会需要一点汇编启动代码,让你尽可能的main(),但是你可以用C写的,其余++。如果您想在运行时创建对象,并且您希望在多个线程中创建自己的调度程序,则必须编写自己的堆管理器(新建/删除)。
即使有你的说明,答案是这取决于 - 确切的启动顺序取决于硬件 - 虽然有相当多的共同点。引导加载程序通常以绝对地址加载,并且它所包含的文件经常按照原样被存入内存。这意味着您不使用常规链接器,而是使用“链接定位器”。如果一个典型的链接器产生一个可执行文件准备重新定位和加载,定位器会生成一个已经设置为在一个确切地址运行的可执行文件,并且所有的重定位已经被应用。对于那些足够年老的人来说,它们通常非常像MS-DOS .COM文件。除此之外,它必须(当然)静态链接程序依赖的整个运行时 - 它不能依赖于类似于DLL或共享对象库的东西,因为要加载的代码那些还没有被装入。
谷歌一开始
另一个想法是先从嵌入式系统仿真器的嵌入式C++,例如Atmel的AVR网站有一个很好的IDE的仿真爱特梅尔AVR系统,并允许你建立的原始代码在C中,并将其加载到仿真CPU中,他们使用gcc作为工具链(我认为)
C++用于embedded systems programming,甚至用于编写OS内核。
通常在引导序列的早期至少有几个汇编指令。有几件事情更容易表达,或者可能有需要使用的CPU供应商的参考代码。
对于初始引导过程,您将无法使用标准库。没有例外,RTII,新/删除。它回到了“带班的C”。大多数人只是在这里使用C.
一旦你有足够的支持基础设施加载,你可以使用你可以移植的标准库的任何部分。
你需要的是提供了一个环境:
- 一个工作的C库,或足够的它做你想要什么
- ,你打算用C++运行时的部分。这是编译器特定的
除了任何其他库。如果你的平台上没有动态链接器(如果你没有操作系统,你可能没有链接器),那么你将不得不静态链接它。
实际上,这意味着链接一些小的C++运行库和一个适合您的平台的C库。然后你可以简单地编写一个独立的C++程序。
如果您使用的是BSD Unix,您可以链接到独立库。这包括磁盘和tty的基本IO系统。你的源代码看起来就像在Unix下运行一样,但二进制文件可以加载到裸机上。
看到这个页面:http://wiki.osdev.org/C++
它有一切必要措施,开始编写使用C++作为采用了比较流行的工具链的核心语言的操作系统。
此外这个页面应该被证明是非常有用的:http://wiki.osdev.org/C++_Bare_Bones。它几乎引导你进入操作系统的C++入口点。
- 1. 你如何使用qt创建独立(只有一个exe)应用程序?
- 2. 如何创建一个独立的.Net核心应用程序?
- 3. 如何创建一个独立的JVM?
- 4. 如何使用'C'或'C++'为windows创建独立程序或应用程序
- 5. 创建独立的Java应用程序
- 6. 在C++中创建独立进程(Windows)
- 7. 如何创建一个独立的exe应用程序的Windows服务?
- 8. 用Java创建独立应用程序
- 9. 创建一个独立的Node.js WEBAPP
- 10. 创建独立进程!
- 11. 在C++中创建独立的Solidworks应用程序
- 12. 如何在独立的SWT应用程序中创建IMarker
- 13. 你如何建立C中的应用程序++模块化
- 14. C++独立应用程序
- 15. 如何使用Node.js创建独立命令行应用程序
- 16. 如何创建屏幕大小独立Android应用程序
- 17. 如何为Qt独立应用程序创建清单文件
- 18. 如何创建独立升降机Web应用程序?
- 19. 如何为php独立应用程序创建exe文件?
- 20. 如何使用Visual Studio创建.NET独立应用程序?
- 21. 从独立程序创建共享库 - 如何处理“int main()”?
- 22. 如何从pip包创建独立安装程序?
- 23. 你如何构建一个Java程序?
- 24. Javascript - 如何创建一个独立的变量?
- 25. 如何创建独立的Realm对象
- 26. 如何创建独立的框架?
- 27. 如何将两个独立的makefile合并为一个程序?
- 28. 从独立线创建的形状创建一个多边形
- 29. 建立一个独立的委托?
- 30. 创建一个独立的 “线程” 在PHP
定义“独立式”。你的意思是没有依赖外部库?对于什么操作系统和环境? – 2010-01-18 22:15:04
独立式在?没有操作系统?没有动态库? – 2010-01-18 22:15:30
@Josh Kelley:“独立式”是指一个基本上是第一个加载到计算机上的程序(例如操作系统)的程序。我知道大多数人在ASM中写了一个boot-strapper,但是我想知道是否可以用C++来完成它。 – 2010-01-18 22:16:28