【Xilinx-Petalinux學習】-03-PetaLinux通過eMMC方式啟動


前面說的我的硬件上有一顆eMMC的芯片,型號是MTFC4GACAJCN-4M IT,有4GB的容量。

BOOT.bin的文件較小,只有不到3MB,但是image.ub的文件根據不同的需求,將來可能會越來越大,將它們都放在16MB的QSPI Flash上有點危險,而且下載起來也不太方便。

所以准備將u-boot和kernel的存儲位置分開,將包含u-boot的BOOT.bin燒錄在QSPI Flash當中,將image.ub文件直接放在eMMC中進行啟動。

 

step1:eMMC存儲空間分區

參考文檔網址:http://zedboard.org/sites/default/files/design/PicoZed_Petalinux_2015_2_eMMC_boot_v3.0_0.zip

前面我配置的方式是BOOT.bin和image.ub都在QSPI Flash當中,這樣我才能正常啟動Linux,來給eMMC提前進行分區。

 

因為我的板子上沒有SD卡,所以禁用了PS的SD0外設,最終我的eMMC芯片掛載到了mmcblk0上。(假如既有SD卡<SD0>又有eMMC<SD1>,一般情況下SD卡會是mmcblk0,eMMC會是mmcblk1)

啟動板子,輸入用戶名密碼后,進行分區。按照手冊上的說明,分一個128MB的分區出來,並格式化成FAT32.

下面是我的分區和格式化過程:

 

root@ifc_petalinux:~# fdisk /dev/mmcblk0

The number of cylinders for this disk is set to 117504.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/mmcblk0: 3850 MB, 3850371072 bytes
4 heads, 16 sectors/track, 117504 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

        Device Boot      Start         End      Blocks  Id System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-117504, default 1): Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-117504, default 117504): +128M


Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): L

 0 Empty                  1b Hidden Win95 FAT32     9f BSD/OS                
 1 FAT12                  1c Hidden W95 FAT32 (LBA) a0 Thinkpad hibernation  
 4 FAT16 <32M             1e Hidden W95 FAT16 (LBA) a5 FreeBSD               
 5 Extended               3c Part.Magic recovery    a6 OpenBSD               
 6 FAT16                  41 PPC PReP Boot          a8 Darwin UFS            
 7 HPFS/NTFS              42 SFS                    a9 NetBSD                
 a OS/2 Boot Manager      63 GNU HURD or SysV       ab Darwin boot           
 b Win95 FAT32            80 Old Minix              b7 BSDI fs               
 c Win95 FAT32 (LBA)      81 Minix / old Linux      b8 BSDI swap             
 e Win95 FAT16 (LBA)      82 Linux swap             be Solaris boot          
 f Win95 Ext'd (LBA)      83 Linux                  eb BeOS fs               
11 Hidden FAT12           84 OS/2 hidden C: drive   ee EFI GPT               
12 Compaq diagnostics     85 Linux extended         ef EFI (FAT-12/16/32)    
14 Hidden FAT16 <32M      86 NTFS volume set        f0 Linux/PA-RISC boot    
16 Hidden FAT16           87 NTFS volume set        f2 DOS secondary         
17 Hidden HPFS/NTFS       8e Linux LVM              fd Linux raid autodetect 
Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
 mmcblk0: p1
root@ifc_petalinux:~# 

mkdosfs -F 32 /dev/mmcblk0p1

 

 

 

step2:配置u-boot從eMMC引導啟動PetaLinux

執行命令:

petalinux-config

配置啟動方式,將kernel啟動配置為eMMC啟動:

#Subsystem AUTO Hardware Settings --->
#   Advanced bootable images storage Settings --->
#       boot image settings --->
#           image storage media ---> primary flash
#       kernel image settings --->
#           image storage media ---> primary sd
#       SD/SDIO Settings ----> ps_sd1

其中的SD/SDIO Settings一定要配置為eMMC對應的SD1。

重新編譯:

petalinux-build

編譯完成后,重新使用Windows的Xilinx SDK將:zynq_fsbl.elf--->IFC_TOP_wrapper.bit--->u-boot.elf三個文件打包成BOOT.bin文件,改名為BOOT_EMMC.bin。

將BOOT.bin和image.ub文件復制到U盤上,然后把U盤插到板子的USB口。

mkdir /mnt/usb
mkdir /mnt/emmc
#掛載usb和emmc
mount /dev/sda1 /mnt/usb
mount /dev/mmcblk0p1 /mnt/emmc
#復制image.ub到emmc第一個分區mmcblk0p1
cp /mnt/usb/image.ub /mnt/emmc
#復制BOOT_EMMC.bin到QSPI FLASH第一個分區mtd0
flashcp /mnt/usb/BOOT_EMMC.bin /dev/mtd0
#接觸掛載
umount /mnt/usb
umount /mnt/emmc

假如出現:FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

說明上次U盤沒有正確移除,可能會造成image.ub的復制錯誤。需要在windows中修復一下U盤,再重新進行上面的操作。

重新啟動板子:

shutdown now -r

這一次板子就能夠從QSPI運行FSBL,加載bit,運行u-boot,

然后u-boot從eMMC芯片引導加載Linux操作系統。

 

eMMC最終被我分為了3個區,

第一個分區用來存放image.ub或者將來的設備樹等文件,128MB

第二個分區用來存放用戶數據,2048MB

第三個分區用來存放庫文件,如opencv的庫,剩余的1個多GB

 

待改進:

eMMC默認是有兩個16MB的boot分區的,而且還支持加密什么的,是否可以把u-boot和image.ub放到里面去。

並且兩個boot分區可在系統升級時進行切換。好復雜,將來有時間再研究吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM