LDD读书笔记第十章-中断处理
当硬件需要处理器关注时(如硬盘读取完成,通知可以继续读取其他内容。),产生某个事件通知处理器。这种机制叫做中断。一个中断仅仅是个信号。
准备并口
在没有设定产生中断之前,设备不会产生中断。
对于并口标准来说设置端口2(0x37a:0×378+2,0x27a:0×278+2或者其他)的第四位来启用中断报告,初始化的时候用outb莱斯设置这个位。
中断启用时,每当引脚10(ACK)位的电平发生从底到高改变时,并口就会产生一个中断。

[阅读全文] »
当硬件需要处理器关注时(如硬盘读取完成,通知可以继续读取其他内容。),产生某个事件通知处理器。这种机制叫做中断。一个中断仅仅是个信号。
在没有设定产生中断之前,设备不会产生中断。
对于并口标准来说设置端口2(0x37a:0×378+2,0x27a:0×278+2或者其他)的第四位来启用中断报告,初始化的时候用outb莱斯设置这个位。
中断启用时,每当引脚10(ACK)位的电平发生从底到高改变时,并口就会产生一个中断。

[阅读全文] »
ioctl是用于控制设备的公共接口,设备除了需要处理读取写入之外还需要一些相关控制信息。这些控制信息就是由ioctl调用来完成
用户空间的ioctl原型为
1 | int ioctl(int fd,unsigned long cmd,...); |
后面的“…“表示函数的参数个数是可变的(如printf)。
内核空间的ioctl原型
1 2 | int (*ioctl)(struct inode *inode,struct file *filp. unsigned int cmd,unsigned long arg); |
cmd 为指令编号,后面讲述。
arg 为参数。可以是整数也可以是指针,但是内核会以unsigned long形式传送导函数里。
[阅读全文] »
字符设备由在 /dev目录中使用 ls -l 使用来分辨,第一列为c是字符设备d为块设备。
一般同一类设备使用相同的设备号。而同种类型的不同设备用次设备号来表示。
列如对于磁盘:
1 2 3 4 5 | brw-rw---- 1 root disk 8, 0 7月 14 08:15 sda brw-rw---- 1 root disk 8, 1 7月 14 08:15 sda1 brw-rw---- 1 root disk 8, 2 7月 14 08:15 sda2 brw-rw---- 1 root disk 8, 3 7月 14 08:15 sda3 brw-rw---- 1 root disk 8, 4 7月 14 08:15 sda4 |
第一列的b表示是块设备,他们的主设备号8表示SCSI disk devices 次设备的 0~4 表示不同的分区。对于硬盘从设备号0~15 为第一块硬盘也就是sda, 16~31为第二块硬盘 sdb以此类推。详细状况查看linux设备号分配表。
Linux 设备分配清单。
内核使用dev_t 类型表达设备号。 在2.6.0版本中dev_t是32位数,其中12位表示主设备号20位表示从设备号。但是为了兼容性 应该使用相应的宏来操作设备号。
在学习linux内核相关的东西。
购得两本linux内核相关的经典书籍。