博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
-03-PetaLinux通过eMMC方式启动【Xilinx-Petalinux学习】
阅读量:7173 次
发布时间:2019-06-29

本文共 4346 字,大约阅读时间需要 14 分钟。

前面说的我的硬件上有一颗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/mmcblk0The 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): pDisk /dev/mmcblk0: 3850 MB, 3850371072 bytes4 heads, 16 sectors/track, 117504 cylindersUnits = cylinders of 64 * 512 = 32768 bytes        Device Boot      Start         End      Blocks  Id SystemCommand (m for help): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-117504, default 1): Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-117504, default 117504): +128MCommand (m for help): tPartition number (1-4): 1Hex 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): bChanged system type of partition 1 to b (Win95 FAT32)Command (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table mmcblk0: p1root@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/usbmkdir /mnt/emmc#挂载usb和emmcmount /dev/sda1 /mnt/usbmount /dev/mmcblk0p1 /mnt/emmc#复制image.ub到emmc第一个分区mmcblk0p1cp /mnt/usb/image.ub /mnt/emmc#复制BOOT_EMMC.bin到QSPI FLASH第一个分区mtd0flashcp /mnt/usb/BOOT_EMMC.bin /dev/mtd0#接触挂载umount /mnt/usbumount /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

你可能感兴趣的文章
关于“问吧”调查问卷的心得体会
查看>>
PHP基础笔记
查看>>
Android 音视频深入 十八 FFmpeg播放视频,有声音(附源码下载)
查看>>
扩展KMP模板
查看>>
php 分页原理+分页代码+分页类制作
查看>>
CSS选择器要点笔记
查看>>
python测试框架nose
查看>>
2017 济南综合班 Day 4
查看>>
[USACO Mar08] 牛跑步
查看>>
《呐喊》自序
查看>>
feathers ui 鼠标移出事件
查看>>
Spring Boot项目端口8080被占用的解决方法
查看>>
maven工程下get的URI中带中文名称乱码解决
查看>>
为什么内部类访问的外部变量需要使用final修饰
查看>>
【原创】40亿个数字,找出其中出现过两次的字符
查看>>
《Effective C#》快速笔记(二)- .NET 资源托管
查看>>
UVa294 Divisors
查看>>
洛谷P3406 海底高铁
查看>>
HTML学习
查看>>
Warriors of the Visual Studio, Assemble! (Visual Studio的勇士们,汇编吧!)
查看>>