用于多个设备的可加载内核模块 (LKM)

loadable kernel module (LKM) for multiple devices

我有一个简单的可加载内核模块,它通过提供 blinkingPeriod、on/off 功能等来控制 LED...

设备出现在 /sys/led ,并且运行良好。

我已经为命令行提供了一个输入参数,它接受 LED 连接到哪个 GPIO。 现在我想重用相同的内核模块,用于额外数量的 LED,但是我无法使用 insmod 为具有不同命令行参数的额外 LED 加载模块,因为会抛出错误:

错误:无法插入模块 - 文件存在。

我知道这是在告诉我不能加载同一个模块两次,但是尝试为多个设备提供 LKM 时最好的方法是什么?

我能想到的唯一解决方案是为每个人重新编写一个 LKM LED/device,这似乎效率不高,或者将所有 LED 封装在一个不太有效的 LKM 中 scalable/portable.

有没有人对最佳方法有任何意见。 提前致谢。

你应该做的是: - 在您的模块中添加对多个 LED 的支持 - 停止使用模块参数配置 GPIO - 实现一个 sysfs 接口以允许实例化 LED。我会使用类似 gpiolib 的东西。

如果您的平台支持,更好的解决方案是使用设备树。

但是,您的驱动程序可能并不需要,您肯定已经可以使用 leds-gpio 和 leds-pwm 驱动程序满足您的需求。