zynq emmc 启动模式

原文地址:https://blog.csdn.net/vacajk/article/details/53908666

前面说的我的硬件上有一颗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分区可在系统升级时进行切换。好复杂,将来有时间再研究吧。
--------------------- 
作者:vacajk 
来源:CSDN 
原文:https://blog.csdn.net/vacajk/article/details/53908666 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Zynq是一款由Xilinx生产的高性能可编程SoC芯片,在其内部集成了ARM处理器和可编程逻辑单元。而eMMC(嵌入式多媒体卡)是一种常见的闪存存储解决方案,用于存储操作系统、应用程序以及数据。 Zynq可以通过eMMC启动,具体的步骤如下: 1. 配置引导模式:首先,需要在Zynq芯片的引导模式寄存器中配置从eMMC启动。这可以通过编程控制引脚或者采用硬件开关实现。 2. 烧录引导加载器:接下来,将引导加载器(bootloader)烧录到eMMC存储器中。引导加载器是一个小型的程序,负责初始化系统,并加载操作系统。 3. 配置引导加载器:在eMMC存储器中的引导加载器中,需要配置引导方式为从eMMC启动。这通常需要修改引导加载器的配置文件,以确保从eMMC正确加载操作系统。 4. 烧录操作系统:接下来,将操作系统映像文件烧录到eMMC存储器中。操作系统可以是Linux、Android等。 5. 引导启动:将Zynq芯片连接到适当的启动设备(如电源),按下重启按键或提供复位脉冲,Zynq芯片将引导加载器从eMMC存储器中加载到内存中,并执行它们。 6. 操作系统启动:一旦引导加载器被加载到内存中并执行,它们将负责初始化系统环境并加载操作系统。最终,操作系统将被成功加载和启动。 总的来说,Zynq通过设置引导模式、烧录引导加载器和操作系统,并进行正确的引导配置,可以从eMMC存储器中成功启动。这种启动方式使得Zynq能够快速、高效地运行各种应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值