Возможно ли разработать загружаемый модуль ядра (LKM) на Linux с С++?

Когда я разрабатываю загружаемый модуль ядра (LKM), я должен использовать C?

Можно ли разработать загружаемый модуль ядра (LKM) на Linux с языком, отличным от C, например С++?

Ответы

Ответ 1

Возможно, это возможно, но будьте осторожны (из http://www.tux.org/lkml/#s15-3):

Это хорошая идея написать новый драйвер на С++? Короткий ответ нет, потому что в ядре нет поддержки драйверов С++.

Почему бы не добавить в ядро ​​интерфейс С++ для поддержки драйверов С++? Короткий ответ: зачем беспокоиться, поскольку на С++ нет драйверов для Linux.

Я думаю, что лучшая идея заключается в том, чтобы проконсультироваться с существующими ресурсами (есть несколько книг с драйверами ядра, включая бесплатную онлайн-версию), которые все находятся на C, выясняют основы, затем вы можете попробовать и посмотреть, сможете ли вы получить С++ для работы там.

Но я очень сомневаюсь, что это будет легко. У вас даже нет доступа к полной стандартной библиотеке C в ядре. Что-то о чем подумать: оно не связано с разделяемыми библиотеками, а общее исполняемое изображение обычно составляет 2-3 МБ.

Ответ 2

Я уверен, что видел параметр конфигурации ядра, где-то позволяющий С++ в модулях ядра, некоторое время назад (но не могу найти его снова). Я вижу, как некоторые шаблоны будут очень интересны для использования в драйверах. Просто для анекдотики: ядро ​​OS X Mach частично написано на С++.

Ответ 3

В конце концов, это сводится к объектным кодам, которые затем генерируются ассемблером и связаны друг с другом.

Итак, да, вы можете найти дискуссию о том, что здесь.

Это зависит от того, что вы хотите сделать с LKM, хотите ли вы использовать его для себя и некоторых экспериментов или он станет продуктивным где-нибудь?

Ответ 4

Существует операционная система, которая переписывает ядро ​​Linux в С++, которое называется Boss-Mool, и вы можете писать драйверы с помощью С++. Здесь ссылка: https://www.bosslinux.in/boss-mool

Ответ 5

Ну, исходный вопрос был для Linux, а не для ОС X или Windows или что-то еще.

Нет абсолютно никакого способа написать драйвер режима ядра Linux в С++! Это потому, что вам нужно будет связать с libstdС++, который не будет связываться с вашим модулем. libstdС++ недоступен для режима ядра, столь же простой, как это!