usb_gadget/g_multi/mass_storage에서 사용되는 .img 파일을 마운트하고 읽는 방법은 무엇입니까?

usb_gadget/g_multi/mass_storage에서 사용되는 .img 파일을 마운트하고 읽는 방법은 무엇입니까?

Pocket Beagle은 debian9.9를 사용하며 내 Windows 컴퓨터에서 대용량 저장 장치로 나타납니다. 대용량 저장 장치(드라이브라고 부르겠습니다)에서 사용하는 백업 파일을 찾았습니다. 이 드라이브를 마운트하고 해당 드라이브의 파일을 내 홈 디렉터리로 복사하고 싶습니다. 불행하게도 드라이브를 장착했을 때 MSD 모드에서 드라이브에 넣었던 모든 것이 사라진 것을 발견했습니다. 무엇이 잘못될 수 있나요?

Pocket Beagle은 이더넷, 직렬 포트 및 대용량 저장 장치용으로 구성된 g_multi 가젯을 사용합니다. 가젯은 시작 시 다음 스크립트를 통해 구성됩니다 /opt/scripts/boot/am335x_evm.sh. g_multi 가젯은 현재 사용되지 않으므로 구성하기 전에 드라이브에 액세스할 수 있어야 한다고 생각합니다. 저는 다음과 같은 실험을 설정했습니다.

FAT32 파티션을 생성 /root/data/backing_file하고 해당 파티션에 대한 심볼릭 링크를 지정했습니다 /var/local/bb_usb_mass_storage.img.

그런 다음 보드를 연결하고 드라이브에 파일을 생성한 다음 장치를 재부팅할 때 파일을 볼 수 있습니다. 그런데 의 시작 부분에 다음 코드를 넣으면 am335x_evm.sh드라이브가 지워지는 것 같습니다.

losetup -o 1048576 /dev/loop0 /root/data/backing_file
mkdosfs -F 32 /dev/loop0
mount -t vfat /dev/loop0 /mnt/loop
ls /mnt/loop >> /var/log/messages
umount /dev/loop0
losetup -d /dev/loop0

답변1

다음과 같은 백업 저장소를 만들어야 한다는 것이 밝혀졌습니다.

losetup -o 1048576 /dev/loop0 /root/data/backing_file 
mkdosfs -F 32 /dev/loop0  # note: only do this once!
mount -t vfat /dev/loop0 /mnt/loop
#put something in /mnt/loop
umount /dev/loop0
losetup -d /dev/loop0

그런 다음 다음과 같이 백업 저장소에 액세스해야 합니다.

losetup -o 1048576 /dev/loop0 /root/data/backing_file 
mount -t vfat /dev/loop0 /mnt/loop
# take something from /mnt/loop
umount /dev/loop0
losetup -d /dev/loop0

백업 스토리지를 위한 파티션 테이블을 생성하고 해당 파티션에 스토리지로 또 다른 파티션을 생성해야 합니다. 대신 을 호출하여 액세스하려고 할 때마다 "버킷"을 삭제합니다 mkdosfs.

관련 정보