/LGC图形渲染/Linux Driver Development Overview

400 篇文章 3 订阅
147 篇文章 0 订阅
Linux Driver Development Overview
作者: 刘鹏
日期: 2008-12-27
本文对 Linux 设备驱动开发涉及的知识点做了一一梳理,通过阅读这个提纲读者可以很快了解 Linux 设备驱动程序的整体结构及其关键技术。
当一个 Linux 设备启动时,内核发生了什么
  1. 总线上有个信号
  2. 查找设备列表,是否有此设备
  3. 若有,则装载相应的驱动
  4. 若没有,则 probe 相应的驱动
  5. 加载驱动后进行初始化,设备进入 ready 状态
驱动程序基本结构
  • 头文件
  • 版本
  • init/exit
设备号
  • Major number:一个 major number 对应一个 driver (一个 driver 可能控制多个设备)
  • Minor number: 一个 minor number 对应一个 driver 控制的多个设备中的一个 (若是有多个的话)
内核怎样调试
  • printk:打印变量值;
  • oops info:使用 dmesg 命令或查看 /var/log/messages 文件
  • kdb:调试工具
并发与同步
  • mutex/semaphore : 若得不到,则引起调用者睡眠,把进程从运行队列拖出去; 任何时刻只有一个保持者;适用于保持时间较长的情况;
  • spinlock : 若自旋锁已被别人保持,调用者一直循环查看锁是否可得,不会引起调用者睡眠;任何时刻只有一个保持者;适用于保持时间短的情况;
  • atom 数据类型:原子数据类型
中断
  • 前半步 top half: 即 interrupt handler,用于完成时间短的操作;
  • 后半步 bottom half:用于时间长的操作。
  • 与Linux中断息息相关的一个重要概念是Linux中断分为两个半部:上半部 (tophalf)和下半部(bottom half)。上半部的功能是"登记中断",当一个 中断发生时,它进行相应地硬件读写后就把中断例程的下半部挂到该设备的 下半部执行队列中去。因此,上半部执行的速度就会很快,可以服务更多的 中断请求。但是,仅有"登记中断"是远远不够的,因为中断的事件可能很复 杂。因此,Linux引入了一个下半部,来完成中断事件的绝大多数使命。下半 部和上半部最大的不同是下半部是可中断的,而上半部是不可中断的,下半 部几乎做了中断处理程序所有的事情,而且可以被新的中断打断!下半部则 相对来说并不是非常紧急的,通常还是比较耗时的,因此由系统自行安排运 行时机,不在中断服务上下文中执行;2
  • Linux实现下半部的机制主要有tasklet和工作队列。
内存分配
  • kmalloc
  • vmalloc, 分配较大的内存
  • get_free_page
  • look aside cache
操作硬件
  • I/O 端口
  • I/O 内存
mmap

将设备内存映射到进程虚拟地址空间,直接访问

DMA (Direct Memory Access)
  • 不经过 CPU ,直接进行数据传输
Reference
  1. http://linux.chinaunix.net/bbs/thread-904034-1-6.html
  2. http://blog.chinaunix.net/u2/62910/showart_492765.html
  3. Linux Device Driver, 3rd Edition.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值