![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
king523103
这个作者很懒,什么都没留下…
展开
-
Linux驱动之make menuconfig make uImage Kconfig
make menuconfig执行过程执行scripts/kconfig/mconf,并解析arch/mips/Kconfig文件(若是x86平台,则是arch/i386/Kconfig)生成配置菜单项加载顶层目录中的.config文件,对配置菜单项进行设置。完成后,更新.config文件,同时生成include/linux/autoconf.h文件,此文件会被include/linu原创 2015-01-29 14:50:17 · 858 阅读 · 0 评论 -
Linux驱动之等待队列和poll使用
等待队列一般也用于数据的同步,数据结构:struct __wait_queue { unsigned int flags;#define WQ_FLAG_EXCLUSIVE 0x01 void *private; wait_queue_func_t func; struct list_head task_list;};声明:DECLARE_WAIT_QUEUE_HE原创 2015-02-06 15:17:14 · 547 阅读 · 0 评论 -
Linux驱动之原子变量
使用原子变量可以避免竞争问题。其实,很多的同步技术都使用了原子变量,例如自旋锁。它的名称是 atomic_t, 实际上是一个int类型。不过由于某些处理器上这种数据类型的工作方式有些限制,因此不能使用完整的整数范围(只能使用24位)内核提供了一系列的API,基本形式都是atomic_xxx()这些操作都非常快,原因是他们被编译成单个机器指令。以atomic_inc接口来说:原创 2015-02-12 17:31:05 · 1000 阅读 · 0 评论 -
Linux驱动之自旋锁、读写自旋锁
自旋锁:自旋锁实际上是一种忙等待,只有SMP或者支持抢占内核支持。A 定义:typedef struct { raw_spinlock_t raw_lock;#ifdef CONFIG_GENERIC_LOCKBREAK unsigned int break_lock;#endif#ifdef CONFIG_DEBUG_SPINLOCK unsigned int mag原创 2015-02-05 14:55:18 · 728 阅读 · 0 评论 -
Linux驱动之顺序锁
顺序锁是一种轻量级锁,一般用于读多、写少。当写时总能获取到锁,读时需要忙等待直到写操作结束。typedef struct { unsigned sequence; spinlock_t lock;} seqlock_t;声明:seqlock_t seq=SEQLOCK_UNLOCKED;DEFINE_SEQLOCK(seq);seqlock_t seq;seqlock_原创 2015-02-05 15:34:15 · 639 阅读 · 0 评论 -
Linux驱动之完成变量
完成变量:/** * struct completion - structure used to maintain state for a "completion" * * This is the opaque structure used to maintain the state for a "completion". * Completions currently use a原创 2015-02-12 16:28:12 · 1213 阅读 · 0 评论 -
Linux驱动之字符设备
Linux将所有的设备当作一个文件,为了达到这个目的,内核提供了一个结构体原创 2015-02-02 13:36:57 · 389 阅读 · 0 评论 -
Linux驱动之互斥锁
互斥锁是为了替代信号量,修改于2.6.10-2.6.22。参考:http://blog.chinaunix.net/uid-26023319-id-2980285.html描述:/* * Simple, straightforward mutexes with strict semantics: * * - only one task can hold the mutex at a原创 2015-02-09 17:12:18 · 1044 阅读 · 0 评论 -
Linux驱动之TTY(一):概念
参考:http://blog.csdn.net/liaoxinmeng/article/details/5004743TTY(TeleTYpe,电传打字),主要有以下几个概念:1、串行终端 /dev/ttyS0 这个是具体的设备,像Windows的COM0,COM1。和USB这样的接口概念差不多。2、控制台终端 /dev/tty0-> /dev原创 2015-02-09 19:27:11 · 776 阅读 · 0 评论 -
Linux驱动之信号量、读写信号量
信号量:P/V原语P:如果信号量>0,递减信号量,操作继续,否则睡眠等待信号量>0V:递增信号量,若递增的信号量>0,则唤醒进程/* Please don't access any members of this structure directly */struct semaphore { spinlock_t lock; unsigned int count;原创 2015-02-05 14:56:27 · 704 阅读 · 0 评论 -
Linux驱动之大内核锁
参考:http://blog.csdn.net/qinzhonghello/article/details/3564984大内核锁是一个全局的自旋锁持有锁时,可以休眠,但是不安全(因为休眠时,内核会自动释放全局锁,唤醒时会重新获取)一般用户保护代码而不是数据转载 2015-02-05 15:07:18 · 425 阅读 · 0 评论 -
Linux驱动之中断
一、中断注册参考:http://blog.csdn.net/droidphone/article/details/7445825中断系统由3部分组成:中断源、中断控制器、CPU。 中断源可以是CPU芯片外界输入管脚的电平变化(如GPIO),也可以是内部产生(如DMA中断)中断控制器一般需要包括:中断使能控制(用于中断开关)、中断状态(用于中断查看)、中断优先级(用于中断处理排序)原创 2015-02-04 16:43:24 · 473 阅读 · 0 评论 -
Linux驱动之定时器和延时
内核定时器在时钟中断的下半段执行。每个定时器的使用下面数据结构描述。struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; struct tvec_base *base;#ifdef CONFIG原创 2015-02-04 15:04:17 · 1297 阅读 · 0 评论 -
Linux驱动之tasklets和workqueue
tasklet是一个数据结构它执导内核在稍候的空闲时间(不确定) 使用用户定义的参数,执行用户定义的函数由内核线程软中断执行调度,因此不能使用sleep只能运行在一个cpu上数据结构:struct tasklet_struct{ struct tasklet_struct *next; unsigned long state; atomic_t count; void原创 2015-02-04 14:17:25 · 437 阅读 · 0 评论