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设备驱动程序3》源码目录结构和源码分析经典链接
米尔科技 Z-turn XC7Z010 Linux驱动源码路径
Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )