Linux驱动程序开发知识点总结

需积分: 5 6 下载量 55 浏览量 更新于2024-09-11 1 收藏 159KB DOC 举报
Linux 驱动知识点总结 Linux 驱动开发是指在 Linux 操作系统下编写设备驱动程序的过程。设备驱动程序是指控制计算机硬件设备的软件模块,它们使得操作系统能够与硬件设备进行交互。Linux 驱动开发需要了解 Linux 内核架构、设备驱动模型、 DMA、中断机制等知识。 一、DMA 和中断 DMA(Direct Memory Access)是一种无需 CPU 参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用 DMA 可以使系统 CPU 从实际的 I/O 数据传输过程中摆脱出来,从而大大提高系统的吞吐率。中断是指 CPU 在执行程序的过程中,出现了某些突发事件时 CPU 必须暂停执行当前的程序,转去处理突发事件,处理完毕后 CPU 又返回源程序被中断的位置并继续执行。因此,DMA 和中断的区别就在于 DMA 不需要 CPU 参与,而中断是需要 CPU 参与。 二、主设备号和次设备号 主设备号标识设备对应的驱动程序。次设备号由内核使用,用于正确确定设备文件所指的设备。依赖于驱动程序的编写方式,我们可以通过次设备号获得一个指向内核设备的直接指针,也可将此设备号当作设备本地数组的索引。 三、北桥和南桥 在嵌入式系统中,所谓的北桥指的是母板上 CPU 和内存等高速核心部分的控制和通讯桥接芯片,而南桥则指和扩展总线和 IO 的控制和通讯桥接芯片。所谓南北的涵义主要体现在其芯片组在母板上的位置(相对于 CPU)——上北下南。 四、内存申请函数 Linux 内核里面,内存申请有多个函数,包括 kmalloc、vmalloc、get_free_page、get_free_pages 等。kmalloc 函数申请的内存可以任意大小,但是 kmalloc 最大只能开辟 128k-16,16 个字节是被页描述符结构占用了。Vmalloc 分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于 DMA。get_free_page 或 get_free_pages 是申请的内存以页的大小为基准,大小为页的整数倍。get_dma_pages, 这个函数除了以上功能外还能支持 DMA 传输。 五、IRQ 和 FIQ IRQ 是普通中断,FIQ 是快速中断。在 ARM 体系中,对于快速中断模式,有 8 个独立的寄存器,转换模式时无需将数据保存起来,而 IRQ 则不能,这样 FIQ 的速度就大大地提高了。 六、驱动中的并发、互斥控制 在驱动程序中,需要有并发、互斥的控制,以避免多个进程同时访问同一个设备资源,导致数据不一致或其他问题。可以使用互斥锁、信号量、条件变量等机制来实现并发、互斥控制。例如,在驱动程序中可以使用 spinlock 来保护共享资源,以避免多个进程同时访问同一个设备资源。 Linux 驱动开发需要了解 Linux 内核架构、设备驱动模型、DMA、中断机制、内存申请函数、IRQ 和 FIQ 等知识,并且需要实现并发、互斥控制来避免多个进程同时访问同一个设备资源。