如何编写C程序(在用户空间中)调用属于内核驱动程序的函数?如果不可能直接做,我该怎么办呢?如何从用户空间程序调用Linux内核驱动函数?
背景:我正在尝试使用单板计算机(Intel NUC DE3815TYBE)的PWM引脚,以便我可以控制风扇。称为pwm_lpss的Linux驱动程序允许控制这些引脚(由英特尔开发的驱动程序,源代码为here)。我已通过使用lsmod
命令验证此驱动程序是否已安装。这里是打字modinfo pwm_lpss
后的驱动程序信息:
filename: /lib/modules/3.19.0-25-generic/kernel/drivers/pwm/pwm-lpss.ko
license: GPL v2
author: Mika Westerberg <[email protected]>
description: PWM driver for Intel LPSS
srcversion: 44AA14AF3E2F96C813770A8
depends:
intree: Y
vermagic: 3.19.0-25-generic SMP mod_unload modversions
signer: Magrathea: Glacier signing key
sig_key: 6A:AA:11:D1:8C:2D:3A:40:B1:B4:DB:E5:BF:8A:D6:56:DD:F5:18:38
sig_hashalgo: sha512
所以我知道那里的驱动模块(该pwm-lpss.ko
文件)和我的源代码,我知道有一个功能叫pwm_lpss_config()
,我想使用。我如何从我的用户空间C程序中调用该函数?我将如何处理#包括它?或者这是不可能从用户空间做到的?
不幸的是,英特尔提供了有关如何使用此驱动程序的零文档。我认为驱动程序通常会将其功能映射到某些用户可访问的文件。经过一些挖掘,我可以找到一些与PWM有关的文件,但是我一直无法找到看起来可以设置PWM占空比/频率的文件。
这是一个标准的驱动程序,因此,文档在内核中已经很长时间了:https://www.kernel.org/doc/Documentation/pwm.txt – 0andriy