前面说的个人硬件上有一颗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分区可在系统升级时进行切换。好复杂,未来有时间再研究吧。