【Xilinx-Petalinux学习】-03-PetaLinux通过eMMC方式启动
前面说的我的硬件上有一颗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分区可在系统升级时进行切换。好复杂,将来有时间再研究吧。
【Xilinx-Petalinux学习】-03-PetaLinux通过eMMC方式启动的更多相关文章
- -03-PetaLinux通过eMMC方式启动【Xilinx-Petalinux学习】
前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量. BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越 ...
- 【mongodb系统学习之六】mongodb配置文件方式启动
六.mongodb可以用配置文件启动,配置文件配好后,每次指定文件就好,而不用每次写一长串: 1).创建配置文件: 2).配置(例如指定数据存储目录,日志存储文件,后台进程,端口号等): 3).配置文 ...
- Java学习03
Java学习03 1.java面试一些问题 一.什么是变量 变量是指在程序执行期间可变的数据.类中的变量是用来表示累的属性的,在编程过程中,可以对变量的值进行修改.变量通常是可变的,即值是变化的 二. ...
- ThinkPhp学习03
原文:ThinkPhp学习03 一.ThinkPHP 3 的输出 (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出 想分配变量可以使用as ...
- Xilinx约束学习笔记(一)—— 约束方法学
<Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...
- spring 学习之 bean 的注入方式 property和constructor-arg的使用方式
spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...
- JavaScript学习03 JS函数
JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...
- Java虚拟机JVM学习03 连接过程:验证、准备、解析
Java虚拟机JVM学习03 连接过程:验证.准备.解析 类被加载后,就进入连接阶段. 连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去. 连接阶段三个步骤:验证.准备和解析. 类 ...
- JVM学习03:性能监控工具
JVM学习03:性能监控工具 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 性能监控工具知识要点Xmind梳理 案例分析 案例分析1-JPS 案例分 ...
随机推荐
- 善用log日志
#-*- coding:utf-8 -*- import logging logger = logging.getLogger() #定义一个log日志对象 hdlr = logging.FileHa ...
- Zencart批量删除无图片产品
Zencart批量删除无图片产品 2012-04-23 07:26:18| 分类: 默认分类 |字号 订阅 转自 http://zhongjia33.blog.163.com/blog/#m=0 ...
- 转 OGG add trandata 到底做了什么
有的时候我们做OGG的时候add trandata会出现异常. 这里就剖析一下add trandata到底做了什么 GGSCI (yjfora81 as ggs_admin@testdb) 2> ...
- HDU 4287 Intelligent IME(字典树)
在我没用hash之前,一直TLE,字符串处理时间过长,用了hash之后一直CE,(请看下图)我自从经历我的字典树G++MLE,C++AC以后,一直天真的用C++,后来的CE就是因为这个,G++才支持这 ...
- 利用cookie实现“只弹出一次窗口”的JS代码
弹出式窗口通常被用来做弹出广告(CPM),其实用弹出式窗口用来做消息通知也是最普遍而且是最有效的方法,但如果每次刷新页面特别是刷新首页都要弹出窗口的话,那绝对是让访问者厌烦的事情. 比如你将上面的脚本 ...
- 同时运行ecstore1.2与ecstore2.0的解决方案
解决方法: php.ini中 zend_loader.license_path指向一个目录,该目录下同时包含两个developer.zl文件,一个是1.2,一个是2.0的. 为了避免俩develope ...
- JavaScript(三)---- 控制流程语句
常用的控制流程语句有判断语句.分支语句.循环语句.基本用法都和java中的一致,switch有几点特殊. 1.判断语句 格式: if(判断条件){ 符合条件执行的代 ...
- vs2008安装opencv2.4.6
最近安装opencv2.4.6,发现犯了一个很愚蠢的错误,在此记录一下. opencv的头文件包含应该位于build文件夹内,而我误将opencv文件夹下的include包含了进去,造成无法找到头文件 ...
- Hibernate查询之API查询
Hibernate在检索数据上,可以使用SQL.HQL和官方API进行查询,本人主要利用API进行相关查询的小demo. 话不多少直接上demo. demo1:基本查询 /** * 默认不加任何条件的 ...
- angularJS 系列(三)- 自定义 Service
参考:http://viralpatel.net/blogs/angularjs-service-factory-tutorial/ https://www.pluralsight.com/blog/ ...