Linux设备驱动:PCI、DMA与网络驱动详解
1. PCI和ISA接口相关
1.1 PCI驱动的DMA接口
对于需要编写可移植PCI驱动的开发者,示例代码中的 sysdep.h 包含了一个简单的2.4 DMA接口实现,可在较旧的内核上使用。
1.2 ISA接口
自Linux 2.0以来,ISA接口几乎没有变化。毕竟,ISA是一种古老的架构,无需进行大量更新。唯一的新增内容是在2.2内核中引入了DMA自旋锁;在此之前的内核中,无需防止对DMA控制器的冲突访问。这些功能的版本已在 sysdep.h 中定义,它们会禁用和恢复中断,但不执行其他功能。
2. 内存处理相关符号
2.1 <linux/mm.h> 头文件
该头文件对所有与内存管理相关的函数和结构进行了原型声明和定义。以下是一些重要的函数和宏:
#include <linux/mm.h>
// 此函数是mmap的核心,将从phys_addr开始的size字节物理地址映射到虚拟地址virt_add,虚拟空间的保护位由prot指定
int remap_page_range(unsigned long virt_add, unsigned long phys_add, unsigned long size, pgprot_t prot);
// 这些宏用于在内核逻辑地址和其关联的内存映射条目之间进行转换,page_address仅适用于低内存页面或已显式
超级会员免费看
订阅专栏 解锁全文
549

被折叠的 条评论
为什么被折叠?



