
Linux驱动
LPS爱玩Linux
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[LDD3速记]_中断处理
一、安装中断处理1. 申请中断int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name,原创 2013-07-08 12:50:46 · 649 阅读 · 0 评论 -
[LDD3速记]_内存分配
一、kmalloc函数原型:#include void *kmalloc(size_t size, int flags);最终总是调用get_free_pages(GFP)实现1. flags参数 常用的标志: GFP_KERNEL:运行于进程上下文,可休眠以等待一个页面(休眠时内核把缓冲区的内容刷写到硬盘,或者从一用户进程换出内存,以获取一个内存原创 2013-07-04 10:19:33 · 509 阅读 · 0 评论 -
[LDD3速记]_内核的数据类型
一、内核的数据类型1. 标准C语言类型 内核内存地址通常是unsigned long,指针和long整形大小总是相等的2 长度明确的类型 用途:匹配预定义的二进制结构;与用户空间通信;在结构体中插入填白(padding)字段来对齐数据 如果一个用户空间需要使用这些类型,可以在名字前面加上两个下划线作为前缀(u32)原创 2013-07-08 16:56:24 · 504 阅读 · 0 评论 -
[LDD3速记]_PCI驱动程序
总线由电气接口和编程接口构成 PCI(Peripheral Component Interconnect,外围设备互联)一、PCI接口目标:获得在计算机和外设之间传输数据时更好的性能,尽可能的平台无关,简化往系统中添加和删除外设的工作原创 2013-07-10 16:17:03 · 753 阅读 · 0 评论 -
[LDD3速记]_内核定时器
一、用途用于在未来某个特定的时间点(基于时钟滴答)调度执行某个函数,同时在时间点到来前不会阻塞当前进程。eg:轮询设备状态、关闭软驱马达二、特性1. 是一个数据结构2. 任务可重新运行(自己注册)3. 只会在注册自己的处理器上运行4. 异步执行,故在单处理器系统上,是竞态的潜在来源(定时器访问的数据结构需进行并发访问保护:原子变量或自旋锁)三、接原创 2013-07-02 17:51:51 · 516 阅读 · 0 评论 -
[LDD3速记]_tasklet、工作队列、共享队列
tasklet一、用途 中断管理二、特性 1. 与内核定时器相比: 相同点:中断期间运行(在“软件中断”上下文以原子的模式执行)、在调度它的CPU上运行、接收一个ulong参数 不同点:不能在某个给定的时间定时执行 2. 可被禁止或重新调用;只有启动和禁止的次数相同时tasklet才会t被执行原创 2013-07-03 14:36:52 · 621 阅读 · 0 评论 -
[LDD3速记]_per-CPU变量
一、特性 当建立一个per-CPU变量时,系统的每个处理器都会有改变量的特有副本 对per-CPU的访问无需锁定 可以保存在高速缓存 eg.:网络子系统(的计数器)二、接口#include DEFINE_PER_CPU(type, name);/* 编译期间创建per-CPU变量 */DE原创 2013-07-04 10:58:30 · 648 阅读 · 0 评论 -
[LDD3速记]_与硬件通信(I/O端口和I/O内存)
一、I/O端口和I/O内存 ISA设备普遍使用I/O端口,而大多数PCI设备则把寄存器映射到某个内存地址区段1. I/O寄存器和常规内存 I/O寄存器和RAM的最主要区别:I/O操作具有边际效应而内存操作没有 访问I/O寄存器时需避免由于CPU或编译器不恰当的优化(内存访问顺序)而改变预期的动作,因此驱动程序必须确保不使用高速缓原创 2013-07-05 11:32:17 · 717 阅读 · 0 评论