说在前面. 最近因为工作原因,天天在操作和调试led. 是时候写个总结啦.
在Android机中,一般都会把led设备的节点创建到/sys/class/leds下面. 创建节点的操作通常放在probe函数里面做.
这个时候需要做的包括:
- 定义一个struct drvdata(在.h文件中,或者在driver的c文件中都可以),并且在这个结构里面包含struct led_classdev abc_led;
struct drvdata {
struct led_classdev abc_led;
};
- 在probe函数中,声明一个1中的struct drvdata的指针变量drvdata_t,并且把这个变量和driver中的device绑定. 下面是对于i2c设备的操作,其他类型的设备操作类似.
drvdata_t = devm_kzalloc(&client->dev, sizeof(struct drvdata), GFP_KERNEL);
- 接着就是把这个结构下面的abc_led的成员给填好并且调用函数led_classdev_register.也就是在probe里面调用下面的函数,当然也可以直接在probe里面写函数内容,就是不太好看.
static int abc_led_register(struct device *dev, struct drvdata *data)
{
data->led.name = "abc_led";
data->led.brightness = LED_OFF;
data->led.max_brightness = LED_HALF;
data->led.default_trigger = "none";