常用到的函数(持续更新……)

1、 register_chrdev()

用法:int  = register_chrdev(major ,"abc",const struct file_operations *fops)

unregister_chrdev(major, "abc");   

说明:major是注册的主设备号,为0时自动分配,返回值为主设备号,abc为设备名,fops为相应的操作

2、class_creat和device_creat

用法:static struct class *cls         cls=class_create(THIS_MODULE, "name");

          static struct class_device * cls_dev   cls_dev=device(cls,NULL, MKDEV(major, 0), NULL, "xyz")

           device_destroy(cls,MKDEV(major,0));

  class_destroy(cls);

说明:device_creat函数和以前的版本不一样,销毁函数的参数也不一样,用时注意。

3、ioremap

用法:volatile unsigned long *gpx  gpx = (volatile unsigned long *)ioremap(0x56000010, 16);

          iounmap(gpx);   

说明:gpx为0x56000010的虚拟地址

4、注册中断处理函数request_irq()

用法:int request_irq(unsigned int irq, irq_hander_t handler,unsigned long irqflags, const char *devname,void *dev_id)

free_irq(irq, *dev_t)

参数说明:irq为中断号,可以为IRQ_EINT0~,

hander为中断处理函数,它的用法:

static irqreturn_t buttons_irq(int irq, void *dev_id)

{    return IRQ_RETVAL(IRQ_HANDLED)    }

可以在dev_id内包含中断的信息

irqflags为中断的类型,IRQ_TYPE_EDGE_RISING(上升沿触发)       IRQ_TYPE_EDGE_FALLING(下降沿触发)

   IRQ_TYPE_EDGE_BOTH(双边触发)

   IRQ_TYPE_LEVEL_LOW(低电平触发)

   IRQ_TYPE_LEVEL_HIGH(高电平触发)

dev_id提供一些中断的信息,在中断处理函数内部使用,卸载释放中断时也用此。

5、等待队列:

定义队列:wait_quene_head_t   wq;

初始化:init_waitquene_head(wait_quene_head_t  *q)

或者直接定义并初始化:DECLARE_WAIT_QUENE_HEAD(  wq  )

等待:wait_event_interruptible(wq,condition)  信号或者condition为真都能使它唤醒,

唤醒:void wake_up (wait_quene_head_t  *q)

你可能感兴趣的:(struct,Module,File,null,Class)