RK系列LED驱动编程(简易)

news/2024/12/21 22:33:08/

一.

  在主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驱动的编写过程了,感觉有用的朋友点个赞呗,

有问题的朋友可以评论提问。


http://www.ppmy.cn/news/364242.html

相关文章

驱动程序开发:新字符设备驱动之LED点灯

驱动程序开发&#xff1a;新字符设备驱动之LED点灯 newchrled.c /** 根据linux内核的程序查找所使用函数的对应头文件。*/ #include <linux/module.h> // MODULE_LICENSE&#xff0c;MODULE_AUTHOR #include <linux/init.h> // module_init&#xff0c;module_e…

Linux驱动开发 - LED驱动

驱动程序 #include <linux/types.h> #include <linux/kernel.h> #include <linux/delay.h> #include <linux/ide.h> #include <linux/init.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/gpio.h> …

Linux驱动_新LED驱动

一、新字符驱动原理 1、以前的字符驱动使用register_chedev注册字符设备&#xff0c;需要手动指定主设备号 2、新版字符型驱动有两种方式注册字符设备&#xff1a;alloc_chrdev_region(自动申请设备号&#xff09;和register_chrdev_region(手动申请主设备号)。两种申请方式的注…

一、LED驱动电路

该专栏笔记整理于哔哩哔哩up主 硬件工程师桥 &#xff0c;个人感觉up主视频质量还是很高的&#xff0c;对硬件感兴趣的小伙伴可以戳蓝字关注一波~ 文档中原理图部分&#xff08;不包含对原视频截图中涉及的原理图&#xff09;统一使用 立创EDA 进行绘制 同时&#xff0c;由于个…

linux设备驱动--LED驱动

linux设备驱动--LED驱动 最近正在学习设备驱动开发&#xff0c;因此打算写一个系列博客&#xff0c;即是对自己学习的一个总结&#xff0c;也是对自己的一个督促&#xff0c;有不对&#xff0c;不足&#xff0c;需要改正的地方还望大家指出&#xff0c;而且希望结识志同道合的朋…

【立创开源】RY3730-带充电的恒流驱动LED照明灯

如题所示&#xff0c;作者为了把手上的RY3730恒流驱动芯片和IP2312锂电池充电芯片用完&#xff0c;就做了这么一个板子&#xff0c;甚至顺便把之前打的亚克力板也用完了( 开源地址 RY3730-带充电的恒流驱动LED照明灯 - 嘉立创EDA开源硬件平台 嘉立创EDA开源硬件平台&#xff…

LED驱动程序--可拓展的LED驱动程序

LED驱动程序–可拓展的LED驱动程序 一.把驱动拆分成通用的框架&#xff08;leddrv.c&#xff09;&#xff0c;具体的硬件操作&#xff08;board_X.c&#xff09; 实现一个通用的框架leddrv.c和 具体的硬件操作。想要操作那个硬件就将相应的框架和硬件操作一起编译成对应的驱动…

i.MX 6ULL 驱动开发 五:LED 驱动

一、原理分析 i.MX6ULL裸机开发 一&#xff1a;LED_lqonlylove的博客-CSDN博客 二、pinctrl 子系统和gpio子系统基本概念 Linux 驱动开发 二十一&#xff1a;pinctrl子系统和gpio子系统基本概念_lqonlylove的博客-CSDN博客_设备树gpio 三、linux 源码对于 pinctrl 子系统的…