您的位置:首页 > 运维架构 > Linux

Linux入门之内核管理番外篇(4)udev入门(1)

2017-01-10 12:56 429 查看

Linux入门之内核管理番外篇(4)udev入门(1)

前言

在上篇中的内核模块管理讲解中,最后或多或少会留下一些疑问,那么这些疑问就是内核模块的参数是怎么和对应的硬件所匹配上的,而硬件又是怎么被内核识别,并且一个个都映射成实际存在的文件,而这些文件之间的关系及作用。当然在最后了解到,这些硬件设备的探测信息是通过一个叫udev的工具来实现的,通过udev中配置的规则可以很有效的识别每一个硬件,并配合sysfs文件系统,将每个探测到的硬件信息导入到/sys目录中,那么与/proc目录对与内核系统信息的映射悄悄互补,/sys目录中则专门存放于硬件相关的数据。
 

使用管理和探测设备属性信息的命令:udevadm

udevadm 命令

udev - Dynamic device management   #动态设备管理工具

 

提示:一般情况下要设置udev命令规则会使用到udevadm命令来获取规则中需要设置的键的对应值,也就是设备的完整数据,而udev配置中恰好需要这,当然,下面介绍udevadm管理工具的一些基本常见用户,本篇主要以讲解udev内部的配置为主。

 

基本用法例子:

#先来查看当前系统识别了多少个磁盘

# fdisk -l  | grep -o '^Disk /dev/[sh]d[a-z]\>'
Disk /dev/sdb
Disk /dev/sda

[root@mzf myusb]# udevadm info -a -p $(udevadm info -q path -n /dev/sda)
udevadm info -a -p /sys/class/backlight/acpi_video0[/code]
[b]udevadm control --reload4000
>
echo 0 0 0 | tee /sys/class/scsi_host/host*/scan
echo “- - -” > /sys/class/csci_host/host*/scan[/code]
udevadm moitor[/code]
[root@mzf test]# ls -l /test/my*
brw-r--r--. 1 root root 10, 1 Aug 22 05:28 /test/myblock
crw-r--r--. 1 root root 12, 2 Aug 22 05:28 /test/mychar[/code]
KERNEL=="sdc",NAME="my_usb_disk"[/code]
NAME  - #根据匹配键找出对应的设备,并对其进行进行设置命令节点,也就是设备应该使用的名称
SYMLINK  - #一个设备节点的可选名字的符号链接[/code]
[b]KERNEL=="sdc",DRIVER=="usb-storage",SYMLINK+="myusb_link"[/code]
SUBSYSTEM=="block",ATTR{size}=="30310400",SYTEMLINK+="myusb2"[/code]
KERNELS  -  #匹配设备及其所有父设备的内核名称
SUBSYSTEMS  -  #匹配设备及其所有父设备的内核名称
DRIVERS  -  #匹配设备及其所有父设备的驱动名称
ATTRS  -  #匹配设备及其所有父设备在sysfs中的属性值。如果指定了多个ATTRS匹配,那么必须在同一设备上全部匹配成功,才算最终匹配成功。[/code]
KERNEL=="[hs]dc[1-9]",SUBSYSTEM=="block",DRIVER=="usb",SYMLINK+="myusb_%n"[/code]
KERNEL=="fd[0-9]",NAME=="floppy/%n",SYMLINK+="%k"[/code]
[root@mzf ~]# cat /sys/block/sda/size 
41943040[/code]
[b][root@mzf ~]# udevadm info --query=property --name=/dev/sda[/code]
[root@mzf ~]# udevadm info -a -p `udevadm info --query=path --name=/dev/sda1`[/code]
[root@mzf ~]# cat /proc/filesystems[/code]
[root@mzf ~]# depmod -a[/code]
insmod /usr/lib/modules/$(uname -r)/kernel/fs/
insmod /usr/lib/modules/$(uname -r)/kernel/fs/[/code]
[b]KERNEL=="sd*",SUBSYSTEM=="block",ATTR{ipVendor}=="4a3gb3",ATTR{idProduct}=="445566",name=="/myusb/usb_%n"
KERNEL=="sdc1",SUBSYSTEM=="block",ATTR{size}=="30310400",SYMLINK+="usb"
KERNEL=="sdc[0-9]",SUBSYSTEM=="block",SUBSYSTEMS=="scsi",ATTRS{model}=="USB Flash Drive ",NAME="my_usb_disk"[/code]
[root@mzf ~]# ls /dev
[root@mzf ~]# find /dev/ -name "*dev_name*"[/code]
[root@mzf ~]# udevadm info -a -p /sys/class/net/eth0[/code]
KERNEL=="eth*",SUBSYSTEM=="net",ATTR{type}=="1",ATTR{address}=="00:0c:29:a3:5d:d7",name="game_lan"[/code]
[b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: