1.编译进内核的设备驱动代码
2.可插入内核的设备驱动模块
以前,插入设备驱动代码的唯一途径就是重新编译内核。每次给系统添加新设备时,你都要重新编译一遍内核代码,随着Linux内核支持越来越多的硬件设备,这个过程也变得越来越低效。
开发人员提出了内核模块的概念。它允许将驱动代码插入到运行中的的内核而无需重新编译内核。同时当设备不再使用时也可将内核模块从内核中移走。这种方式极大地简化和推动了硬件设备在Linux上的使用。
Linux系统将硬件设备当成特殊的文件,称之为设备文件。设备文件有3种不同的分类:
1.字符型设备文件
2.块设备文件
3.网络设备文件
字符型设备文件是指处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都作为字符型设备文件创建的。块设备文件是指处理数据时每次都能处理大块数据的设备,比如硬盘。
网络设备文件是指采用数据发送包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备,这个回环设备允许Linux系统使用通过的网络编程协议同自己通信。
Linux为系统上的每个设备都创建一种特殊的文件,称之为“节点”。与设备的所有通信都是通过节点完成的。每个节点都有一个唯一的数值对,供Linux内核识别它,数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的设备号下。次设备号用于标识同一个主设备号下的某个特殊设备。以下是Linux服务器上的一些设备文件例子:
$cd /dev
$ls -al sda* ttyS*
b(ATA硬盘文件都标记为b--block devices,块设备)rw-rw---- 1 root disk 8(主设备节点号), 0 2010-09-18 17:25 sda
b(ATA硬盘文件都标记为b--block devices,块设备)rw-rw---- 1 root disk 8(主设备节点号), 1 2010-09-18 17:25 sda1
b(ATA硬盘文件都标记为b--block devices,块设备)rw-rw---- 1 root disk 8(主设备节点号), 2 2010-09-18 17:25 sda2
b(ATA硬盘文件都标记为b--block devices,块设备)rw-rw---- 1 root disk 8(主设备节点号), 5 2010-09-18 17:25 sda5
crw-rw---- 1 root dialout 4(主设备节点号), 64 2010-09-18 17:25 ttyS0
crw-rw---- 1 root dialout 4(主设备节点号), 65 2010-09-18 17:25 ttyS1
crw-rw---- 1 root dialout 4(主设备节点号), 66 2010-09-18 17:25 ttyS2
crw-rw---- 1 root dialout 4(主设备节点号), 67 2010-09-18 17:25 ttyS3
$