目录
点灯要求:
1)分部实现注册字符设备驱动
2)自动创建设备节点
3)通过结构体对led灯地址进行映射
4)次设备号完成私有数据传参
头文件:
#ifndef __ZY1_H_
#define __ZY1_H_
#define PHY_GPIOE 0x50006000
#define PHY_GPIOF 0x50007000
#define PHY_RCC 0x50000A28
typedef struct{
volatile unsigned int MODER;
volatile unsigned int OTYPER;
volatile unsigned int OSPEEDR;
volatile unsigned int PUPDR;
volatile unsigned int IDR;
volatile unsigned int ODR;
}gpio_t;
typedef enum{
LED1,
LED2,
LED3
}led_t;
#endif
源文件:
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/io.h>
#include <linux/device.h>
#include <linux/slab.h>
#include "zy1.h"
#define CNAME "zy1"
struct class* cls;
struct device* dev;
struct cdev *cdev;
#if 1
unsigned int major = 0;//动态申请设备号
#else
unsigned int major = 500; //静态指定设备号
#endif
int minor = 0;
const int count = 3;
dev_t devno;
volatile unsigned int* RCC;
volatile gpio_t* GPIOE;
volatile gpio_t* GPIOF;
int mycdev_open(struct inode *inode,struct file *file)
{
int node;
node=MINOR(inode->i_rdev);
file->private_data=(void*)node;
return 0;
};
ssize_t mycdev_write(struct file *file,const char __use