Linux Kernel上游驱动的源码结构要求

Posted

技术标签:

【中文标题】Linux Kernel上游驱动的源码结构要求【英文标题】:Driver's source code structure requirements for Linux Kernel upstream 【发布时间】:2021-02-04 08:06:44 【问题描述】:

我计划重写我的传感器驱动程序,以便尝试将我的模块放入 Linux 内核。我想知道是否有关于源代码组织的要求。是否必须将所有代码保存在一个源文件中,还是可以将其拆分为多个源文件?

我希望我的实现采用模块化方法,一个文件包含 API 和内核注册所需的所有结构,另一个文件包含与传感器交换数据的低级操作(即 mysensor.c 和 mysensor_core .c).

从这个角度看有什么要求?

每个文件的代码行数是否有限制?

注意:

我尝试查看官方 github 存储库,在我看来,代码始终仅限于一个源文件。

https://github.com/torvalds/linux/tree/master/drivers/misc

【问题讨论】:

“在我看来,代码总是被限制在一个单一的源文件中。” - 据我了解,对于 multi-source 驱动程序,您可能总是创建一个 subdirectory,例如:github.com/torvalds/linux/tree/master/drivers/misc/lis3lv02d. 遵循内核文档目录中的样式指南。 很可能您必须查看 IIO 文档。并在源代码树的 drivers/iio 中搜索示例。 drivers/misc 不是传感器驱动程序的文件夹! 【参考方案1】:

这里以“linux/drivers/iio/gyro/Makefile”为例:

# Currently this is rolled into one module, split it if
# we ever create a separate SPI interface for MPU-3050
obj-$(CONFIG_MPU3050) += mpu3050.o
mpu3050-objs := mpu3050-core.o mpu3050-i2c.o

用于构建“mpu3050.ko”模块的“mpu3050.o”文件是通过链接两个目标文件“mpu3050-core.o”和“mpu3050-i2c.o”构建的,每个目标文件都是通过编译构建的一个相应命名的源文件。

请注意,如果模块是由上述多个源文件构建的,则最终模块的基本名称“mpu3050”必须与每个源文件的基本名称“mpu3050-core”和“mpu3050-i2c”不同”。因此,在您的情况下,如果您希望最终模块被称为“mysensor.ko”,那么您需要重命名“mysensor.c”文件。

【讨论】:

以上是关于Linux Kernel上游驱动的源码结构要求的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核Linux 内核源码目录说明 ② ( drivers 目录 | fs 目录 | include 目录 | init 目录 | ipc 目录 | kernel 目录 )

linux驱动开发之蜂鸣器驱动源码分析

Linux pci驱动源码

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

米尔科技 Z-turn XC7Z010 Linux驱动源码路径

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )