如何使用 Uboot 從 EMMC 的通用分區或引導分區載入文件
UBoot 是否能夠從 EMMC 的通用分區或引導分區通過 fatload/ext4load 引導?我能夠顯示來自使用者區域的文件,而不是作為硬體分區創建的分區。可以使用 UBoot 的“mmc hwpartition”命令創建這些分區。奇怪的是,UBoot 可以創建這些分區,但似乎無法使用它們。我正在使用Xilinx 的 UBoot的最新版本(2016.4) ,它基於UBoot
使用 UBoot 的“mmc info”命令,UBoot 肯定可以看到 Boot Partition 和 General Purpose Partitions (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)
GP 分區,當掛載在 linux 中時,包含我的根文件系統、核心映像等。我希望能夠通過 fatload/ext4load 命令從 GP 分區啟動,並將使用者區域用於儲存我的啟動文件的其他目的。
我找到了關於這個主題的其他文章,但是,他們似乎還沒有得到回答:https ://lists.denx.de/pipermail/u-boot/2014-July/184731.html
任何幫助,將不勝感激!
是的,您可以從 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 不知道必須重新讀取分區表,並且出於優化目的,它不會。我不得不在 blk_get_device_by_str 中的 part.c 中做一個小更新檔來強制 part_init 每次都執行。然後,當您執行“mmc 部分”時,您應該也會看到 GP 分區表,並且可以像往常一樣進行任何文件操作。不要忘記執行“mmc rescan”或任何 eMMC 重置都會失去 GP 狀態,您必須再次切換回 GP 才能讀取它。
我們已經設法從 U-Boot 訪問 GP 分區。由於不支持 MMC 5.1 版,U-boot 2017 無法辨識我們的 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 讀取它了