前面說的個人硬件上有一顆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分區可在系統升級時進行切換。好複雜,未來有時間再研究吧。