我使用 C++ 已经有一段时间了,我开始对驱动程序和其他东西等低级系统编程产生兴趣。即使是某种原始操作系统也可能是非常有趣的项目!
我不知道我可以从哪里开始。是否有任何不太具有挑战性的事情我可以开始?关于 C++ 有什么我应该尽量避免性能关键代码中的异常吗?
如果这很重要的话,我目前的操作系统是 Windows 7。
我使用 C++ 已经有一段时间了,我开始对驱动程序和其他东西等低级系统编程产生兴趣。即使是某种原始操作系统也可能是非常有趣的项目!
我不知道我可以从哪里开始。是否有任何不太具有挑战性的事情我可以开始?关于 C++ 有什么我应该尽量避免性能关键代码中的异常吗?
如果这很重要的话,我目前的操作系统是 Windows 7。
用 C++ 编写 Windows 设备驱动程序并非不可能,没有多少 CRT 函数可以让您陷入困境。new 运算符不可用,例如,您不必担心 std::bad_alloc。除非你替换它,否则会减少相当多的标准 C++ 库类。
但这并不是设备驱动程序的真正意义,让它尽可能小是相当重要的。当您编写复杂的代码时,C++ 会得到回报。您明确不想在设备驱动程序中编写复杂的代码。调试它是红色的。
Linus 真的很喜欢内核中的 C。这是有充分理由的。
C++ 并未提供在其中实际实现完整操作系统所需的全部工具。有一些机器特定的事情不能在 C++ 中完成。这些事情是处理和引发中断,控制 MMU,控制对主管 cpu 指令的访问,以及一些其他的小事。
幸运的是,这些东西足够少,可以用从 C++ 访问的汇编语言编写。
看看osdev.org(在考虑开发自己的操作系统时会出现的许多问题都在这里得到解答)。
我强烈建议您从破解现有的开源设备驱动程序和内核开始,您实际上只能在 Linux 或 *BSD 中进行这些操作。这种体验还将让您很好地了解自己是否适合这种编程。
我听说最近开源的 Symbian OS 是使用 C 和 C++ 编写的。不确定它的哪些部分是用 C++ 完成的,因为我没有阅读代码库。考虑调查一下。
Kerneltrap.org 对为什么 Linux 内核的代码库中没有 C++ 进行了一些很好的讨论。考虑阅读它。
Symbian OS 是用 C++ 的变体编写的。当然,低级的东西也有汇编代码,但这一切都结束了。您不能使用异常,并且对于实时驱动程序,您不能执行诸如动态内存分配之类的正常操作,即使在 C 语言中也是如此。
我推荐C 编程语言和汇编程序。我不确定是否可以使用 C++ 进行低级操作。