全部博文(404)
分类: LINUX
2008-12-19 12:35:49
/dev/ttyn与/dev/pts/n有何不同?
比如我要写往终端设备文件里写,,,这两个有什么不同吗??
还是这俩都指向同一个终端驱动子程序?
/dev/tty: 设备包括虚拟控制台,串口以及伪终端设备,
/dev/pts: 即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序, 通常是我们在X Window下打开的终端
能不能给出来关于这方面的详细点的资料呢?
我这又有几个问题了:
(1)虚拟控制台的定义是什么?
(2)/dev/ttyn的伪终端跟/dev/pts/n的伪终端有什么区别?
(3)为什么/dev/ttyn可以代表伪终端的情况下,还要分出/dev/pts/n的伪终端呢?
逻辑上它们都是终端设备,属于字符设备的一种,说到不同多半是历史原因形成的,其实也没什么大不了的区别。
tty*一般是和物理的控制台或物理的终端设备相联系。
例如在linux下tty1-6是控制台下的六个虚拟终端,控制台是指直接联系到主机的显示器+键盘/鼠标。
而ttyS0和ttyS1是第一个和第二个串口终端,即通过串行口连接的终端设备。但实际上今天真正的串行终端硬件几乎见不到了,通常可以用windows下的超级终端程序和linux下的minicom这样的模拟终端程序来模拟它。甚至ttyUSB0这样的USB-串口转换器的模拟串口也出现了。所以tty现在也不全是物理的设备了。
使用pty这样的虚拟终端设备的主要有两种:一种是由Xwindow下的模拟终端程序使用的,另一种就是通过网络远程登录上去的终端模拟程序使用的,如putty,SecuCRT之类。甚至你从一台主机的控制台tty1上用telnet/ssh登录了另一台联网主机,对于被连接的主机,你使用的仍然是一台pty——虚拟终端。
总而言之,物理和虚拟的区分已经越来越模糊了,没必要那么较真。Unix的设计的哲学就是“一切皆文件”,在使用上没什么分别。像在PLAN9这样的概念OS中,连网络服务也都是文件了,更加的大一统了,其实不是挺好的吗?^_^
请问redhat中/dev/pts是什么设备? |
虚拟终端设备 |
区分/dev/tty、/dev/console、/dev/pts、/dev/ttyn | |
|
为了某些程序的正常运行,必须在虚拟根(chroot)环境中提供proc 和 devpts文件系统。由于一个文件系统可以被无限次的加载(更因为它们是虚拟的文件系统),所以不要担心它们已经在你的主系统里加载过了。
proc 文件系统表示 process information pseudo文件系统,内核用它来提供系统状态信息。
我们把 proc 文件系统加载到/proc目录下,命令如下:
mount proc /proc -t proc |
你很可能会看到这样的警告:
warning: can't open /etc/fstab: No such file or directory not enough memory |
不用担心,这只是因为我们的系统还不完整,有些文件还没有创建。mount本身是成功的,我们只关心这个。
devpts 文件系统前面提到过,是目前最常见的 pseudo 终端(PTYs)实现方式。
devpts 文件系统加载在 /dev/pts ,命令如下:
mount devpts /dev/pts -t devpts |
这个命令可能因为下面的错误而失败:
filesystem devpts not supported by kernel |
最大的可能是你主系统的内核没有编译devpts文件系统支持。你可以用命令cat /proc/filesystems来查看一下。如果 devpts 列在那里,但还是不能mount,看看是不是使用了 devfs文件系统。如果devfs也列在那里,我们就有办法了,可以把主系统的devfs文件系统加载的后面"创建设备(Makedev"那一节里将创建的 /dev 结构之上,如果devfs也没有列出来,别担心,还有第三个方案可以使PTYs在chroot中正常工作,我们后面在Makedev那一节里会说到的。
记住,如果出于种种原因,你中止了LFS系统的安装,后来又要继续安装时,要检查一些这两个文件系统是不是还加载在chroot环境中,如果没有的话,就会出问题,需要再次加载。
为了某些程序能确定某一个分区加载的实际位置,要用到 /etc/fstab 文件。通过以下方法建立一个新文件 /etc/fstab :
cat > /etc/fstab << "EOF" # Begin /etc/fstab
# filesystem mount-point fs-type options dump fsck-order
/dev/xxx / fff defaults 1 1 /dev/yyy swap swap pri=1 0 0 proc /proc proc defaults 0 0 devpts /dev/pts devpts gid=4,mode=620 0 0 shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab EOF |
xxx,yyy 和 zzz 应换成你系统中的值 (比如hda2, hda5 和 reiserfs)。关于表格中六个域的详细信息,请参看 man 5 fstab.
当增加一个reiserfs分区时,一行最后的 1 1 a应换成 0 0,因为这样的分区不需要dump和check.
/dev/shm加载点用于加载 tmpfs,这样可以打开POSIX共享内存。你的内核必须编译进内建的支持。这一点在下一节有更详细的介绍。现在只有很少的程序会使用POSIX共享内存。因此你也可以不加载/dev/shm。更多内容,请参看内核源码目录中的 Documentation/filesystems/tmpfs.txt文件。
还有一些内容也许你想加入到fstab文件中。如果你使用USB设备的话,可以加上下面一行:
usbfs /proc/bus/usb usbfs defaults 0 0 |
这个例子只有在你把相关的支持编译到内核中时才能工作。