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 · 604 阅读 · 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 · 451 阅读 · 0 评论 -
[LDD3速记]_内核的数据类型
一、内核的数据类型 1. 标准C语言类型 内核内存地址通常是unsigned long,指针和long整形大小总是相等的 2 长度明确的类型 用途:匹配预定义的二进制结构;与用户空间通信;在结构体中插入填白(padding)字段来对齐数据 如果一个用户空间需要使用这些类型,可以在名字前面加上两个下划线作为前缀(u32)原创 2013-07-08 16:56:24 · 460 阅读 · 0 评论 -
[LDD3速记]_PCI驱动程序
总线由电气接口和编程接口构成 PCI(Peripheral Component Interconnect,外围设备互联) 一、PCI接口 目标:获得在计算机和外设之间传输数据时更好的性能,尽可能的平台无关,简化往系统中添加和删除外设的工作原创 2013-07-10 16:17:03 · 692 阅读 · 0 评论 -
[LDD3速记]_内核定时器
一、用途 用于在未来某个特定的时间点(基于时钟滴答)调度执行某个函数,同时在时间点到来前不会阻塞当前进程。 eg:轮询设备状态、关闭软驱马达 二、特性 1. 是一个数据结构 2. 任务可重新运行(自己注册) 3. 只会在注册自己的处理器上运行 4. 异步执行,故在单处理器系统上,是竞态的潜在来源(定时器访问的数据结构需进行并发访问保护:原子变量或自旋锁) 三、接原创 2013-07-02 17:51:51 · 474 阅读 · 0 评论 -
[LDD3速记]_tasklet、工作队列、共享队列
tasklet 一、用途 中断管理 二、特性 1. 与内核定时器相比: 相同点:中断期间运行(在“软件中断”上下文以原子的模式执行)、在调度它的CPU上运行、接收一个ulong参数 不同点:不能在某个给定的时间定时执行 2. 可被禁止或重新调用;只有启动和禁止的次数相同时tasklet才会t被执行原创 2013-07-03 14:36:52 · 566 阅读 · 0 评论 -
[LDD3速记]_per-CPU变量
一、特性 当建立一个per-CPU变量时,系统的每个处理器都会有改变量的特有副本 对per-CPU的访问无需锁定 可以保存在高速缓存 eg.:网络子系统(的计数器) 二、接口 #include DEFINE_PER_CPU(type, name); /* 编译期间创建per-CPU变量 */ DE原创 2013-07-04 10:58:30 · 593 阅读 · 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 · 642 阅读 · 0 评论