【发布时间】:2019-10-02 22:23:50
【问题描述】:
我有一个 Raspberry Pi 3B,在 pwmchip0 (pwm0/pwm1) 上有两个电机。 我通过sysfs成功控制了pwm-chip,但现在我想把它放在一个内核模块中。
我看到<linux/pwm.h> 并想使用pwm_get()、pwm_put() 和pwm_config()。
我找到了this post,还研究了 LXR 上的示例,但对我没有太大帮助。一般来说,我对设备树和内核编程非常陌生。
我未能请求 pwm_device (ERR=1),但我无法找出问题所在。
- 我必须为 consumer_id 指定什么?
- 我什至必须修改设备树或添加静态查找表吗?
- 如果是这样怎么办?
我已经创建了一个设备树覆盖,但是没有工作:/
/dts-v1/;
/include/ "bcm283x.dtsi"
/ {
compatible = "brcm,bcm2708";
motor-left-pwm {
compatible = "motor-left";
pwms = <&pwm 0 1000000 0>;
pinctrl-names = "default";
};
};
我尝试添加一个静态查找表:
static struct pwm_lookup crc_pwm_lookup[] = {
PWM_LOOKUP("pwmchip0", 0, "0000:00:02.0", "pwm_left", 0>
PWM_LOOKUP("pwmchip0", 1, "0000:00:02.0", "pwm_right", >
};
pwm_add_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
但结果是这样的:
WARNING: "pwm_add_table" [/home/josh/drivers/motor/motor.ko] undefined!
insmod: ERROR: could not insert module /motor.ko: Unknown symbol in module
我在某处读到这意味着我无法调用此函数:/
【问题讨论】:
-
静态表仅用于特定用途。您必须在 DT 中定义您的设备,您将在其中放置对 pwm 控制器的引用(就 DT 而言的phandle)。查看内核中现有的驱动程序。
-
好的,谢谢!我希望我以后不需要它们:D
标签: linux-kernel raspberry-pi linux-device-driver kernel-module