3.1.1. 驱动硬件
内核的首要任务是控制计算机的硬件组件。 它会在计算机开机或插入或移除设备(例如 USB 设备)时检测并配置它们。 它还通过简化的编程接口使它们可用于更高级别的软件,因此应用程序可以利用设备而无需解决诸如选件板插入哪个扩展槽之类的细节问题。 编程接口还提供了一个抽象层; 例如,这允许视频会议软件使用网络摄像头,而不管其制造商和型号如何。 该软件可以使用 Linux 视频 (V4L) 接口和内核会将接口的函数调用转换为正在使用的特定网络摄像头所需的实际硬件命令。
内核通过以下方式导出有关检测到的硬件的数据 /过程/ 和 /系统/ 虚拟文件系统。 应用程序通常通过内部创建的文件访问设备 / dev /. 特定文件代表
1http://www.gnu.org
重新发送磁盘驱动器(例如, / dev / sda上的), 分区 (/ dev / sda1), 老鼠 (/开发/输入/鼠标0), 键盘 (/开发/输入/事件0), 声卡 (/开发/snd/*)、串口(/开发/ttyS*) 和其他组件。
有两种类型的设备文件: 阻止 和 字符. 前者具有数据块的特点:大小有限,可以访问块中任意位置的字节。 后者表现得像一个字符流。 您可以读取和写入字符,但不能搜索给定位置并更改任意字节。 要找出给定设备文件的类型,请检查输出中的第一个字母 ls -l. 它要么 b,对于块设备,或 c, 对于字符设备:
$ ls -l /dev/sda /dev/ttyS0
brw-rw---- 1 个根磁盘 8, 0 Mar 21 08:44 /dev/sda
crw-rw---- 1 根拨出 4, 64 Mar 30 08:59 /dev/ttyS0
$ ls -l /dev/sda /dev/ttyS0
brw-rw---- 1 个根磁盘 8, 0 Mar 21 08:44 /dev/sda
crw-rw---- 1 根拨出 4, 64 Mar 30 08:59 /dev/ttyS0
正如您所料,磁盘驱动器和分区使用块设备,而鼠标、键盘和串行端口使用字符设备。 在这两种情况下,编程接口都包含特定于设备的命令,可以通过 读写控制 系统调用。