Beaglebone BlackでeMMCを分割しようとしています。 /dev/mmcblk1を分割した方法は次のとおりです。
root@beaglebone:~# fdisk -l /dev/mmcblk1
Disk /dev/mmcblk1: 3.6 GiB, 3825205248 bytes, 7471104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9ccd5613
Device Boot Start End Sectors Size Id Type
/dev/mmcblk1p1 * 2048 206847 204800 100M c W95 FAT32 (LBA)
/dev/mmcblk1p2 206848 7112703 6905856 3.3G 5 Extended
/dev/mmcblk1p5 208896 823295 614400 300M 83 Linux
/dev/mmcblk1p6 825344 1849343 1024000 500M 83 Linux
/dev/mmcblk1p7 1851392 2875391 1024000 500M 83 Linux
/dev/mmcblk1p8 2877440 3901439 1024000 500M 83 Linux
/dev/mmcblk1p9 3903488 4927487 1024000 500M 83 Linux
/dev/mmcblk1p10 4929536 7026687 2097152 1G 83 Linux
これが正確にどのように見えるかです。パーティション 1 は基本パーティション、パーティション 2 は拡張パーティション、残りのパーティションは論理パーティションです。ただし、デバイスを一覧表示すると、パーティション1、2、5、6、7のみが表示されます。
root@beaglebone:~# ls -l /dev/mmcblk1p*
brw-rw---- 1 root disk 179, 9 Mar 2 23:53 /dev/mmcblk1p1
brw-rw---- 1 root disk 179, 10 Mar 2 23:53 /dev/mmcblk1p2
brw-rw---- 1 root disk 179, 13 Mar 2 23:53 /dev/mmcblk1p5
brw-rw---- 1 root disk 179, 14 Mar 2 23:53 /dev/mmcblk1p6
brw-rw---- 1 root disk 179, 15 Mar 2 23:53 /dev/mmcblk1p7
lsblkも同じように表示されます。
root@beaglebone:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 7.2G 0 disk
└─mmcblk0p1 179:1 0 3.3G 0 part /
mmcblk1 179:8 0 3.6G 0 disk
├─mmcblk1p1 179:9 0 100M 0 part
├─mmcblk1p2 179:10 0 1K 0 part
├─mmcblk1p5 179:13 0 300M 0 part
├─mmcblk1p6 179:14 0 500M 0 part
└─mmcblk1p7 179:15 0 500M 0 part
mmcblk1boot0 179:16 0 4M 1 disk
mmcblk1boot1 179:24 0 4M 1 disk
再起動後も同様です。 Debian 9(Linux beaglebone 4.4.84-ti-r120)を実行しているSDカードから起動しようとしています。
ここで何が起こっているのか知っている人はいますか?一種の限界に達しましたか?
答え1
少なくともカーネル開発者に関する限り、MMCには4つのパーティションという固定された制限があります。 https://elixir.bootlin.com/linux/v3.3/source/drivers/mmc/card/block.c#L1587
編集する:
この質問はすでにリクエストされています。根そしてBeaglebone BlackカーネルマネージャーであるRobert C Nelsonの助けを借りて答えを受けました。答えは基本的に同じです出版社:Ignacio Vazquez Abramsただし、起動パラメータに関する情報が不足しています。
mmcblk: using 16 minors per device
ソースコードを読み、ブートmmcblk.perdev_minors=16
パラメータが正しく機能したら、カーネルを印刷する必要があります。https://elixir.bootlin.com/linux/v4.4.84/source/drivers/mmc/card/block.c#L2694
答え2
次のSD / MMCカードの起動は、CONFIG_MMC_BLOCK_MINORSを使用して設定するか、/ modprobe起動時にmmcblk.perdev_minorsオプションを使用して上書きできます。これにより、各カード間のオフセットがデフォルト値8の代わりに設定された値に調整されます。
したがって、mmcblk.perdev_minors=16
カーネルのブートラインを渡します。
答え3
Daveと同様に、カーネルパラメータmmcblk.perdev_minors = 16を渡したことは役に立ちませんでした(例えば、私のカーネルはCONFIG_MMC_BLOCK = yで構成されています)。 extract-vmlinuxスクリプトを使用して圧縮されていないバイナリから文字列を検索したところ、カーネルに次のパラメータが必要であることがわかりました。
mmc_block.perdev_minors=16
mmcblk を mmc_block に置き換えると、すべてのパーティションを表示できます。私はカーネル4.4.75を使用していますが、ドキュメントにはそのソースツリーにmmc_blockの代わりにmmcblkが表示されています。
私はこの質問とその答えが私の問題をデバッグするのに非常に役に立つことを知り、私の答えが最新のカーネルを使用している他の人に役立つことを願っています。