kernel_module_learn/06_virtual_led_basic/test_module.c

59 lines
1.5 KiB
C
Raw Normal View History

2025-02-23 14:25:36 +01:00
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/leds.h>
#include <linux/module.h>
2025-02-25 13:32:53 +01:00
static void virtual_led_brightness_set(struct led_classdev *led_cdev,
enum led_brightness brightness)
{
pr_info("Luminosité défini sur la LED %s à %d\n", led_cdev->name,
brightness);
2025-02-23 14:25:36 +01:00
}
2025-02-25 13:32:53 +01:00
static enum led_brightness
virtual_led_brightness_get(struct led_classdev *led_cdev)
{
pr_info("Luminosité lu sur la LED %s, valeur actuelle: %d\n",
led_cdev->name, led_cdev->brightness);
return led_cdev->brightness;
}
2025-02-23 14:25:36 +01:00
static struct led_classdev virtual_led = {
.name = "flo-led:white:led-0",
.color = LED_COLOR_ID_WHITE,
2025-02-23 14:25:36 +01:00
.brightness = 0,
.max_brightness = 255,
.brightness_set = virtual_led_brightness_set,
.brightness_set = virtual_led_brightness_get
2025-02-23 14:25:36 +01:00
};
2025-02-25 13:32:53 +01:00
static int __init virtual_led_init(void)
{
2025-02-23 14:25:36 +01:00
int ret;
2025-02-23 15:39:24 +01:00
pr_info("Chargement du module pour la LED virtuelle\n");
2025-02-23 14:25:36 +01:00
ret = led_classdev_register(NULL, &virtual_led);
if (ret < 0) {
2025-02-23 15:39:24 +01:00
pr_err("Impossible d'ajouter la LED virtuelle\n");
2025-02-23 14:25:36 +01:00
return ret;
}
2025-02-23 15:39:24 +01:00
pr_info("La LED virtuelle est ajouté\n");
2025-02-23 14:25:36 +01:00
return 0;
}
2025-02-25 13:32:53 +01:00
static void __exit virtual_led_exit(void)
{
2025-02-23 15:39:24 +01:00
pr_info("Déchargement du module pour la LED virtuelle\n");
2025-02-23 14:25:36 +01:00
led_classdev_unregister(&virtual_led);
2025-02-23 15:39:24 +01:00
pr_info("La LED virtuelle est bien retiré\n");
2025-02-23 14:25:36 +01:00
}
module_init(virtual_led_init);
module_exit(virtual_led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Florian RICHER");
MODULE_DESCRIPTION("Un module noyau qui ajoute une LED virtuelle");
MODULE_VERSION("1.0");