Uboot를 사용하여 EMMC의 일반 파티션 또는 부팅 파티션에서 파일을 로드하는 방법

Uboot를 사용하여 EMMC의 일반 파티션 또는 부팅 파티션에서 파일을 로드하는 방법

UBoot는 fatload/ext4load를 통해 EMMC의 일반 파티션이나 부팅 파티션에서 부팅할 수 있습니까? 사용자 영역에 파일을 표시할 수 있지만 하드웨어 파티션으로 생성된 파티션은 표시할 수 없습니다. 이러한 파티션은 UBoot의 "mmc hwpartition" 명령을 사용하여 생성할 수 있습니다. 이상한 점은 UBoot가 이러한 파티션을 생성할 수 있지만 사용할 수는 없다는 것입니다. 최신버전(2016.4)을 사용하고 있습니다.자일링스 UBoot, 이는 다음을 기반으로 합니다.시스템 시작

UBoot의 "mmc info" 명령을 사용하면 UBoot는 부팅 파티션과 일반 파티션(GP 1/2/3/4)을 확실히 볼 수 있습니다.

zynq-uboot> mmc info
Device: sdhci@e0100000
Manufacturer ID: fe
OEM: 14e
Name: MMC04
Tran Speed: 52000000
Rd Block Len: 512
MMC version 4.4.1
High Capacity: Yes
Capacity: 2.7 GiB
Bus Width: 4-bit
Erase Group Size: 4 MiB
HC WP Group Size: 4 MiB
User Capacity: 2.7 GiB
Boot Capacity: 16 MiB ENH
RPMB Capacity: 128 KiB ENH
GP1 Capacity: 128 MiB
GP2 Capacity: 64 MiB
GP3 Capacity: 128 MiB
GP4 Capacity: 512 MiB

일반적으로 UBoot 명령인 fatload/fatls 또는 ext4load/ext4ls를 사용하여 파일 시스템 유형에 따라 특정 파티션의 내용을 표시할 수 있습니다.

fatls 명령의 작업 예 - 이는 사용자 영역(위 크기 2.7GB)의 내용을 표시합니다.

zynq-uboot> fatls mmc 0:1
    17488   devicetree.dtb
   962589   fpga.bit
       54   uenv.txt
  6709360   uimage
  1555344   boot.bin
       33   image.chk
 83493724   image.tgz

7 file(s), 0 dir(s)

Linux에 마운트하면 GP 파티션에 루트 파일 시스템, 커널 이미지 등이 포함됩니다. fatload/ext4load 명령을 통해 GP 파티션에서 부팅하고 부팅 파일을 저장하는 다른 목적으로 사용자 영역을 사용할 수 있기를 원합니다.

이 주제에 대한 다른 게시물을 찾았지만 아직 답변이 없는 것 같습니다.https://lists.denx.de/pipermail/u-boot/2014-July/184731.html

어떤 도움이라도 대단히 감사하겠습니다!

답변1

U-Boot에서 GP 파티션에 성공적으로 액세스했습니다. U-boot 2017은 MMC 버전 5.1을 지원하지 않기 때문에 GP 파티션을 인식하지 못했습니다. (마지막으로 지원된 5.0이므로 어떤 이유로 버전 4.0으로 대체되었습니다.) U-Boot 코드에서 버전 5.1을 활성화한 후 다음과 같이 인식되었습니다.

=> mmc info
Device: OMAP SD/MMC
Manufacturer ID: 11
OEM: 100
Name: 008G3 
Tran Speed: 52000000
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 8-bit
Erase Group Size: 4 MiB
HC WP Group Size: 4 MiB
User Capacity: 7.3 GiB
Boot Capacity: 8 MiB ENH
RPMB Capacity: 4 MiB ENH
GP1 Capacity: 4 MiB ENH WRREL
GP2 Capacity: 4 MiB ENH WRREL

이제 U-Boot(환경 또는 콘솔)에서 다음을 수행할 수 있습니다. (참고: eMMC는 mmc 장치 0으로 연결됩니다.

mmc dev 0 #select device 0
mmc partconf-partenable 0; #store the active bootpartition
mmc partconf 0 1 7 4; #configure device 0 (first parameter) to use User partiton (the 7) to GP1 (first GP) (4)
mmc partconf 0 1 7 5; #configure device 0 (first) to use userpartition second (GP2) (parameter 5)
#Now display partition (which won't work, explained below)
=> mmc part

Partition Map for MMC device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors UUID        Type
bad MBR sector signature 0x0000
=>
#now load a file with filename from the ext4 filesystem (see below)
=> ext4load mmc 0:0 0x80000000 FILE_NAME.txt
15 bytes read in 2 ms (6.8 KiB/s)
#restore active partition
=> mmc partconf 0 1 ${boot_part_enabled} 1 #restore the boot_partition (this parameter boot_part_enabled is set from 'mmc partconf-partenable 0' at the beginning)

이를 위해 Linux에서 GP 파티션을 미리 포맷하고 생성했습니다.

mkfs.ext4 /dev/mmcblk1gp1
mount /dev/mmcblk1gp1 /media/gp1
echo "SOMELINEOFTEXT" > /media/gp1/FILE_NAME.txt
reboot

이제 u-boot에서 읽을 수 있습니다

답변2

예, uboot에서 GP 파티션에 액세스할 수 있습니다.

여기에 명시된 바와 같이http://u-boot.10912.n7.nabble.com/How-to-access-GP-partitions-from-uboot-2015-04-td212394.html"mmc partconf" 명령의 마지막 매개변수를 사용하여 eMMC에 다른 부분(예: userland 대신 GP)을 가져오도록 지시할 수 있습니다. 이 명령을 실행하고 "mmc read" 명령을 실행하면 다른 지역에서 읽고 있음을 알 수 있습니다.

그래도 조심하세요. 적어도 내 버전의 u-boot(2017)에서는 u-boot가 파티션 테이블을 다시 읽어야 한다는 사실을 모르고 최적화 목적으로는 알지 못합니다. 매번 part_init가 실행되도록 하려면 blk_get_device_by_str의 part.c에 작은 패치를 만들어야 했습니다. 그런 다음 "mmc 부분"을 실행하면 GP 파티션 테이블도 볼 수 있으며 정상적으로 파일 작업을 수행할 수 있습니다. "mmc 재검색"을 수행하거나 eMMC를 재설정하면 GP 상태가 손실되며 이를 읽으려면 GP로 다시 전환해야 한다는 점을 잊지 마세요.

관련 정보