linuxで/dev/下でデバイスノードを手動で作成する
linuxで/dev/下でデバイスノードを手動で作成する
/dev/ディレクトリの下には、uディスクのファイル/dev/sda、mmcカードのファイル/dev/mmcblk 0など、多くのデバイスノードファイルがあります.これらのファイルは、udevまたはmdevプログラムによってueventイベントが検出された後に自動的に作成されます.mknodコマンドで手動で作成することもできます.
次のmmcカードを例に、デバイスノードファイルの作成方法を説明します.
1.mknodコマンド
コマンドのフォーマットは、mknodデバイス名デバイスタイプ(文字:c,ブロック:b)プライマリデバイス番号スレーブデバイス番号
ここで、プライマリ・デバイス番号は異なる種類のデバイスを区別するために使用され、セカンダリ・デバイス番号は同じタイプの複数のデバイスを区別するために使用される.
したがって、デバイスノードを作成するには、デバイスタイプとそのプライマリスレーブデバイス番号を知る必要があります.
2.デバイスタイプの取得
デバイスが挿入されると、以下に示すように、/proc/devicesにデバイスのタイプが表示されます.文字デバイスとブロックデバイスがそれぞれ表示され、左側がプライマリデバイス番号、右側がデバイス名です.したがって、mmcカードはBlockデバイスに属し、主デバイス番号は179であり、デバイス名はmmcである.
3.デバイスのマスタスレーブ番号を取得する
/proc/devicesにはプライマリ・デバイス番号のみが表示されますが、デバイス番号からは表示されません.sysシステムから取得できます.以下に示します.
(1)/sys/block/にmmcカードデバイスに対応するディレクトリがmmcblk 0であることがわかる.
(2)mmcカードのマスターデバイス(MAJOR)が179、スレーブ番号(MINOR)が0、デバイスタイプ(DEVTYPE)がディスク(disk)であることを/sys/block/mmcblk 0/ueventノードで確認できます.
/sys/block/mmcblk 0/mmcblk 0 p 1ディレクトリは、ディスクにパーティションが1つあることを示します.
(3)
/sys/block/mmcblk 0/mmcblk 0 p 1/ueventノードでは、mmcカードのマスターデバイス(MAJOR)が179、スレーブデバイス番号(MINOR)が1、デバイスタイプ(DEVTYPE)がパーティション(partition)であることがわかります.
4.ノードの作成
mknodコマンドを使用して、ディスクとパーティションのノードをそれぞれ作成します.
5.パーティションのマウント
パーティションをマウントすると、mmcカードのファイルにアクセスできます.
6.ノードの削除
ノードを削除します.通常のファイルを削除するように、次のようにします.
さて、ここまで、ノードを手動で作成する方法をご紹介しました^-^.
/dev/ディレクトリの下には、uディスクのファイル/dev/sda、mmcカードのファイル/dev/mmcblk 0など、多くのデバイスノードファイルがあります.これらのファイルは、udevまたはmdevプログラムによってueventイベントが検出された後に自動的に作成されます.mknodコマンドで手動で作成することもできます.
次のmmcカードを例に、デバイスノードファイルの作成方法を説明します.
1.mknodコマンド
コマンドのフォーマットは、mknodデバイス名デバイスタイプ(文字:c,ブロック:b)プライマリデバイス番号スレーブデバイス番号
ここで、プライマリ・デバイス番号は異なる種類のデバイスを区別するために使用され、セカンダリ・デバイス番号は同じタイプの複数のデバイスを区別するために使用される.
したがって、デバイスノードを作成するには、デバイスタイプとそのプライマリスレーブデバイス番号を知る必要があります.
2.デバイスタイプの取得
デバイスが挿入されると、以下に示すように、/proc/devicesにデバイスのタイプが表示されます.文字デバイスとブロックデバイスがそれぞれ表示され、左側がプライマリデバイス番号、右側がデバイス名です.したがって、mmcカードはBlockデバイスに属し、主デバイス番号は179であり、デバイス名はmmcである.
/ # cat /proc/devices
Character devices:
1 mem
2 pty
3 ttyp
4 /dev/vc/0
...
254 ttySDIO
Block devices:
1 ramdisk
259 blkext
7 loop
179 mmc
/ #
3.デバイスのマスタスレーブ番号を取得する
/proc/devicesにはプライマリ・デバイス番号のみが表示されますが、デバイス番号からは表示されません.sysシステムから取得できます.以下に示します.
(1)/sys/block/にmmcカードデバイスに対応するディレクトリがmmcblk 0であることがわかる.
(2)mmcカードのマスターデバイス(MAJOR)が179、スレーブ番号(MINOR)が0、デバイスタイプ(DEVTYPE)がディスク(disk)であることを/sys/block/mmcblk 0/ueventノードで確認できます.
/sys/block/mmcblk 0/mmcblk 0 p 1ディレクトリは、ディスクにパーティションが1つあることを示します.
(3)
/sys/block/mmcblk 0/mmcblk 0 p 1/ueventノードでは、mmcカードのマスターデバイス(MAJOR)が179、スレーブデバイス番号(MINOR)が1、デバイスタイプ(DEVTYPE)がパーティション(partition)であることがわかります.
/ # ls /sys/block/
loop0 loop4 mmcblk0 ram11 ram15 ram5 ram9
loop1 loop5 ram0 ram12 ram2 ram6
loop2 loop6 ram1 ram13 ram3 ram7
loop3 loop7 ram10 ram14 ram4 ram8
/ # ls /sys/block/mmcblk0/
bdi device mmcblk0p1 removable slaves uevent
capability ext_range queue ro stat
dev holders range size subsystem
/ # cat /sys/block/mmcblk0/uevent
MAJOR=179
MINOR=0
DEVTYPE=disk
PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002
PHYSDEVBUS=mmc
PHYSDEVDRIVER=mmcblk
/ #
/ # cat /sys/block/mmcblk0/mmcblk0p1/uevent
MAJOR=179
MINOR=1
DEVTYPE=partition
PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002
PHYSDEVBUS=mmc
PHYSDEVDRIVER=mmcblk
/ #
4.ノードの作成
mknodコマンドを使用して、ディスクとパーティションのノードをそれぞれ作成します.
mknod /dev/mmcblk0 b 179 0
mknod /dev/mmcblk0p1 b 179 1
が作成されると、/dev/ディレクトリの下に作成されたノードが次のように表示されます./ # ls /dev/mmcblk0* -l
brw-r--r-- 1 root root 179, 0 Jan 1 00:34 /dev/mmcblk0
brw-r--r-- 1 root root 179, 1 Jan 1 00:36 /dev/mmcblk0p1
5.パーティションのマウント
パーティションをマウントすると、mmcカードのファイルにアクセスできます.
/ # mount /dev/mmcblk0p1 /mnt/
/ # ls /mnt/
a dd x.docx
/ #
6.ノードの削除
ノードを削除します.通常のファイルを削除するように、次のようにします.
/ # rm /dev/mmcblk0p1 -f
/ #
/ # ls /dev/mmcblk0* -l
brw-r--r-- 1 root root 179, 0 Jan 1 00:34 /dev/mmcblk0
/ #
さて、ここまで、ノードを手動で作成する方法をご紹介しました^-^.