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.7 GB)の内容を表示します。
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に他の部分(ユーザーランドではなくGPなど)をインポートするように指示できます。このコマンドを実行して「mmc read」コマンドを実行すると、他の地域で読み取られていることがわかります。
それでも注意してください。少なくとも私のバージョンのu-boot(2017)では、u-bootがパーティションテーブルを再度読み取る必要があることを知らず、最適化の目的ではわかりません。 part_initを毎回実行するには、blk_get_device_by_strのpart.cに小さなパッチを作成する必要がありました。その後、「mmc部分」を実行すると、GPパーティションテーブルも表示され、正常にファイル操作を実行できます。 「mmcの再スキャン」を実行するか、eMMCをリセットするとGPの状態が失われ、それを読むにはGPに戻す必要があることを忘れないでください。