用于多个设备的可加载内核模块 (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 驱动程序满足您的需求。
我有一个简单的可加载内核模块,它通过提供 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 驱动程序满足您的需求。