(不是理解 /dev 及其子目录和文件的副本)
我正在浏览我的文件系统,这是我第一次花一点时间来分析我的/dev目录。我对其中的设备文件数量感到惊讶,并且无法理解所有这些:
max@linux-vwzy:/dev> ls
adsp disk fd0u1760 initctl mem root sg0 tty tty21 tty35 tty49 tty62 vboxdrv vcsa2
audio dri fd0u1840 input mixer rtc sg1 tty0 tty22 tty36 tty5 tty63 vboxnetctl vcsa3
autofs dsp fd0u1920 kmem mixer1 rtc0 sg2 tty1 tty23 tty37 tty50 tty7 vboxusb vcsa4
block dvd fd0u360 kmsg net scd0 sg3 tty10 tty24 tty38 tty51 tty8 vcs vcsa5
bootsplash dvdrw fd0u720 log network_latency sda sg4 tty11 tty25 tty39 tty52 tty9 vcs1 vcsa6 …Run Code Online (Sandbox Code Playgroud) 我注意到内核中有以下选项:CONFIG_DEVTMPFS
Device Drivers -> Generic Driver Options -> Maintain devtmpfs to mount at /dev
Run Code Online (Sandbox Code Playgroud)
我看到它在 Debian 发行版内核中默认启用 3.2.0-4-amd64
我试图了解这个选项带来了什么不同。如果没有此选项,/dev则挂载为tmpfs,使用此选项,则挂载为devtmpfs。除此之外,我看不出有什么不同。
在help没有明确对我来说之一:
这会在启动初期创建一个 tmpfs/ramfs 文件系统实例。在此文件系统中,内核驱动程序核心维护设备节点及其默认名称和所有注册设备的权限,这些设备具有分配的主要/次要编号。
它提供了一个功能齐全的 /dev 目录,通常 udev 在上面运行,管理权限并添加有意义的符号链接。
在非常有限的环境中,它可能会在没有任何进一步帮助的情况下提供足够功能的 /dev。它还允许简单的救援系统,并可靠地处理动态的主要/次要号码。
有人可以解释使用CONFIG_DEVTMPFS与标准之间的区别/dev吗?
这个概念是否仅适用于终端驱动程序(大多数站点涵盖的内容)或任何一般的驱动程序?
这是一个相当低级的问题,我知道这可能不是最好的提问地点。但是,它似乎比任何其他 SE 网站都更合适,所以就这样吧。
我知道在 Linux 文件系统上,确实存在一些文件,例如:/usr/bin/bashis one that exists。然而,(据我所知),有的还没有实际存在本身和更虚拟的文件,如:/dev/sda,/proc/cpuinfo等我的问题是(它们是两个,而是要独立的问题也密切相关):
/dev/random将返回随机数据,读取自/dev/null将返回EOF. 它如何确定要从该虚拟文件中读取哪些数据(以及因此当/如果数据也写入虚拟文件时要做什么) - 是否有某种带有指向适合每个文件的单独读/写命令的指针的映射,甚至是虚拟目录本身?因此,一个条目/dev/null可以简单地返回一个EOF.这主要是出于好奇,我试图了解事件处理是如何在低级别上工作的,所以请不要将我引用到可以为我完成的软件。
例如,如果我想用 C/C++ 编写一个对鼠标点击做出反应的程序,我假设我需要使用系统调用将某些函数挂接到内核,或者您可能只需要不断检查鼠标的状态,我不知道。
我认为这是可能的,因为在 C/C++ 中几乎所有事情都是可能的,因为级别如此之低,我最感兴趣的是它的工作原理,尽管我可能永远不必自己实现它。
问题是它在 linux 中是如何工作的,是否有某些系统调用、c 库等?
我经常使用cat我的 FPGA 开发板通过串行连接在控制台中查看调试信息,但我从来没有告诉 linux 波特率是多少。cat 如何知道串口连接的波特率是多少?
我正在使用以下命令清空某些 Linux 4.x 操作系统上的硬盘驱动器:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
Run Code Online (Sandbox Code Playgroud)
我打开另一个 tty 并开始sudo htop注意到这一点:
PID USER PRI NI CPU% RES SHR IO_RBYTES IO_WBYTES S TIME+ Command
4598 root 20 0 15.5 1820 1596 4096 17223823 D 1:14.11 pv -pterb /dev/zero
Run Code Online (Sandbox Code Playgroud)
的值IO_WBYTES看起来很正常,但IO_RBYTES保持在 4 KiB 并且永远不会改变。
例如,我运行了一些其他程序
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
Run Code Online (Sandbox Code Playgroud)
并且惊讶地发现它们中没有一个生成大量IO_RBYTESor IO_WBYTES。
我认为这不是特定于任何程序的,但是为什么不读取/dev/zero和写入以/dev/{zero,null}计为 I/O 字节?
首先是一些规格:我的电脑是 HP EliteBook 8460p。它配备了集成的群光 HP 高清网络摄像头。
我的问题是很多应用程序(至少 Skype 和 guvcview)为同一个网络摄像头显示多行;事实上,如果我这样做ls -l /dev | grep video,我会得到以下信息:
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
Run Code Online (Sandbox Code Playgroud)
我有 2 个/dev/video[n]只有一个(集成的)网络摄像头;Skype 可以与 正常工作/dev/video0,但不能与/dev/video1. guvcview 也一样。
如果我插入另一个 USB 网络摄像头,例如罗技摄像头,我会得到以下信息dmesg:
[21222.638802] usb 2-2: new high-speed …Run Code Online (Sandbox Code Playgroud) 如果我这样做:touch file; mv file /dev/null作为根,/dev/null消失。 ls -lad /dev/null结果没有这样的文件或目录。这会破坏依赖于/dev/nullSSH 的应用程序,并且可以通过执行mknod /dev/null c 1 3; chmod 666 /dev/null. 为什么将常规文件移动到这个特殊文件会导致/dev/null?
澄清一下,这是出于测试目的,我了解该mv命令的工作原理。我很好奇的是为什么ls -la /dev/null在用常规文件替换它之前显示预期的输出,但之后它显示/dev/null不存在,即使据称是通过原始mv命令创建的文件并且文件命令显示 ASCII 文本。我认为这必须是ls命令行为与devfs非特殊文件替换字符/特殊文件时的组合。这是在 Mac OS X 上,行为在其他操作系统上可能会有所不同。
我尝试运行以下命令:
$ vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path webcam.png --scene-prefix image_prefix --scene-format png vlc://quit --run-time=1
VLC media player 2.0.7 Twoflower (revision 2.0.6-54-g7dd7e4d)
[0x1f4a1c8] dummy interface: using the dummy interface module...
[0x7fc19c001238] v4l2 demux error: VIDIOC_STREAMON failed
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error …Run Code Online (Sandbox Code Playgroud)