Archlinuxのmknod永続コマンド

Archlinuxのmknod永続コマンド

手動でロードして対話できるカスタムカーネルモジュール(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つのアプローチを取ることができます。

  1. ドライバコードを変更してデバイスノードを作成できます。フィールドがゼロでない場合は、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);
        }
    

    これは静的メジャー/マイナーを選択した場合にのみ機能するため、おそらく最善の方法ではありません。ただし、すべてのドキュメントではこれらの「静的デバイスノード」に非常に頻繁に言及しているため、静的デバイスノードを作成する余地がまだ残っている可能性があります。

  2. デバイスにudevルールを提供できます。Daniel Drakeが素晴らしいチュートリアルを書いた。udev(7)公式文書より多くの情報を入手できます。

おすすめ記事