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가 표시되어 있습니다.
나는 이 질문과 그 답변이 내 문제를 디버깅하는 데 매우 유용하다는 것을 알았으며 내 답변이 최신 커널을 사용하는 다른 사람들에게 도움이 되기를 바랍니다.