手動でロードして対話できるカスタムカーネルモジュール(ArchLinux)があります。私がやりたいことは、起動時にロードすることです。これまでブート時にデバイスが表示されるようにしました/proc/devices
。
起動時にノードを作成する方法は私を悩ませます。 USBドライブをガイドとして使用する例のほとんどを見ましたが、udev
これは私には当てはまりません。実際のデバイスはカスタムIOカードです。キャラクターデバイスです。
以下は、シェルからデバイスをロードするスクリプトです(動作)。
#!/bin/sh
sudo insmod ./robsio.ko
DEV=`cat /proc/devices | grep robsio | awk '{print $1}'`
sudo mknod /dev/proc/robsio c $DEV 0
ベストアンサー1
作成したすべてのデバイスノードは、/lib/udev/devices
システム起動時にここにコピーされます。/dev/
DESCRIPTION
udevd listens to kernel uevents. For every event, udevd
executes matching instructions specified in udev rules. See
udev(7).
On startup the content of the directory /lib/udev/devices is
copied to /dev. If kernel modules specify static device
nodes, these nodes are created even wihtout a corresponding
kernel device, to allow on-demand loading of kernel modules.
Matching permissions specified in udev rules are applied to
these static device nodes.
しかし、ユーザーにとってより便利にしたい場合は、2つのアプローチを取ることができます。
ドライバコードを変更してデバイスノードを作成できます。フィールドがゼロでない場合は、
drivers/base/core.c::device_add(struct device *dev)
デバイスノードを作成できます。struct device
devt
if (MAJOR(dev->devt)) { error = device_create_file(dev, &devt_attr); if (error) goto ueventattrError; error = device_create_sys_dev_entry(dev); if (error) goto devtattrError; devtmpfs_create_node(dev); }
これは静的メジャー/マイナーを選択した場合にのみ機能するため、おそらく最善の方法ではありません。ただし、すべてのドキュメントではこれらの「静的デバイスノード」に非常に頻繁に言及しているため、静的デバイスノードを作成する余地がまだ残っている可能性があります。
デバイスにudevルールを提供できます。Daniel Drakeが素晴らしいチュートリアルを書いた。
udev(7)
公式文書より多くの情報を入手できます。