linux设备节点,linux查看文件节点
很多朋友对于linux设备节点和linux查看文件节点不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
如何解决Linux下USB设备节点名不固定问题
Linux下USB设备节点名不固定问题经常会遇到,下面就是解决的方法:
以USB转串口为例,通常设备节点名为ttyUSBx(x为0~n),Linux内核会根据插入设备的先后顺序进行编号的分配,比如第一个插入的设备编号为0,然后依此加1。
如果仅仅以设备节点ttyUSBn来区别具体是哪个设备,因为末位的编号是随时会变的,所以就会造成混乱。无法保证A设备就是0,B设备就是1。其实这个问题在LDD3上已经提到过,目前的内核早已经解决类似的问题,将所以有USB设备都导致到sys文件系统中,其实每个USB端口都有唯一的端口号,相当于每个门店的门牌号。只要我们依据端口号来进行设备的区分,那么问题就迎刃而解了。
比如当前设备插入两个USB转串口设备后,查看ttyUSBn所在端口的端口号:
root@android:/$ ls-l/sys/class/tty/
...
lrwxrwxrwx root root 2011-01-01 13:40 ttyUSB0->../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0
lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1->../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
root@android:/$ 12345
其中ttyUSB0所在的端口号为3-1.1,而ttyUSB1所在的端口号为3-1.2。
其它类型USB设备同理,以上思路清理完毕。
查看系统当前usb设备,下面是对第二列排序的结果。
$ lsusb
Bus 001 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 001 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID xxx:xxx Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader
Bus 001 Device 005: ID xxx:xxx Philips(or NXP)
Bus 002 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 002 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 003: ID xxx:xxx Intel Corp.
Bus 003 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 004 Device 001: ID xxx:xxx Linux Foundation 3.0 root hub
第二列是usb设备的hub编号。pc中usb设备都是接在hub上的,即使你的主板提供好多usb口,他们实际都是接在hub上的。
第四列是usb设备编号,设备在本机的编号。
所以,上面信息显示一共有4个usb hub(3个usb2.0,一个usb3.0)。如果
黑体字部分是我机器上的三个设备,001.003是机箱自带读卡器,001.005是无线键盘,002.003是intel无线网卡蓝牙模块(具体怎么知道的往下看)。
usb设备也可以用在内核文件中找到/sys/bus/usb/devices。linux将所有设备驱动映射到了/sys下。
ls-1/sys/bus/usb/devices/
1-0:1.0
1-1
1-1:1.0
1-1.2
1-1.2:1.0
1-1.4
1-1.4.1
1-1.4:1.0
1-1.4.1:1.0
1-1.4.1:1.1
1-1.4.1:1.2
1-1.5
1-1.5:1.0
1-1.5:1.1
1-1.5:1.2
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
3-0:1.0
4-0:1.0
usb1
usb2
usb3
usb4
都是符号连接。也可以用ls-l/sys/bus/usb/devices/看具体位置
输出看起来比较乱。用 udevadm工具能比较清楚列出设备信息。命令看起来是这样的:
udevadm info-p/sys/bus/usb/devices/usb1-q property
那怎么找出是那个usb设备呢?
Bus 002 Device 003: ID xxx:xxx Intel Corp.
第二列,002就要在所有2开头的文件去找,下面的符合第一规则。
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
通常系统的usb hub占据了`-`减号后第一位0。第一个 2-0:1.0,就是usb hub。
2-1.5*文件就是上面的设备。
$ udevadm info-p/sys/bus/usb/devices/2-1.5-q property
BUSNUM=002
DEVNAME=/dev/bus/usb/002/003
DEVNUM=003
............
ID_MODEL_ID=xxx
............
ID_VENDOR=xxx
............
ID_VENDOR_FROM_DATABASE=Intel Corp.
............
002和003就是lsusb的第2/4列.第6列,来自modelID和vender。
lsusb中的的东东就是这么来的。
那问题是怎么知道是蓝牙呢?答案是继续用udevadm查:
$ udevadm info-p/sys/bus/usb/devices/2-1.5:1.0-q property
ID_USB_CLASS_FROM_DATABASE=Wireless
ID_USB_PROTOCOL_FROM_DATABASE=Bluetooth
ID_USB_SUBCLASS_FROM_DATABASE=Radio Frequency
ID_VENDOR_FROM_DATABASE=Intel Corp.
Linux驱动与设备节点简介 & Android内核与Linux内核的区别
驱动是内核的一部分,作为直接访问物理硬件的一个软件层,用于应用程序与物理硬件设备通信。内核包含多种驱动,如WIFI、USB、Audio、蓝牙、相机、显示驱动。
(1)设备驱动程序三类:字符设备驱动程序、块设备驱动程序、网络设备驱动程序;
(2)对应Linux三类设备:字符设备、块设备、网络设备;
(3)常见字符设备:鼠标、键盘、串口、控制台等;
(4)常见块设备:各种硬盘、flash磁盘、RAM磁盘等;
(5)网络设备(网络接口):eth0、eth1,注:网络设备没有设备节点,应用程序通过Socket访问网络设备。由于网络设备面向报文,较难实现相关read、write等文件读写函数,所以驱动的实现也与字符设备和块设备不同。
Linux使用对文件一样的管理方式来管理设备,所有设备都以文件的形式存放在/dev目录下,系统中的每个字符设备或者块设备都必须为其创建一个设备文件,它包含了该设备的设备类型(块设备或字符设备)、设备号(主设备号和次设备号)以及设备访问控制属性等。设备节点通过 mknod命令创建,也可以由Udev用户工具软件在系统启动后根据/sys目录下每个设备的实际信息创建,使用后一种方式可以为每个设备动态分配设备号。
Linux中设备节点通过“mknod”命令创建,创建时需要指定主设备号和次设备号,即指定对应的驱动程序和对应的物理设备(访问设备节点时就相当于通过其设备号访问驱动程序进而间接访问到物理设备)。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3
理解:应用程序通过访问设备节点读取主设备号和次设备号,通过主设备号找对应的驱动,通过次设备号对应到具体物理设备。注:1个驱动对应一类设备,并用唯一主设备号标识。
Linux支持的各种设备的主设备号定义在include/linux/major.h文件中,已经在官方注册的主设备号和次设备号在Documentation/devices.txt文件中。
Android系统最底层是Linux,并且在中间加上了一个Dalvik/ ART的Java虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik/ ART虚拟机为它分配的专有实例,并支持多个虚拟机在同一设备上高效运行,虚拟机执行的是专有格式的可执行文件(.dex)-该格式经过优化,以将内存好用降到最低。
Android内核和Linux内核的差别主要体现在如下11个方面:
LINUX 如何查看裸设备
df命令
说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。
该命令各个选项的含义如下:
-a显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
-k以k字节为单位显示。
-i显示i节点信息,而不是磁盘块。
-t显示各指定类型的文件系统的磁盘空间使用情况。
-x列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。
-T显示文件系统类型。
例1:列出各文件系统的磁盘空间使用情况。
$ df
Filesystem 1 K-blocks Used Available Use% Mounted on
/dev/hda2 1361587 1246406 44823 97%/
df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use%列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。
例2:列出各文件系统的i节点使用情况。
$ df-ia
Filesystem Inodes IUsed IFree Iused% Mounted on
/dev/ hda2 352256 75043 277213 21%/
none 0 0 0 0%/proc
localhost:(pid221) 0 0 0 0%/net
例3:列出文件系统的类型。
$ df-T
Filesystem Type 1K-blocks Used Available use% Mounted on
/dev/hda2 ext2 1361587 1246405 44824 97%/
本例中的文件系统是ext2类型的