1

我是内核编程的初学者。我只是需要一些灵感。我知道我可以在内核源代码中编写一些函数,重建并重新启动内核。这些代码可能是一些控制硬件的硬件驱动程序。但是我们的用户空间程序如何使用这些功能呢?我知道通过syscall用户空间程序可以与内核空间通信,可加载内核模块也可以使用内核源代码中定义的功能。但是我们的用户程序如何做到这一点呢?

PS:我现在正在学习qemu-kvm。我知道 qemu 是用户空间程序,而 kvm 是内核。我只是想弄清楚qemu程序是如何使用kvm的。

我知道这是一个非常基本的 linux 内核编程问题,但它让我困惑了很长时间。有人可以给我一个提示吗?:>

4

1 回答 1

2

如果您正在编写驱动程序,则不应插入新的系统调用。新的系统调用通常是一个坏主意,你应该有一个很好的理由这样做,而硬件驱动程序不是一个好主意。您必须将您的驱动程序注册为字符设备、块设备或网络设备。我向您推荐“Linux 设备驱动程序”一书(可在 Internet 上合法获得)以查看不同类型驱动程序的示例。

关于如何从用户空间调用内核中的函数的问题......没有直接的方法可以做到这一点,你不能像使用库那样将用户空间代码与内核链接。首先,您必须将您的函数注册为系统调用,然后使用 syscall() 函数调用系统调用。

这是一个很好的解释方法:http ://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

于 2012-04-15T01:49:47.820 回答