在linux中,用户空间程序如何使用内核函数?我真的需要一些灵感

在linux中,用户空间程序如何使用内核函数?我真的需要一些灵感,linux,kernel,linux-device-driver,kernel-module,Linux,Kernel,Linux Device Driver,Kernel Module,我是内核编程的初学者。我只是需要一些灵感。我知道我可以在内核源代码中编写一些函数,重建并重新启动内核。这些代码可能是一些控制硬件的硬件驱动程序。但是我们的用户空间程序如何使用这些功能呢? 我知道通过syscall,用户空间程序可以与内核空间通信,可加载内核模块也可以使用内核源代码中定义的函数。但是我们的用户程序如何实现这一点呢 PS:现在我正在学习qemu kvm。我知道qemu是一个用户空间程序,kvm是内核。我只是想弄清楚qemu程序是如何使用kvm的 我知道这是一个非常基本的linux内核

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

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


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

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

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


这里有一个很好的解释:

除了系统调用之外,内核/用户空间通信的方式是
/proc
文件系统和
/dev
中的设备文件。我猜qemu kvm使用netlink来通信内核用户空间。@strkol:什么是netlink?把它看作是内核和用户空间之间的套接字通信。查看更多信息。@strkol:谢谢链接和解释:)