linux读取emmc命令,-03-PetaLinux通过eMMC方式启动【Xilinx-Petalinux学习】

前面说的我的硬件上有一颗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卡又有eMMC,一般情况下SD卡会是mmcblk0,eMMC会是mmcblk1)

启动板子,输入用户名密码后,进行分区。按照手册上的说明,分一个128MB的分区出来,并格式化成FAT32.

下面是我的分区和格式化过程:

root@ifc_petalinux:~# fdisk /dev/mmcblk0

The number of cylindersfor this disk is set to 117504.

Thereis nothing wrong with that, but this is larger than 1024,

and couldincertain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software fromother OSs

(e.g., DOS FDISK, OS/2FDISK)

Command (mforhelp): p

Disk/dev/mmcblk0: 3850 MB, 3850371072bytes4 heads, 16 sectors/track, 117504cylinders

Units= cylinders of 64 * 512 = 32768bytes

Device Boot Start End Blocks Id System

Command (mforhelp): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1First cylinder (1-117504, default 1): Using default value 1Last cylinder or+size or +sizeM or +sizeK (1-117504, default 117504): +128M

Command (mforhelp): t

Partition number (1-4): 1Hex code (type L to list codes): L0 Empty 1b Hidden Win95 FAT32 9f BSD/OS1FAT12 1c Hidden W95 FAT32 (LBA) a0 Thinkpad hibernation4 FAT16 <32M 1e Hidden W95 FAT16 (LBA) a5 FreeBSD5Extended 3c Part.Magic recovery a6 OpenBSD6 FAT16 41PPC PReP Boot a8 Darwin UFS7 HPFS/NTFS 42SFS a9 NetBSD

a OS/2 Boot Manager 63GNU HURD or SysV ab Darwin boot

b Win95 FAT3280Old Minix b7 BSDI fs

c Win95 FAT32 (LBA)81 Minix /old Linux b8 BSDI swap

e Win95 FAT16 (LBA)82Linux swap be Solaris boot

f Win95 Ext'd (LBA) 83 Linux eb BeOS fs

11 Hidden FAT12 84 OS/2hidden C: drive ee EFI GPT12 Compaq diagnostics 85 Linux extended ef EFI (FAT-12/16/32)14 Hidden FAT16 <32M 86 NTFS volume set f0 Linux/PA-RISC boot16 Hidden FAT16 87 NTFS volume setf2 DOS secondary17 Hidden HPFS/NTFS 8e Linux LVM fd Linux raid autodetect

Hex code (type L to list codes): b

Changed system type of partition1to b (Win95 FAT32)

Command (mforhelp): 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分区可在系统升级时进行切换。好复杂,将来有时间再研究吧。

yuan :https://blog.csdn.net/vacajk/article/category/6645367

你可能感兴趣的:(linux读取emmc命令)