流水灯为添加设备节点,风扇为物理映射
test.c:
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include<string.h>
#include <sys/ioctl.h>
#define LED_ON _IOW('a',1,int)
#define LED_OFF _IOW('a',0,int)
int main(int argc, char const *argv[])
{
char buf[128]={0};
int which=1;
int fd=open("/dev/led0",O_RDWR);
if(fd<0)
{
printf("打开设备文件失败\n");
exit(-1);
}
//在终端输入数据
while(1)
{
ioctl(fd,LED_ON,&which);
sleep(1);
ioctl(fd,LED_OFF,&which);
which=2;
ioctl(fd,LED_ON,&which);
sleep(1);
ioctl(fd,LED_OFF,&which);
which=3;
ioctl(fd,LED_ON,&which);
sleep(1);
ioctl(fd,LED_OFF,&which);
which=1;
}
close(fd);
return 0;
}
mycdev.c:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/of_irq.h>
#include <linux/of_gpio.h>
#include <linux/of.h>
#define LED_ON _IOW('a',1,int)
#define LED_OFF _IOW('a',0,int)
char kbuf[128]={0};
struct cdev *cdev;
#if 0
unsigned int major=0;
#else
unsigned int major=500;
#endif
unsigned int i,minor=0;//存放次设备号
dev_t devno;//存储设备号
struct class *cls;
struct device *dev;
struct device_node *dnode;
struct device_node *dnode_led;
int irqno[3];
int gpio