一.
在主DTS(系统主要调用的DTS)里面添加节点(注意不要添加到了别的节点里面)
路径:/kernel/arch/arm64/boot/dts/rockchip(一般是这个,有的在arm里)
lec_en { //节点名字随便写
status = "okay";
compatible = "techvision,LCled"; //一样随便写
ledone_gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>; // ledtwo_gpio = <&gpio0 6 GPIO_ACTIVE_HIGH>;可添加任意个,看自己情况
};
二.
在led驱动文件夹里添加驱动文件并编写。
路径:/kernel/drivers/leds
创建.c文件,驱动文件名随便写。
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/err.h>
#include <linux/uaccess.h>
#include <linux/delay.h>
#include <linux/cdev.h>
#include <asm/ioctl.h>int ledone_gpio;static int led_probe(struct platform_device *pdev)
{int ret=0,i=0;enum of_gpio_flags flags;struct device *dev = &pdev->dev;struct device_node *np = dev->of_node;printk("Hello world!\n");/* 从dts解析一个gpio */ledone_gpio = of_get_named_gpio_flags(np, "ledone_gpio", 0, &flags);if (!gpio_is_valid(ledone_gpio)) {dev_err(dev, "failed to parse ledone_gpio\n");return ledone_gpio;}/* 向内核申请一个gpio */ret = devm_gpio_request_one(dev, ledone_gpio, GPIOF_DIR_OUT, "ledone");if (ret < 0) {dev_err(dev, "failed to request ledone_gpio\n");return ret;} while(i<5){ //控制亮灭gpio_set_value(ledone_gpio, 0);mdelay(300);gpio_set_value(ledone_gpio, 1);mdelay(300);i++;}return 0;
}static int led_remove(struct platform_device *pdev)
{return 0;
}static struct of_device_id led_of_match[] = {{ .compatible = "techvision,LCled" }, //与DTS里面的属性要匹配{ }
};
MODULE_DEVICE_TABLE(of, led_of_match);static struct platform_driver led_driver = {.driver = {.name = "techvision",.owner = THIS_MODULE,.of_match_table = of_match_ptr(led_of_match),},.probe = led_probe,.remove = led_remove,
};/* 平台驱动入口 */
module_platform_driver(led_driver);MODULE_AUTHOR("LC");//作者名
MODULE_DESCRIPTION("lcled driver");//驱动描述
MODULE_LICENSE("GPL");
三.
修改对应Kconfig,Makefile文件(路径和驱动文件一样)。
Kconfig(添加如下代码):
config LEDS_LEC //名字随便取
tristate "Hello world !!!"
help
Hello for LED
default y //表示编译进内核
Makefile(添加如下代码):
obj-$(CONFIG_LEDS_LEC) += lec.o //CONFIG_后面与Kconfig里名字对应,lec为驱动文件名
以上就是一个最简单的LED驱动的编写过程了,感觉有用的朋友点个赞呗,
有问题的朋友可以评论提问。