別にXilinxの環境に限ったわけではなく、一般的なSDカードイメージのマウント方法です。
ここではVitis 2020.1で生成されたSDカードイメージをマウントします。
まずはfdiskでパーティションの確認です。
$ fdisk -l package/sd_card.img
ディスク package/sd_card.img: 3.5 GiB, 3271557120 バイト, 6389760 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8f2cc147
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
package/sd_card.img1 * 2048 2195455 2193408 1G 83 Linux
package/sd_card.img2 2195456 6496255 4300800 2.1G 83 Linux
ここでセクタサイズが512Byteであることと、各パーティションの開始セクタがわかりました。
パーティション1は次のようにマウントします。
マウント場所はカレントディレクトリのmntです。
$ sudo mount -o loop,offset=1048576 package/sd_card.img mnt
ここでoffsetは、セクタサイズ×開始セクタを指定します。
fdiskで調べたようにSDカードイメージのパーティション1は2,048セクタから始まり、セクタサイズが512なので次のようになります。
2,048×512 = 1,048,576
マウントしたmntディレクトリを確認します。
$ ls mnt
BOOT.BIN image.ub
Image mkbootbin.sh
binary_container_1.xclbin mksdcard.sh
bl31.elf pmufw.elf
build_boot.bif sample_app
core-image-minimal-ultra96v2.ext4 u-boot.elf
core-image-minimal-ultra96v2.tar.gz uEnv.txt
fsbl.elf zynqmp-ultra96-v2.dtb
ブートに必要なファイルがコピーされていますね。
私の場合は余計なファイルもコピーしていますが…
使い終わったらumountです。
$ sudo umount mnt
パーティション2も開始セクタから計算してマウントして中身を確認します。
$ sudo mount -o loop,offset=1124073472 package/sd_card.img mnt
$ ls mnt
bin dev home lost+found mnt run sys usr
boot etc lib media proc sbin tmp var
$ sudo umount mnt
意図した通りになっていますね。