LDD读书笔记第十二章-PCI驱动程序

PCI接口

PCI的设计目标:

  • 更好的传输性能
  • 平台无关性
  • 简化往系统中添加删除外设的工作

更多关于PCI的内容查看PCI规范

PCI寻址

Linux支持PCI域(16位),每个PCI域可以有256个总线(8位)每个总线上32个设备(5位)每个设备8种功能(3位)。
在硬件级每个功能由16位地址来表示(没有域),在linux中因为添加了域每个功能应该用32位来表示。
PCI总线中I/O空间使用32位地址总线,而内存空间可通过32位或64位来访问。

点击查看大图
[阅读全文] »

LDD读书笔记第十一章-内核的数据类型

Linux数据类型

Linux内核C语言数据类型大小
  Arch     char     short     int     long     ptr     long-long     u8     u16    u32    u64 
i386 1 2 4 4 4 8 1 2 4 8
alpha 1 2 4 8 8 8 1 2 4 8
armv41 1 2 4 4 4 8 1 2 4 8
ia64 1 2 4 8 8 8 1 2 4 8
m86k 1 2 4 4 4 8 1 2 4 8
mips 1 2 4 4 4 8 1 2 4 8
ppc 1 2 4 4 4 8 1 2 4 8
sparc 1 2 4 4 4 8 1 2 4 8
sparc64 1 2 4 4 4 8 1 2 4 8
x86_64 1 2 4 8 8 8 1 2 4 8

需要注意的是sparc64架构运行的是32位用户空间。但是在内核空间是64位的。
在当前的所有平台上指针和long型的大小总相同
u8等固定大小的值有其有符号版本以s代替u如:s8
如果需要在用户空间使用固定大小的话使用双下划线版本如__u8
固定大小的类型是linux特有的 如果考虑向其他unix变种移植应使用C99标准类型变量如:uint8_t
[阅读全文] »

LDD读书笔记第十章-中断处理

当硬件需要处理器关注时(如硬盘读取完成,通知可以继续读取其他内容。),产生某个事件通知处理器。这种机制叫做中断。一个中断仅仅是个信号。

准备并口

在没有设定产生中断之前,设备不会产生中断。
对于并口标准来说设置端口2(0x37a:0×378+2,0x27a:0×278+2或者其他)的第四位来启用中断报告,初始化的时候用outb莱斯设置这个位。
中断启用时,每当引脚10(ACK)位的电平发生从底到高改变时,并口就会产生一个中断。

[阅读全文] »

LDD读书笔记第九章-与硬件通信

I/O端口和I/O内存

i/o寄存器和常规内存

为了防止边界效应的干扰,驱动程序必须确保不使用高速缓存,并且在访问寄存器时不发生读或写指令的从新排序。
高速缓存:把底层硬件配置成在访问IO区域时禁止硬件缓存。
从新排序:使用内存屏障
[阅读全文] »

川子-《郑钱花》歌词

偶然间看到。
反映着这个社会的某些事情。
那歌声,那嗓音。
值得深思。
值得思考。

川子,北京南城土著。他自幼生性刚猛、桀骜不驯,早年因为打架斗殴饱受牢狱之苦。在狱中,川子开始学习吉他写歌,因为表现出色获得减刑。出狱后,川子的精 神世界发生了彻底的改变,他不再同过去的朋友圈子密切交往,甚至不太喜欢结识新的朋友。他的世界一下子狭小得让人透不过气来,家人还有他的爱犬嘟嘟几乎成 了他生活中的唯一。
[阅读全文] »

Page 1 of 41234»