linux设备驱动开发详解 阅读笔记4(第二篇 驱动核心理论)

5.Linux 系统用户空间的文件编程有两种方法,即通过Linux API 和通过C 库函数

访问文件。用户空间看不到设备驱动,能看到的只有设备对应的文件,因此文件编程

即是用户空间的设备编程。

Linux 系统按照功能对文件系统的目录结构进行了良好的规划。/dev 是设备文件

的存放目录,devfs 和udev分别是Linux 2.4 设备和Linux 2.6 设备生成设备文件节点

的方法,前者运行于内核空间,后者运行于用户空间。

Linux 2.6 设备通过一系列数据结构定义了设备模型,设备模型与sysfs 文件系统

中的目录和文件存在一种对应关系,udev 可以利用sysfs 中记录的信息定义规则并提

取主次设备号动态创建/dev设备文件节点。

6.字符设备是大类设备(字符设备、块设备和网络设备)中较简单的一类设备,其驱
动程序中完成的主要工作是初始化、添加和删除cdev结构体,申请和释放设备号,以及填
file_operations结构体中的操作函数,实现file_operations结构体中的read()write()ioctl()
等函数是驱动设计的主体工作。 

7.并发和竞态广泛存在,中断屏蔽、原子操作、自旋锁和信号量都是解决并发问题

的机制。中断屏蔽很少单独被使用,原子操作只能针对整数进行,因此自旋锁和信号

量应用最为广泛。

自旋锁会导致死循环,锁定期间不允许阻塞,因此要求锁定的临界区小。信号量

允许临界区阻塞,可以适用于临界区大的情况。

读写自旋锁和读写信号量分别是放宽了条件的自旋锁和信号量,它们允许多个执

行单元对共享资源的并发读。

8.阻塞与非阻塞访问是I/O 操作的两种不同模式,前者在I/O 操作暂时不可进行

时会让进程睡眠。

在设备驱动中阻塞I/O 一般基于等待队列来实现,等待队列可用于同步驱动中事

件发生的先后顺序。使用非阻塞I/O 的应用程序也可借助轮询函数来查询设备是否能

立即被访问,用户空间调用select()和poll()接口,设备驱动提供poll()函数。设备驱动

的poll()本身不会阻塞,但是poll()和select()系统调用则会阻塞地等待文件描述符集合

中的至少一个可访问或超时。

9.

 阻塞、非阻塞I/O、异步通知的区别

异步I/O 可以使得应用程序在等待I/O 操作的同时进行其他操作。

使用信号可以实现设备驱动与用户程序之间的异步通知,总体而言,设备驱动和

用户空间要分别完成以下工作:用户空间设置文件的拥有者、FASYNC标志及捕获信

号,内核空间响应对文件的拥有者、FASYNC标志的设置,并在资源可获得时释放信

号。

Linux 2.6 内核包含对AIO 的支持为用户空间提供统一的异步I/O 接口。在AIO

中,信号和回调函数是实现内核空间对用户空间应用程序通知的两种机制.

10.Linux 的中断处理分为两个半部,顶半部处理紧急的硬件操作,底半部处理不紧

急的耗时操作。tasklet 和工作队列都是调度中断底半部的良好机制,tasklet 基于软中

断实现。内核定时器也依靠软中断实现。

内核中的延时是忙等待或者睡眠等待,为了充分利用CPU资源,使系统有更好的

吞吐性能,在对延迟时间的要求并不是很精确的情况下,睡眠等待通常是值得推荐的。


11.外设可处于CPU的内存空间和I/O空间,除X86外,嵌入式处理器一般只存在
内存空间。在Linux 系统中,为I/O 内存和I/O 端口的访问提高了一套统一的方法,
访问流程一般为“申请资源→映射→访问→去映射→释放资源”。
对于有MMU 的处理器而言,Linux 系统的内部布局比较复杂,可直接映射的物
理内存称为常规内存,超出部分为高端内存。kmalloc()和_ _get_free_pages()申请的内存
在物理上连续,而vmalloc()申请的内存在物理上不连续。
DMA 操作可能导致Cache 的不一致问题,因此,对于DMA 缓冲,应该使用
dma_alloc_coherent()等方法申请。在DMA 操作中涉及总线地址、物理地址和虚拟地
址等概念,区分这3 类地址非常重要。Linux 内核中对DMA 通道的申请和释放采用
了和中断类似的方法。


12.真实生活中的驱动往往包含platform 分层 分离 miscdevice sysfs 电源管理 固件加载等诸多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值