混杂设备
定义:linux中把无法归类的五花八门的设备定义为混杂设备,像LED,按键等。所有的混杂设备都被分配一个主设备号10,但每个设备可选择一个单独的次设备号。 混杂设备用一个struct miscdevice结构体来描述,混杂驱动只需要调用misc_register()即可完成字符驱动的所有步骤:
#include<linux/miscdevice.h>
建一个miscdevice结构体
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &dev_fops,
};
在驱动函数初始化中注册这个混杂设备
misc_register(&misc);
驱动卸载时,注销这个设备
misc_deregister(&misc);
混杂设备miscdevice说明
miscdevice结构体
struct miscdevice {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;
};
设备注册和注销
extern int misc_register(structmiscdevice * misc);
extern int misc_deregister(structmiscdevice *misc);
在写一个LED设备驱动程序时,IO口配置放在设备初始化中;LED的控制使用IOCTL,有关GPIO操作的的函数都在
#include<mach/gpio-fns.h>
中,如
voids3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);
voids3c2410_gpio_setpin(unsigned int pin, unsigned int to);
voids3c2410_gpio_pullup(unsigned int pin, unsigned int to);
unsigned ints3c2410_gpio_getpin(unsigned int pin);
而GPIO端口定义在
#include<mach/regs-gpio.h>
中,如
S3C2410_GPBCON
S3C2410_GPBDAT
S3C2410_GPBUP