四.驱动框架入门之LED(中)

接上篇:https://blog.csdn.net/wangweijundeqq/article/details/101696862目录五.基于驱动框架写led驱动15.1、分析5.2、动手写led驱动模块六.基于驱动框架写led驱动26.1、代码实践七.基于驱动框架写led驱动37.1、在驱动中将4个LED分开7.2、和leds-s3c24xx.c的不同7...
摘要由CSDN通过智能技术生成

接上篇:https://blog.csdn.net/wangweijundeqq/article/details/101696862

目录

五.基于驱动框架写led驱动1

5.1、分析

5.2、动手写led驱动模块

六.基于驱动框架写led驱动2

6.1、代码实践

七.基于驱动框架写led驱动3

7.1、在驱动中将4个LED分开

7.2、和leds-s3c24xx.c的不同

7.3、gpiolib引入


五.基于驱动框架写led驱动1

5.1、分析

(1)参考哪里?  drivers/leds/leds-s3c24xx.c

(2)关键点:led_classdev_register

5.2、动手写led驱动模块

从E:\Linux\4.LinuxDriver\3.CharDevSenior\4.6复制文件到..\4.LedDriver\4.1中

#include <linux/leds.h>
static struct led_classdev mydev;//定义结构体变量

static void s5pv210_led_set(struct led_classdev *led_cdev,
enum led_brightness value)
{	
		printk(KERN_INFO "s5pv210_led_set\n");	
}

static int __init s5pv210_led_init(void)
{

//用户insmod安装驱动模块时会调用该函数
//该函数的主要任务就是去使用led驱动框架提供的设备注册函数注册一个设备	
	
	mydev.name = "myled";
	mydev.brightness = 0;//led的亮灭状态
	mydev.brightness_set = s5pv210_led_set;
	
	int ret=-1;
	ret = led_classdev_register(NULL, &mydev);
	if (ret < 0) {
		printk(KERN_ERR "led_classdev_register failed\n");
		return ret;
	}
		return 0;	
}

static void __exit s5pv210_led_exit(void)
{
	led_classdev_unregister(&mydev);
}
module_init(s5pv210_led_init);
module_exit(s5pv210_led_exit);

// MODULE_xxx这种宏作用是用来添加模块描述信息
MODULE_LICENSE("GPL");// 描述模块的许可证
MODULE_AUTHOR("aliya <422582774@qq.com>");// 描述模块的作者
MODULE_DESCRIPTION("s5pv210 led driver");//描述模块的介绍信息
MODULE_ALIAS("s5pv210_led");//描述模块的别名信息

修改对应的 Makefile 文件中的下面这一行内容:

然后 make 编译&&&make cp

假设下该实验预期现象如何?

我们进入 driver_test 文件中安装模块。

我们装载模块后应该会出现什么现象呢? 装载模块后就会执行s5pv210_led_init

led_classdev_register

device_create

执行 device_create 函数后, 应该在 ls /sys/class/leds/目录中再创建一个目录, 目录的名字就叫我们注册的名字 myled。

我们装载模块进行验证:进入到新生成的文件中, 文件中有新的内容生成

分析:我们通过函数 device_create注册了 leds_class里面的一个设备,那么这个 leds_class

类中包含什么东西呢? 这里设备类里面都有一个 led_class_attrs 属性。

我们进入这个属性:

里面有两个属性 brightness 和 max_brightness

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值