Linux设备驱动
文章平均质量分 74
LifeProgramming
这个作者很懒,什么都没留下…
展开
-
Linux内核数据结构(一)
链表,队列,映射,二叉树等数据结构是程序设计中常用的数据结构。为了统一这些数据结构的操作接口,Linux内核开发者实现了一些标准的操作接口及实现(使用了大量的GNU扩展特性),以达到代码重用,开发者应该尽量使用这些标准接口,避免实现自己的再创造,虽然那样看起来很酷,很有劲。有关链表传统的双向链表实现方法是在链表元素中加入两个指针,然后用这些指针来构造双向链表。如下所示struct node{ value_type value; struct element *prev; struct el原创 2011-01-05 11:55:00 · 2083 阅读 · 0 评论 -
内核中的同步问题
内核中的同步问题是一个很复杂,而且经常让人感到崩溃的问题,即使是应用程序,多线程也是一个复杂的问题。一般的同步方法包括有锁机制,互斥量,信号量等。而各种应用场景下的方法的选择,尤其是涉及不同的上下文和不同的体系结构时,这个问题会更加复杂。锁和互斥量是保护临界区的两种基本方法。锁保证在同一时刻只有一个线程能够进入临界区,其他线程只有在这个线程退出后在能进入临界区。其使用方法很简单,#include spinlock_t lock = SPIN_LOCK_UNLOCK; /* 也可以初始成SPIN_LOCK_L原创 2011-01-05 10:51:00 · 856 阅读 · 0 评论 -
Linux内核数据结构(二)
队列队列也是一种链表,只是针对队列的操作只能是从队尾插入,从队首删除。在操作系统中有很多这种数据结构的用武之地,一般是一个进程产生数据,另外一个进程处理数据,如Linux中网络数据包的处理,进程之间使用管道通信等,都是这种情况。Linux内核中队列称作kfifo,其对应的源文件时kernel/kfifo.c,中包含了其声明。kfifo提供了两种操作,入队(in)和出队(out),为了记录下一次出队或者入队的位置,kfifo维护了两个变量in offset和out offset。入队操作会将数据拷贝至队列中,原创 2011-01-05 16:27:00 · 2700 阅读 · 0 评论 -
设备模型和模块
2.6版本的内核对于设备驱动进行了很大的改动,而且这些改动现在还在继续。原创 2011-01-06 00:54:00 · 923 阅读 · 0 评论 -
内核中的同步问题(二)
读写锁读者和写者问题是一个常见的同步问题。尤其在操作系统和驱动中经常有这种问题。中断处理程序改写数据,用户进程读取数据就是这种情况。这种情况简单来说就是,可以同时读,但不能同时写,也不能读和写同时进行。内核实现了读写锁来处理这种情况。rwlock_t rwlock = RW_LOCK_UNLOCKED;Process Reader:read_lock(&rwlock);/* Critical Section */read_unlock(&rwlock);Process Writer:write_lock(&原创 2011-01-07 14:16:00 · 726 阅读 · 0 评论