《精通linux设备驱动程序开发》——PCMCIA和CF
一、PCMCIA和CF是什么
1、PCMCIA是16位数据传输接口规范。CF卡比PCMCIA要小,但和PCMCIA相兼容。
1)、CF卡有50个引脚,但使用无源的CF_PCMCIA转换的适配器,可插入笔记本的68针的PCMCIA槽中。
2)、PCMCIA和CF被限制在笔记本和手持式设备中,没有进入台式机和高端的机器中。
2、PCMCIA规范修订后,现在支持高速的32位的CardBus卡。术语PC卡也常用来纸袋PCMCIA或CardBus设备。CardBus近似于PCI总线,因此内核将对CardBus设备的支持从
PCMCIA设备的支持从pcmcia层移到了PCI层。
3、PC卡有三种形式,其厚度依次增加:Type I(3.3mm),Type II(5mm),Type III(10.5mm)。
4、笔记本计算机上的PCMCIA(P180 图9-1)和嵌入式系统上的PCMCIA(P180 图9-2)。
二、Linux-PCMCIA子系统
1、Linux对PCMCIA的支持包括基于Intel的笔记本计算机,以及ARM、MIPS和PowerPC这些体系架构。
2、PCMCIA子系统组成包括:PCMCIA主机控制器驱动程序,各种卡的客户驱动程序,辅助热插拔的守护程序,用户模式,以及和以上部分所有模块交互的卡服务模块。
3、Linux-PCMCIA子系统(P181 图9-3)。
1)、主机控制器驱动程序,实现了和PCMCIA主机控制器通信的底层例程。
2)、PCMCIA客户驱动程序,用于相应插座事件。
3)、PCMCIA核心,为主机控制器驱动程序和客户驱动程序提供服务。
4)、驱动程序服务模块(ds),给客户驱动程序提供注册接口和总线服务。
5)、pcmciautils包,包括一些用于控制PCMCIA插座的状态并在不同的卡配置机制间加以选择的工具。
4、PCMCIA驱动程序组件与PC硬件之间的关联。(P181 图9-4)
三、主机控制器驱动程序
1、通用卡驱动程序负责处理由卡函数产生的中断,而主机控制器驱动程序负责处理由诸如卡插入和拔出等事件所触发的、总线特定的中断。
四、PCMCIA核心
1、PCMCIA核心的主要作用就是提供PCMCIA卡服务。它即支持客户驱动程序,又支持主机控制驱动程序。包括用于轮询插座相关事件的内核线程pccardd。
2、PCMCIA核心的另一组件是用于操作CIS的库。CIS是PCMCIA卡的一部分。PCMCIA/CF存储空间分为两部分:属性存储空间和普通存储空间。属性存储空间包括CIS和卡配
置寄存器。普通存储空间用于存储磁盘数据。
五、驱动程序服务
1、驱动程序服务提供了基础设施包括如下部分:
1)、捕获由pccardd内核线程分发的事件警告的处理程序。
2)、负责和内核的总线核心通信的层。
3)、服务例程。
六、客户驱动程序
一)、数据结构
1、PCMCIA设备由pcmcia_device_id结构体所标识,定义于include/linux/mod devicetable.h文件中:
struct pcmcia_device_id {
/* . . . */
__u16 manf_id;
__u16 card_id;
__u8 func_id;
/* . . . */
};
1)、manf_id、card_id和func_id分别保存PCMCIA卡制造商的ID、卡ID以及功能ID。
2)、PCMCIA核心提供了宏PCMCIA_DEVICE_MANF_CARD(),用于从提供制造商和卡ID创建pcmcia_device_id结构。
3)、宏PCMCIA_DEVICE_TABLE()标记了在模块映像中支持的pcmcia_device_ids,以便在卡插入槽、pcmcia子系统从CIS空间收集匹配的制造商/卡/功能ID时,能够根据
需要加载模块。
4)、PCMCIA、PCI和USB的设备ID与热插拔方法(P184 表9-1)
2、PCMCIA客户驱动程序需要和它们的pcmcia_device_id表相关联,pcmcia_device_id中有probe()和remove()方法,这种关联是通过pcmcia_driver结构来获得的:
struct pcmcia_driver {
int (*probe)(struct pcmcia_device *dev);
void (*remove)(struct pcmcia_device *dev);
/* . . . */
struct pcmcia_device_id *id_table;
/* . . . */
};
3、pcmcia_device结构代表一个PCMCIA设备,定义于driver/pcmcia/ds.h文件中:
struct pcmcia_device {
/* . . . */
io_req_t io;
irq_req_t irq;
config_reg_t conf;
/* . . . */
struct device dev;
/* . . . */
};
4、CIS操作例程使用定义于include/pcmcia/cispl.h文件中的tuple_t结构体保存CIS信息单元。
typedef struct tuple_t {
/* . . . */
cisdata_t TupleCode;
/* . . . */
cisdata_t DesiredTuple;
/* . . . */
cisdata_t *TupleData;
};
5、CIS包含针对卡所支持的每种配置的配置表入口.cis_cftable_entry定义于include/pcmcia/cistpl.h文件中,保存了此入口:
typedef struct cistpl_cftable_entry_t {
/* . . . */
cistpl_power_t vcc, vpp1, vpp2;
cistpl_io_t irq;
cistpl_irq_t irq;
cistpl_mem_t mem;
/* . . . */
};
6、cistparse_t也定义在include/pcmcia.cistpl.h文件中,保存PCMCIA核心部分分析过的元组:
typedef struct cisparse_t {
/* . . . */
cistpl_manfid_t manfid;
/* . . . */
cistpl_cftable_entry_t cftable_entry;
二)、设备实例:PCMCIA卡
1、代码清单9-1:注册客户驱动程序。
2、代码清单9-2:配置通用设备驱动程序。
七、将零件组装在一起
八、PCMCIA存储
1、现在的PCMCIA/CF存储支持吉字节的容量。存储卡多种多样:
1)、迷你IDE硬盘驱动器或微盘。
2)、模拟IDE的固定存储卡。
3)、使用内存的存储卡,但不能模拟IDE。
九、串行PCMCIA
1、使用串行传输的带PCMCIA/CF卡的网络。(P190 图9-5)
十、调试
《精通linux设备驱动程序开发》——PCMCIA和CF相关推荐
- 《精通Linux设备驱动程序开发》——1.5 Linux发行版
本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.5节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...
- 《精通Linux设备驱动程序开发》——1.7 编译内核
本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.7节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...
- 《精通Linux设备驱动程序开发》——网络接口卡
一.驱动程序数据结构 一).简介 1.在为一个NIC写设备驱动程序时,必须操作3类数据结构 1).形成网络协议栈构造块的数据结构.套接字缓冲区,即定义在include/linux/sk_buff.h文 ...
- 《精通linux设备驱动程序开发》——视频驱动程序
一.显示架构 1.PC系统的显示连接.(P247 图12-1) 2.VGA(视频图形阵列)是IBM提出的早期显示标准.VGA的分辨率是640X480,而更新的标准比如SVGA(高级视频图形阵列)和X ...
- 嵌入式Linux设备驱动程序开发指南14(Linux设备驱动使用DMA)——读书笔记
Linux设备驱动使用DMA 十四.Linux设备驱动使用DMA 14.1 简介 14.2 缓存一致性 14.3 DMA控制器接口 14.4 流式DMA模块 14.4.1 sdma_sam_m2m.c ...
- 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记
Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...
- 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记
IIO子系统一 十七.IIO子系统(一) 17.1 简介 17.2 数模转换--DAC实验 17.2.1 IIO缓冲区 17.2.2 触发器 17.2.3 工业I/O事件 17.2.4 iio工具 1 ...
- 嵌入式Linux设备驱动程序开发指南9(平台设备驱动)——读书笔记
平台设备驱动 九.平台设备驱动 9.1 平台设备驱动概述 9.2 GPIO驱动 9.2.1 简介 9.2.2 硬件名称 9.2.3 引脚控制器 9.2.4 引脚控制子系统 9.2.5 GPIO控制器驱 ...
- 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记
IIO子系统二 具有硬件触发功能的IIO子系统ADC模块 十八.IIO子系统(二) 具有硬件触发功能的IIO子系统ADC模块 18.1 简介 18.2 设备树 18.3 硬件触发驱动功能分析 18.3 ...
最新文章
- 【mysql函数】find_in_set和locate(substr,str)的区别
- 2015年7月VIP内推前端工程师面试经历
- Storm的本地运行模式示例
- 利用SAML证书登陆vCenter
- 物联网常用的组网方式浅析
- IEEE1459功率理论计算方法
- 用SegNet进行室内布局语义分割
- Unity3D 协程 浅谈
- SQL Server 本机 Web 服务的使用方案(转载)
- 联想拯救者Y7000p+Nvidia rtx2060 显卡驱动安装
- sigil将html转换epub,【教程】(進階版)如何用Sigil製作一本高質量的epub
- 第十七届时尚COSMO美容大奖盛大启动 亮点多维度升级,2020一起“美就出圈”
- Android ImageView属性
- SpringBoot —— 实现邮件、短信的发送功能
- scipy csc csr到底是什么东西
- Linux环境下配置虚拟ip,方法2:单网卡绑定多IP
- c语言建立并存储树,利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...
- useCallback 的问题和隐患的解决方案 - 胡耀(字节跳动)
- RabbitMQ镜像队列与负载均衡
- 【毕业设计源码】基于微信小程序的查寝系统的设计与实现