linux设备驱动程序是如何加载的?

linux设备驱动程序是如何加载的?,linux,linux-kernel,linux-device-driver,Linux,Linux Kernel,Linux Device Driver,谁能简单地给我解释一下下面的事情吗。 Linux驱动程序是如何加载到内核空间的? 加载驱动程序后,将导出哪些函数? 如何调用驱动程序函数?通常,您将使用insmod或modprobe用户空间应用程序加载模块,如果是第二个模块,则可能加载其依赖项。这两个模块在实际加载单个模块时都做了相同的操作——它们将文件读入内存,并使用init_模块系统调用,提供加载该模块的内存地址。这个调用告诉内核应该加载模块 现在内核模块实际上是ELF文件,与用户空间中使用的共享库没有太大区别。内核有一个等价的共享库链接器

谁能简单地给我解释一下下面的事情吗。 Linux驱动程序是如何加载到内核空间的? 加载驱动程序后,将导出哪些函数? 如何调用驱动程序函数?

通常,您将使用insmod或modprobe用户空间应用程序加载模块,如果是第二个模块,则可能加载其依赖项。这两个模块在实际加载单个模块时都做了相同的操作——它们将文件读入内存,并使用init_模块系统调用,提供加载该模块的内存地址。这个调用告诉内核应该加载模块

现在内核模块实际上是ELF文件,与用户空间中使用的共享库没有太大区别。内核有一个等价的共享库链接器,它将解析这些文件,获取由它提供的符号列表,更新内核已知的函数列表。它还将检查该模块所需的所有符号是否已经在内核中,并进行适当的重新定位。它要做的最后一件事是调用模块中的初始化函数

请注意,您不能编译将直接调用模块提供的任何函数的内核。类似地,您可以在加载第一个模块之前调用另一个模块中的模块提供的任何函数。内核将拒绝加载任何带有未知符号的模块。但是,大多数模块都会将其功能注册为某种可以间接调用的回调。

阅读此文档。这里有关于Linux驱动程序的文章,那么您有什么具体问题?错误的论坛。尝试阅读此内容。和modprobe加载模块并自动加载其相关模块。