BLFS が扱うパッケージにおいて、あるいはそれ以外のものであっても、それらが取り扱うデバイスは、たいていは udev が適切に認識してくれます。 これは LFS
においてインストールしたデフォルトのルール、すなわち /etc/udev/rules.d
配下にあるファイルを用いて行われます。
しかし場合によっては、ルールを修正しなければならない状況も発生します。
システム内にサウンドカードが複数あった場合、デフォルトのサウンドカードはランダムに決定されます。
サウンドカードの認識順を適切に制御する方法は、それらに対するドライバーが、カーネルモジュールとなっているか否かによって異なります。
サウンドカードのドライバーが、カーネルに組み込まれてコンパイルされている場合、その制御は /boot/grub/grub.cfg
ファイル内のカーネルコマンドラインパラメーターによって行われます。 例えば FM801 カードと SoundBlaster PCI
カードがシステムに搭載されているとします。 この場合、以下のコマンドラインを付け加えることになります。
snd-fm801.index=0 snd-ens1371.index=1
サウンドカードのドライバーがカーネルモジュールとしてビルドされている場合は、/etc/modprobe.conf
ファイル内にて設定される順で認識されるものとなります。
具体例としては以下のようになります。
options snd-fm801 index=0
options snd-ens1371 index=1
USB デバイスは、通常は二種類のデバイスノードに関連づけされます。
その 1 つは、デバイス固有のドライバーによって生成されるものです。 (カーネル内の usb_storage/sd_mod や usblp などです。) 例えば USB 大容量ストレージデバイスが /dev/sdb として、また USB プリンターが /dev/usb/lp0 として、それぞれ認識されているとします。 これらのデバイスノードは、デバイス固有のドライバーがロードされて初めて生成されます。
2 つめの種類は、(BBB をバス番号、DDD をデバイス番号とするときに /dev/bus/usb/BBB/DDD のようなもので) カーネルドライバーとして存在していなくても生成されるデバイスノードです。 このような "生の" USB デバイスノードを利用して、アプリケーションはデバイスからのどのような USB パケットであっても、あたかもカーネルドライバーがあるかのようにしてやり取りが出来ます。
Access to raw USB device nodes is needed when a userspace program is acting as a device driver. However, for the program to open the device successfully, the permissions have to be set correctly. By default, due to security concerns, all raw USB devices are owned by user root and group root, and have 0664 permissions (the read access is needed, e.g., for lsusb to work and for programs to access USB hubs). Packages (such as SANE and libgphoto2) containing userspace USB device drivers also ship udev rules that change the permissions of the controlled raw USB devices. That is, rules installed by SANE change permissions for known scanners, but not printers. If a package maintainer forgot to write a rule for your device, report a bug to both BLFS (if the package is there) and upstream, and you will need to write your own rule.
Before Linux-2.6.15, raw USB device access was performed not with /dev/bus/usb/BBB/DDD device nodes, but with /proc/bus/usb/BBB/DDD pseudofiles. Some applications still use only this deprecated technique and can't use the new device nodes. They cannot work with Linux kernel version 3.5 or newer. If you need to run such an application, contact the developer of it for a fix.
Fine-tuning of device attributes such as group name and permissions
is possible by creating extra udev
rules, matching on something like this. The vendor and product can
be found by searching the /sys/devices
directory entries or using
udevadm info after
the device has been attached. See the documentation in the current
udev directory of /usr/share/doc
for details.
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
GROUP:="scanner", MODE:="0660"
The above line is used for descriptive purposes only. The scanner udev rules are put into place when installing SANE-1.2.1.
In some cases, it makes sense to disable udev completely and create static devices. Servers are one example of this situation. Does a server need the capability of handling dynamic devices? Only the system administrator can answer that question, but in many cases the answer will be no.
If dynamic devices are not desired, then static devices must be
created on the system. In the default configuration, the
/etc/rc.d/rcS.d/S10udev
boot script
mounts a tmpfs
partition over the
/dev
directory. This problem can be
overcome by mounting the root partition temporarily:
If the instructions below are not followed carefully, your system could become unbootable.
mount --bind / /mnt cp -a /dev/* /mnt/dev rm /etc/rc.d/rcS.d/{S10udev,S50udev_retry} umount /mnt
At this point, the system will use static devices upon the next reboot. Create any desired additional devices using mknod.
If you want to restore the dynamic devices, recreate the
/etc/rc.d/rcS.d/{S10udev,S50udev_retry}
symbolic
links and reboot again. Static devices do not need to be removed
(console and null are always needed) because they are covered by
the tmpfs
partition. Disk usage for
devices is negligible (about 20–30 bytes per entry.)
If the initial boot process does not set up the /dev/dvd
device properly, it can be installed
using the following modification to the default udev rules. As the
root
user, run:
sed '1d;/SYMLINK.*cdrom/ a\ KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"' \ /lib/udev/rules.d/60-cdrom_id.rules > /etc/udev/rules.d/60-cdrom_id.rules