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である.
/ # 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
/ # 

さて、ここまで、ノードを手動で作成する方法をご紹介しました^-^.