Возможно ли разработать загружаемый модуль ядра (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С++ недоступен для режима ядра, столь же простой, как это!