通过ioctl实现LED三盏灯点亮
驱动代码
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <linux/device.h>
#include <linux/poll.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/timer.h>
#define LED_ON _IOW('l',1,int)//开灯
#define LED_OFF _IOW('l',0,int)//关灯
//定时器对象结构体
/*struct timer_list {
struct hlist_node entry;//构成链表
unsigned long expires;//设置定时时间的变量 jiffies+CONFIG_HZ(定时1s)
void (*function)(struct timer_list *);//定时器处理函数的函数指针
u32 flags;//0缺省 新版才有的
};*/
/*leds{
core-leds{
led1=<&gpioz 5 0>;
led2=<&gpioz 6 0>;
led3=<&gpioz 7 0>;
};
extend-leds{
led1=<&gpioe 10 0>;
led2=<&gpiof 10 0>;
led3=<&gpioe 8 0>;
};
}; */
int major;
int i;
struct class *cls;
struct device *dev;
char kbuf[128] = { 0 };
struct timer_list mytimer;
struct device_node *node;
struct device_node *node1;
struct gpio_desc *gpiono0;
struct gpio_desc *gpiono1;
struct gpio_desc *gpiono2;
struct gpio_desc *gpiono10;
struct gpio_desc *gpiono11;
struct gpio_desc *gpiono12;
//定时器的调用
void mytimer_function(struct timer_list *timer)
{
//让灯的状态取反
//gpio_set_value(gpiono,!gpiod_get_value(gpiono));
//再次启用定时器
//mod_timer(timer,jiffies+HZ);
}
//设备数的节点解析,注册gpio,定时
int deviter_init(v