Amir Saniyan
Amir Saniyan

Reputation: 13739

Is it possible to develop a loadable kernel module (LKM) on Linux with C++?

When I develop a loadable kernel module (LKM) should I use C?

Is it possible to develop a loadable kernel module (LKM) on Linux with language other than C for example C++?

Upvotes: 20

Views: 12101

Answers (5)

Alex Aranjo
Alex Aranjo

Reputation: 21

There is an operating system which is rewriting Linux Kernel in C++ it's called Boss-Mool and you can write drivers using C++. Here's the link : https://www.bosslinux.in/boss-mool

Upvotes: 2

Alexey Polonsky
Alexey Polonsky

Reputation: 1201

Well, the original question was for Linux, not OS X or Windows or whatever.

There is absolutely no way to write a Linux kernel mode driver in C++ ! That's because you would need to link with libstdc++ which will not link with your module. libstdc++ is not available for kernel mode, as simple as that !

Upvotes: -7

RJVB
RJVB

Reputation: 776

I'm pretty sure I saw a kernel configuration option somewhere allowing C++ in kernel modules, a while back (but cannot find it again). I can see how certain templates would be very interesting to use in driver modules. Just for anecdotics: the OS X Mach kernel is partly written in C++.

Upvotes: 6

wholerabbit
wholerabbit

Reputation: 11546

It may be possible to an extent, but be warned (from http://www.tux.org/lkml/#s15-3):

Is it a good idea to write a new driver in C++? The short answer is no, because there isn't any support for C++ drivers in the kernel.

Why not add a C++ interface layer to the kernel to support C++ drivers? The short answer is why bother, since there aren't any C++ drivers for Linux.

I think the best idea is to consult existing resources (there are a few kernel driver books, including a free one online) which are all in C, get the basics figured out, then you can try and see if you can get c++ to work there.

But I very much doubt that will be easy. You don't even have access to the full C standard library in the kernel. Something to think about: it does not link to shared libraries, and the total executable image is usually 2-3 MB.

Upvotes: 19

Konrad Reiche
Konrad Reiche

Reputation: 29493

In the end it comes down to object code, which is generated by the Assembler and linked together afterwards.

So yes it is possible, you find a debate about that here.

It depends on what you want to do with the LKM, do you want to use it for yourself and some experiments or is it going to become productive anywhere?

Upvotes: 4

Related Questions