如何編寫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