申请设备号:register_chrdev_region();
动态:alloc_chrdev_region(); 老的方法:register_chrdev();
释放设备号:unregister_chrdev_region();
字符设备初始化:cdev*my_cdev=cdev_alloc();
cdev_init();
注册:cdev_add();
设备文件自动建立:class_create(); 清理:class_destroy(); 原子操作:
atomic_inc(atomic_t *v);+1 atomic_dec(atomic_t *v);-1
atomic_sub_and_test(int i, atomic_t *v);从v-i,结果为0返回真,否则假
自旋锁:
DEFINE_SPINLOCK(mr_lock);
spin_lock (&mr_lock); //临界区
spin_unlock (&mr_lock);
读写自旋锁:
DEFINE_RWLOCK(led_rwlock); read_lock(&led_lock);
//临界区
read_unlock(&led_lock);
write_lock(&led_lock); //临界区
write_unlock(&led_lock);
信号量:
DEFINE_SEMAPHORE(name) struct semaphore sem; sema_init(&sem,count); down(&led_sema); up(&led_sema);
读写信号量:
DECLARE_RWSEM(name) ;
init_rwsem(struct rw_semaphore *sem); down_read、up_read、down_write、
up_write 互斥体:
DEFINE_MUTEX(mutexname); mutex_init(mutex); 上锁
mutex_lock(lock); 释放
mutex_unlock(lock);
注册中断服务程序:
request_irq(irq,btn_interrupt,IRQ_TYPE_FALLING,”btn”,NULL);
等待队列:
定义:static wait_queue_head_t wq; 初始化:init_waitqueue_head(&wq);
唤醒队列:wake_up();
中断处理的三种方法: softirqs, tasklet, 和work queue
软中断(softirqs)注册: open_softirq(); 触发软中断:raise_softirq(); 声明tasklet(按键中断):
静态:DECLARE_TASKLET(); 动态:tasklet_init();
tasklet:tasklet_schedule(&my_tasklet); 声明工作队列(work queue):DECLARE_WORK(); 调度:schedule(&btn_work);
时间管理:
实际时间:年月日时分秒。也叫墙上时间。 系统运行时间:自系统启动开始所经过的时间。
硬件定时器的节拍率是通过宏定义的。这个宏是HZ。
全局变量jiffies用来记录自系统启动以来产生的节拍的总数。
定义定时器:DEFINE_TIMER();
激活定时器:add_timer(struct timer_list * ); 修改定时值并且激活:mod_timer(struct timer_list *timer, unsigned long expires); 删除定时器:del_timer(struct timer_list * );
因篇幅问题不能全部显示,请点此查看更多更全内容