【Xilinx-Petalinux學習】-03-PetaLinux經過eMMC方式啓動

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

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

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

 

step1:eMMC存儲空間分區app

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

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

 

由於個人板子上沒有SD卡,因此禁用了PS的SD0外設,最終個人eMMC芯片掛載到了mmcblk0上。(假如既有SD卡<SD0>又有eMMC<SD1>,通常狀況下SD卡會是mmcblk0,eMMC會是mmcblk1)加密

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

下面是個人分區和格式化過程: 操作系統

 

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引導啓動PetaLinuxcode

執行命令:

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分區可在系統升級時進行切換。好複雜,未來有時間再研究吧。

相關文章
相關標籤/搜索