设为首页 加入收藏

TOP

Linux工作原理3设备(三)
2023-07-23 13:29:49 】 浏览:105
Tags:Linux 设备
的文本模式。在这种情况下,系统会在启动过程接近尾声时切换到全图形模式。
Linux支持虚拟控制台来复用显示。每个虚拟控制台可以在图形或文本模式下运行。当处于文本模式时,你可以通过ALT功能键组合在控制台之间进行切换--例如,ALT-F1会带你到/dev/tty1,ALT-F2会到/dev/tty2,以此类推。许多这样的虚拟控制台可能被运行登录提示的getty进程所占据,如第7.4节所述。

在图形模式下使用的虚拟控制台略有不同。除非被指示使用一个特定的虚拟控制台,否则图形环境会接管空闲的虚拟控制台,而不是从初始配置中获得一个虚拟控制台的分配。例如,如果你有getty进程在tty1和tty2上运行,新的图形环境会占用tty3。此外,一旦进入图形模式,你通常必须按CTRL-ALT-功能键组合来切换到另一个虚拟控制台,而不是更简单的ALT-功能键组合。
所有这些的结果是,如果你想在系统启动后看到你的文本控制台,按CTRL-ALT-F1。要返回到图形环境,按ALT-F2、ALT-F3,以此类推,直到你进入图形环境。

注意:有些发行版在图形模式下使用tty1。在这种情况下,你将需要尝试其他控制台。

如果你在切换控制台时由于输入机制的故障或其他情况而遇到麻烦,你可以尝试用chvt命令强迫系统改变控制台。例如,要切换到tty1,以root身份运行以下命令:


# chvt 1

3.4.8 串行端口: /dev/ttyS, /dev/ttyUSB, /dev/ttyACM*

较早的RS-232类型和类似的串行端口被表示为真正的终端设备。你不能在命令行上对串口设备做很多事情,因为有太多的设置需要担心,比如波特率和流量控制,但是你可以使用screen命令,通过添加设备路径作为参数来连接到终端。你可能需要该设备的读写权限;有时你可以通过将自己添加到特定的组(如dialout)来实现。
在Windows上被称为COM1的端口是/dev/ttyS0;COM2是/dev/ttyS1;以此类推。插入式USB串行适配器显示为USB和ACM,名称为/dev/ttyUSB0、/dev/ttyACM0、/dev/ttyUSB1、/dev/ttyACM1,等等。
一些涉及到串行端口的最有趣的应用是基于微控制器的板子,你可以把它插入你的Linux系统进行开发和测试。例如,你可以通过USB串行接口访问CircuitPython板的控制台和读-评-印循环。你所需要做的就是插上一个,寻找设备(通常是/dev/ttyACM0),然后用屏幕连接到它。

3.4.9 并行端口: /dev/lp0和/dev/lp1

单向并口设备/dev/lp0和/dev/lp1代表着一种接口类型,在很大程度上已经被USB和网络所取代,在Windows中对应于LPT1:和LPT2:。你可以用cat命令将文件(如要打印的文件)直接发送到并口,但你可能需要在之后给打印机一个额外的进纸或复位。像CUPS这样的打印服务器在处理与打印机的交互方面要好得多。
双向的并行端口是/dev/parport0和/dev/parport1。

3.4.10 音频设备: /dev/snd/*, /dev/dsp, /dev/audio, 以及更多

Linux有两套音频设备。有独立的设备用于高级Linux声音架构(ALSA)系统接口和较早的开放声音系统(OSS)。ALSA设备在/dev/snd目录下,但很难直接使用它们。使用ALSA的Linux系统支持OSS的后向兼容设备,如果目前加载了OSS的内核支持。
对OSS的dsp和音频设备可以进行一些基本的操作。例如,计算机会播放你发送到/dev/dsp的任何WAV文件。然而,由于频率不匹配,硬件可能做不到你期望的那样。此外,在大多数系统上,该设备往往在你登录后就开始忙碌。

注意:由于涉及到许多层次,Linux的声音是一个混乱的主题。我们只谈了内核级的设备,但通常还有用户空间的服务器,如 pulseaudio,管理来自不同来源的音频,作为声音设备和其他用户空间进程之间的中介。

3.4.11 创建设备文件

在任何合理的最近的Linux系统上,你都不会创建自己的设备文件;它们是由devtmpfs和udev创建的(见第3.5节)。然而,看看如何创建设备文件是很有意义的,在罕见的情况下,你可能需要创建命名的管道或套接字文件。
mknod命令创建设备。你必须知道设备的名称以及它的主号和次号。例如,创建/dev/sda1只需使用下面的命令:


# mknod /dev/sda1 b 8 1

b 8 1指定了一个主数为8、次数为1的块设备。对于字符或命名的管道设备,使用c或p而不是b(对于命名的管道,省略主要和次要数字)。
在旧版本的Unix和Linux中,维护/dev目录是一个挑战。随着每一次重要的内核升级或驱动程序的增加,内核可以支持更多种类的设备,这意味着将有一组新的主要和次要数字被分配给设备文件名。为了解决这个维护难题,每个系统都有一个MAKEDEV程序,在/dev中创建设备组。当你升级你的系统时,你将试图找到MAKEDEV的更新,然后运行它以创建新的设备。
这个静态的系统变得很难看,所以一个替换是必要的。解决这个问题的第一个尝试是devfs,一个内核空间的/dev实现,包含了当前内核支持的所有设备。然而,有一些限制,这导致了udev和devtmpfs的发展。

3.5 udev

我们已经谈到了内核中不必要的复杂性是很危险的,因为你太容易引入系统的不稳定性。设备文件管理就是一个例子:你可以在用户空间创建设备文件,那么你为什么要在内核中这样做?Linux内核可以在检测到系统中的新设备时(例如,当有人安装了U盘时)向udevd的用户空间进程发送通知。这个udevd进程可以检查新设备的特性,创建设备文件,然后执行任何设备初始化。

注意:你几乎肯定会看到udevd以systemd-udevd的形式在你的系统上运行,因为它是你将在第六章看到的启动机制的一部分。

这就是理论。不幸的是,这种方法有一个问题--设备文件在启动过程的早期是必需的,所以udevd也必须提前启动。但是为了创建设备文件,udevd不能依赖于任何它应该创建的设备,它需要非常快速地执行其初始启动,这样系统的其他部分就不会因为等待udevd的启动而被耽搁。

3.5.1 devtmpfs

devtmpfs文件系统是为了解决启动过程中的设备可用性问题而开发的(关于文件系统的更多细节,见第4.2节)。这个文件系统类似于较早的devfs支持,但有所简化。内核在必要时创建设备文件,但它也会通知udevd新的设备是可用的。收到这个信号后,udevd不会创建设备文件,但它会执行设备初始化,同时设置权限并通知其他进程新设备可用。此外,它在/dev中创建一些符号链接,以进一步识别设备。你可以在/dev/disk/by-id目录下找到例子,每个连接的磁盘都有一个或多个条目。

例如,考虑典型的磁盘(连接在/dev/sda)和它在/dev/disk/by-id中的分区的链接:


$ ls -l /dev/disk/by-id
lrwxrwxrwx 1 root root  9 Jul 26 10:23 scsi-SATA_WDC_WD3200AAJS-_WD-WMAV2FU80671 -> ../../sda
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇INFINI Labs 产品更新 | Console .. 下一篇shell 常用命令3

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目