Какой язык позволяет мне взаимодействовать с ядром ОС - PullRequest
2 голосов
/ 11 августа 2011

Я хочу попробовать программирование ядра, в основном, чтобы лучше понять его, а не пытаться создавать свою собственную ОС или что-то еще.

Но я не совсем понимаю, какой язык мне нуженчтобы запрограммировать это, не говоря уже о том, какую IDE (если она будет) и компилятор, который я могу использовать?

Я хотел бы попытаться взаимодействовать с ядром Unix (так что это правильно для ядра Linux)& это гибридное ядро?) или ядро ​​Windows 7 (это гибридное ядро, не так ли ?, более старые версии Windows были монолитными?).

Если я хочу вступить во взаимодействиес вышеупомянутыми ядрами, какой язык я должен использовать и какой компилятор (& IDE) я могу загрузить для запуска своего кода?

Буду ли я смотреть на использование c (я много программировал на win32, такЯ привык к C & C ++) или сборка для этого?Также знаете ли вы какие-либо учебные пособия по взаимодействию с одним из этих ядер?

Ответы [ 3 ]

11 голосов
/ 11 августа 2011
  1. Это ядро, а не ядро.

  2. Ядро Linux написано на C. Почти все популярные ядра ОС написаны на C.

  3. Вы должны начать с ядра Linux, так как я предполагаю, что у вас нет доступа к источникам ядра Windows. Перейдите на http://www.kernel.org и загрузите их. Посмотри на них. Вы также найдете документацию в пакете.

  4. Всю эту информацию также можно легко найти в Google.

3 голосов
/ 11 августа 2011

Все зависит от того, что вы подразумеваете под «взаимодействовать с ядром». Пользовательский интерфейс ядра, наиболее часто используемый в мире UNIX, - это основные системные вызовы (открытие, чтение, запись), работающие с файлами (включая узлы устройств в /dev и «специальные файлы» в /proc и /sys в Linux ) и они доступны практически на любом языке (cat /dev/random - это взаимодействие с ядром, поэтому оболочка «достаточно хороша для взаимодействия с ядром»).

Кроме того, большинство системных вызовов более низкого уровня доступны непосредственно на большинстве языков: ioctl, fcntl, API сокетов и т. Д., Но их использование может оказаться сложным, когда внутренние структуры (изначально определенные в языке C) используется.

Если вы хотите вызывать системные вызовы напрямую (а не обертками libc), вы обычно выбираете C, C ++ (даже не связываясь со стандартной библиотекой) или ассемблер. Но идти по этому пути не имеет смысла даже в качестве упражнения, если только вы не хотите написать собственный libc или что-то в этом роде.

Сначала решите, каковы ваши цели и какое именно «взаимодействие» вы хотите, затем выберите самое простое решение (язык высокого уровня, который вы знаете). Я часто использую Python для «взаимодействия с ядром».

2 голосов
/ 11 августа 2011

Драйверы устройств Linux - хороший момент для начала изучения программирования ядра.

...