[[lab/技術情報]]
*udev@kitchen01 [#p73f126d]
kitchen01のサウンドデバイスのパスを固定するための作業です。kitchen01では/dev/dspと/dev/dsp1が入れ替わることがあるので、このコンフリクトを解消する方向で作業手順を述べます。
*目次 [#v65b07d6]
#contents
*環境 [#a9d30d95]
-machine: dell precision
-OS: linux, fedora6
-device: EMU10K1_Audigy(pciサウンドカード),UA-1000(USBサウンドカード??)
*作業 [#l1941e00]
**udev [#s535c18d]
+udevinfo -nでデバイスのパスを取得。
[kitchen@kitchen01]% udevinfo -q path -n /dev/dsp
[kitchen@kitchen01]% udevinfo -q path -n /dev/dsp1
このコマンドで/class/sound/dspとかいうデバイスツリー的なパスが返ってくる。
+udevindo -aでデバイスの詳細を取得。
[kitchen@kitchen01]% udevinfo -a -p /class/sound/dsp
以下のような出力を得る。
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:00.0':
ID=="0000:04:00.0"
BUS=="pci"
DRIVER=="EMU10K1_Audigy"
SYSFS{msi_bus}==""
SYSFS{broken_parity_status}=="0"
SYSFS{enable}=="1"
つづいて次のコマンド:
[kitchen@kitchen01]% udevinfo -a -p /class/sound/dsp1
以下のような出力を得る
looking at device '/class/sound/dsp1':
KERNEL=="dsp1"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:19"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
SYSFS{bInterfaceSubClass}=="01"
この出力の中でデバイスに固有っぽいものを探す。ここではBUSとDRIVERを採用。IDとSYSFE{dev}は怪しいので脚下。あとはSYSFS{vendor}などを使えばいいんではないかと。
+rulesファイルを書く
[root@kitchen01]# ls /etc/udev/rules.d
で
05-udev-early.rules 51-hotplug.rules 60-pam_usb.rules 90-alsa.rules 95-pam-console.rules edirol.rules
40-multipath.rules 60-libsane.rules 60-pcmcia.rules 90-hal.rules 99-fuse.rules
50-udev.rules 60-net.rules 60-wacom.rules 91-local.rules bluetooth.rules
こんな出力。ファイル名の番号がかぶらないように、適当なファイル名:52-local.rulesとか、でファイルをつくる。
# #/dev/soundUSB as usb audio
KERNEL=="dsp*", BUS=="usb", DRIVER=="snd-usb-audio", SYMLINK="soundUSB"
さっきudevinfoで見た、KERNEL=="dsp*", BUS=="usb", DRIVER=="snd-usb-audio"の属性をもったデバイスにたいして、シンボリックリンク"soundUSB"を作る、という意味。
+udevtriggerでudevデーモンを再起動(?)
[root@kitchen01]# udevtrigger
+udevtestでudevを試す
[root@kitchen01]# udevtest /class/sound/dsp
[root@kitchen01]# udevtest /class/sound/dsp1
これで/class/sound/dspのほうの出力のみに
udev_rules_get_name: add symlink 'soundUSB'
なことが書かれていればok.
+確認
[user@kitchen01]% ll /dev/sound* /dev/dsp*
↓
crw------- 1 root root 14, 3 6月 21 23:37 /dev/dsp
crw------- 1 root root 14, 19 6月 21 23:37 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 23:37 /dev/soundUSB -> dsp0
**permission [#t8028d04]
せっかくなので起動時にデバイスのパーミッションも設定してしまう作業。
大変参考になるサイトの(2)によると
/etc/security/console.perms.d/XX-*****.perms
なファイルで起動時のデバイスのパーミッションを変更できるとのこと。
50-default.permsを51-local.permsにコピーし、次のように設定:
# device classes -- these are shell-style globs
<sound>=/dev/dsp*
# permission definitions
<console> 0666 <sound> 0666 root
これでokですた♪
*大変参考になるサイトw [#l3e1ade9]
+http://www.linuxquestions.org/questions/linux-software-2/libusb-usb-driver-with-non-root-credentials-548733/
*ログ [#z824fbda]
↓うまくいっていない PCI <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 17:37:43 JST
crw------- 1 root root 14, 3 6月 21 17:35 /dev/dsp
crw------- 1 root root 14, 19 6月 21 17:35 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 17:35 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 17:35 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p /class/sound/dsp|head -n 20|tail -n 8
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:00.0':
ID=="0000:04:00.0"
BUS=="pci"
DRIVER=="EMU10K1_Audigy"
SYSFS{msi_bus}==""
SYSFS{broken_parity_status}=="0"
SYSFS{enable}=="1"
SYSFS{modalias}=="pci:v00001102d00000004sv00001102sd00002002bc04sc01i00"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 rules.d]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 17:51:46 JST
crw------- 1 root root 14, 3 6月 21 17:43 /dev/dsp
crw------- 1 root root 14, 19 6月 21 17:43 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 17:43 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 17:43 /dev/soundUSB -> dsp
[root@KITCHEN01 rules.d]# udevinfo -a -p /class/sound/dsp|head -n 20|tail -n 8
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
SYSFS{bInterfaceSubClass}=="01"
SYSFS{bInterfaceClass}=="ff"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 18:02:51 JST
crw------- 1 root root 14, 3 6月 21 17:52 /dev/dsp
crw------- 1 root root 14, 19 6月 21 17:52 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 17:52 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 17:52 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p /class/sound/dsp|head -n 20|tail -n 8
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
SYSFS{bInterfaceSubClass}=="01"
SYSFS{bInterfaceClass}=="ff"
↓うまくいっていない PCI <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 18:05:48 JST
crw------- 1 root root 14, 3 6月 21 18:03 /dev/dsp
crw------- 1 root root 14, 19 6月 21 18:03 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 18:03 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 18:03 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p /class/sound/dsp|head -n 20|tail -n 8
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:00.0':
ID=="0000:04:00.0"
BUS=="pci"
DRIVER=="EMU10K1_Audigy"
SYSFS{msi_bus}==""
SYSFS{broken_parity_status}=="0"
SYSFS{enable}=="1"
SYSFS{modalias}=="pci:v00001102d00000004sv00001102sd00002002bc04sc01i00"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 19:40:26 JST
crw------- 1 root root 14, 3 6月 21 18:22 /dev/dsp
crw------- 1 root root 14, 19 6月 21 18:22 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 18:22 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 18:22 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 19:43:08 JST
crw------- 1 root root 14, 3 6月 21 19:41 /dev/dsp
crw------- 1 root root 14, 19 6月 21 19:41 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 19:41 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 19:41 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 19:44:58 JST
crw------- 1 root root 14, 3 6月 21 19:44 /dev/dsp
crw------- 1 root root 14, 19 6月 21 19:44 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 19:44 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 19:44 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 19:46:41 JST
crw------- 1 root root 14, 3 6月 21 19:45 /dev/dsp
crw------- 1 root root 14, 19 6月 21 19:45 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 19:45 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 19:45 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 19:46:41 JST
crw------- 1 root root 14, 3 6月 21 19:45 /dev/dsp
crw------- 1 root root 14, 19 6月 21 19:45 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 19:45 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 19:45 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっていない PCI <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 20:49:45 JST
crw------- 1 root root 14, 3 6月 21 19:47 /dev/dsp
crw------- 1 root root 14, 19 6月 21 19:47 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 19:47 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 19:47 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:00.0':
ID=="0000:04:00.0"
BUS=="pci"
DRIVER=="EMU10K1_Audigy"
SYSFS{msi_bus}==""
SYSFS{broken_parity_status}=="0"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 21:21:54 JST
crw------- 1 root root 14, 3 6月 21 21:18 /dev/dsp
crw------- 1 root root 14, 19 6月 21 21:18 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 21:18 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 21:18 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっていない PCI <=> soundUSB。ここでパーミッションに関する設定を加えたので/dev/dsp*が666になっている。
[root@KITCHEN01 ~]# date; ll /dev/so* /dev/dsp*
2008年 6月 21日 土曜日 21:41:23 JST
crw-rw-rw- 1 root root 14, 3 6月 21 21:40 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 21:40 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 21:40 /dev/soundPCI -> dsp1
lrwxrwxrwx 1 root root 3 6月 21 21:40 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:04:00.0':
ID=="0000:04:00.0"
BUS=="pci"
DRIVER=="EMU10K1_Audigy"
SYSFS{msi_bus}==""
SYSFS{broken_parity_status}=="0"
↓うまくいっていない そもそもSYMLINKが作られていない。このへんまで、設定ファイルをいろいろいじって迷走していた。
[root@KITCHEN01 ~]# date; ll /dev/sou* /dev/dsp*
2008年 6月 21日 土曜日 23:13:34 JST
ls: /dev/sou*: そのようなファイルやディレクトリはありません
crw-rw-rw- 1 root root 14, 3 6月 21 23:12 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 23:12 /dev/dsp1
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB。ここからはばっちり。
[root@KITCHEN01 ~]# date; ll /dev/sou* /dev/dsp*
2008年 6月 21日 土曜日 23:24:33 JST
crw-rw-rw- 1 root root 14, 3 6月 21 23:21 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 23:21 /dev/dsp1
lrwxrwxrwx 1 root root 3 6月 21 23:21 /dev/soundUSB -> dsp
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/sou* /dev/dsp*; udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
2008年 6月 21日 土曜日 23:27:10 JST
crw-rw-rw- 1 root root 14, 3 6月 21 23:26 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 23:26 /dev/dsp1
lrwxrwxrwx 1 root root 3 6月 21 23:26 /dev/soundUSB -> dsp
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/sou* /dev/dsp*; udevinfo -a -p `udevinfo -q path -n /dev/dsp`|head -n 18|tail -n 11
2008年 6月 21日 土曜日 23:28:30 JST
crw-rw-rw- 1 root root 14, 3 6月 21 23:28 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 23:28 /dev/dsp1
lrwxrwxrwx 1 root root 3 6月 21 23:28 /dev/soundUSB -> dsp
looking at device '/class/sound/dsp':
KERNEL=="dsp"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:3"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
↓うまくいっている USB <=> soundUSB
[root@KITCHEN01 ~]# date; ll /dev/sou* /dev/dsp*
2008年 6月 21日 土曜日 23:49:28 JST
crw-rw-rw- 1 root root 14, 3 6月 21 23:37 /dev/dsp
crw-rw-rw- 1 root root 14, 19 6月 21 23:37 /dev/dsp1
lrwxrwxrwx 1 root root 4 6月 21 23:37 /dev/soundUSB -> dsp1
[root@KITCHEN01 ~]# udevinfo -a -p `udevinfo -q path -n /dev/dsp1`|head -n 18|tail -n 11
looking at device '/class/sound/dsp1':
KERNEL=="dsp1"
SUBSYSTEM=="sound"
SYSFS{dev}=="14:19"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0':
ID=="5-7:1.0"
BUS=="usb"
DRIVER=="snd-usb-audio"
SYSFS{modalias}=="usb:v0582p0044d0107dcFFdsc00dpFFicFFisc01ip01"
SYSFS{bInterfaceProtocol}=="01"
*検索キー [#j860355d]
linux fedora core 6 udev udevinfo udevtest udevtrigger デバイス パスが変わる