【问题标题】:What language allows me to interact with an OS's kernel什么语言允许我与操作系统的内核交互
【发布时间】:2011-10-24 20:44:58
【问题描述】:

我想尝试一下内核编程,主要是为了更多地了解它,而不是尝试创建自己的操作系统或其他任何东西。

但我什至不知道我需要用什么语言编程才能做到这一点,更不用说我可以使用什么 IDE(如果有的话)和编译器?

我想尝试与 Unix 内核(这就是 Linux 内核,这是混合内核吗?)或 Windows 7 内核(不是混合内核吗?,旧版本的 windows是单体的吗?)。

如果我想与上述内核进行交互,我应该使用什么语言以及我可以下载什么编译器(和 IDE)来运行我的代码?

我会考虑使用 c(我已经完成了很多 win32 编程,所以我习惯了 c 和 c++)还是为此进行汇编?您还知道与其中一个内核交互的任何教程吗?

【问题讨论】:

标签: c linux assembly linux-kernel kernel


【解决方案1】:
  1. 是内核,不是内核。

  2. linux 内核是用 C 编写的。几乎所有流行的操作系统内核都是用 C 编写的。

  3. 您应该从 linux 内核开始,因为我假设您无权访问 Windows 内核源代码。转到http://www.kernel.org 并下载它们。调查他们。您也可以在包中找到文档。

  4. 所有这些信息也可以在 Google 上轻松找到。

【讨论】:

  • 请注意 Symbian、eCOS 和 MacOS (Darwin) IO Kit 子系统是 C++。如果您想进行内核工作并拥有现代工具(类、继承、模板等等),C++ 可能是 C 的唯一重要替代品。
【解决方案2】:

一切都取决于您所说的“与内核交互”是什么意思。在 UNIX 世界中最常用的内核用户界面是对文件(包括/dev 中的设备节点和/proc/sys 中的“特殊文件”)进行操作的基本系统调用(打开、读取、写入)。 ) 并且这些几乎可以在任何语言中使用(cat /dev/random 是与内核的交互,因此 shell 是“足以与内核交互的语言”)。

此外,大多数较低级别的系统调用在大多数语言中都可以直接使用:ioctlfcntl、套接字 API 等,但是当内部结构(最初在 C 语言中定义)是正在使用中。

如果您想直接调用系统调用(而不是 libc 包装器),您的选择通常是 C、C++(甚至不与标准库链接)或汇编程序。但是这种方式即使作为练习也没什么意义,除非你想编写自己的“libc”或其他东西。

首先确定您的目标是什么以及您想要什么确切的“交互”,然后选择最简单的解决方案(您知道的高级语言)。我自己经常使用 Python 来“与内核交互”。

【讨论】:

    【解决方案3】:

    Linux Device Drivers 是开始学习内核编程的好地方。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 1970-01-01
      • 2011-11-17
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2018-01-29
      相关资源
      最近更新 更多