web-dev-qa-db-ja.com

mknodを使用してデバイスファイルを手動で作成する方法

Linux 2.6.26.5組み込み。 Busybox Shell(initramfs)からルートファイルシステムを手動でマウントする必要があります。このLinuxカーネルはdevtmpfsを使用しないため、基本的なデバイスノードを手動で作成する必要があります。mknod(/dev/null/dev/zerodev/mtdblock {0-10}、ttys )。 /dev/mtdblockttysの正しい形式がわかりません。/dev/mtdblockと/ dev/mtdの両方のノードを作成する必要がありますか?デバイスはnand0に11個のMTDパーティションを作成します。デバイスに割り当てられたメジャー番号とマイナー番号はどこにありますか? ttyに対する同じ質問:5 /dev/tty4 ttyの正しいmknodコマンドは何ですか-それらは別の場所にありますか?

mknod -m 666 tty c 4 0
mknod -m 666 /dev/tty c 5 0

編集:パーティション、デバイス、ファイルシステム

# cat /proc/partitions
major minor  #blocks  name

  31     0        384 mtdblock0
  31     1        128 mtdblock1
  31     2      20352 mtdblock2
  31     3       7168 mtdblock3
  31     4      18816 mtdblock4
  31     5       2048 mtdblock5
  31     6       1024 mtdblock6
  31     7        512 mtdblock7
  31     8        128 mtdblock8
  31     9        512 mtdblock9
  31    10        512 mtdblock10
# cat /proc/devices
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 89 i2c
 90 mtd
108 ppp
128 ptm
136 pts
153 spi
204 ttyJ
254 cordless

Block devices:
  1 ramdisk
 31 mtdblock
 93 nftl
4
triwo

デバイスファイルは基本的にカーネル内のテーブルです。 C配列。

より正確には、C配列の2レベルのツリー構造:メジャー番号の上位レベルとマイナー番号の下位レベル。

ドライバー(およびカーネルコア)は、ドライバーハンドラーを登録できます。ドライバーは常にメジャー番号を使用します。たとえば、ソフトウェアraid( "md")はブロックメジャー9を使用します。

現在登録されているブロックデバイスと文字デバイスのリストは、/proc/devicesファイルで取得できます。

最後の答えはカーネルソースです。「(un)register_block_device」またはカーネルコアの同様の呼び出しがあります。それらを見つけて、grepしてください。そうすれば、完全なリストを取得できます。