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

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

准备并口

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

[阅读全文] »

LDD读书笔记第六章-高级字符驱动程序操作(一)

ioctl

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形式传送导函数里。
[阅读全文] »

LDD读书笔记第三章-字符设备驱动程序(一)

设备号

一、简介

字符设备由在 /dev目录中使用 ls -l 使用来分辨,第一列为c是字符设备d为块设备。
一般同一类设备使用相同的设备号。而同种类型的不同设备用次设备号来表示。
列如对于磁盘:

1
2
3
4
5
brw-rw----  1 root disk    8,   0  714 08:15 sda
brw-rw----  1 root disk    8,   1  714 08:15 sda1
brw-rw----  1 root disk    8,   2  714 08:15 sda2
brw-rw----  1 root disk    8,   3  714 08:15 sda3
brw-rw----  1 root disk    8,   4  714 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内核相关的东西。

购得两本linux内核相关的经典书籍。

Linux设备驱动程序(第三版)

ldd

Linux Device Drivers,3rd Edition

深入理解Linux内核(第三版)

Understanding the Linux Kernel

[阅读全文] »