目录
6.3方法三-从裸机SDK下载petalinux启动文件
petalinux启动文件从FLASH启动系统,也就是将启动文件放入FLASH中。
1 vivado配置:
配置QSPI外设。
2 导入硬件后配置petalinux
创建工程请参考 :
进入menuconfig配置固件编译(不用改)
$petalinux-config --get-hw-description /路径/ ((存放 *.hdf文件的地方) )
这里我们仅需要修改两个启动方式选项即可。boot和kernel的存储位置,都选到QSPI Flash即可
Subsystem AUTO Hardware Settings --->
# Advanced bootable images storage Settings --->
# boot image settings --->
# image storage media ---> <*> primary flash
#Subsystem AUTO Hardware Settings --->
# Advanced bootable images storage Settings --->
# kernel image settings --->
# image storage media ---> <*> primary flash
附录:如果板子没有SD卡硬件,就不能通过简单的SD卡烧写boot.bin到flash,必须通过JTAG下载BOOT.bin。
烧录完成BOOT.bin之后,可以通过JTAG或者串口或者网线tftp烧录image.ub文件到flash。
3内核配置:
petalinux-config -c kernel
参考博文.
4编译petalinux启动文件
petalinux-build
时间很慢
5生成启动文件
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force 生成启动文件
fsbl.elf,download.bit,u-boot.elf (三个文件用来在SDK中生成BOOT.mcs文件);
mage.ub(petalinux工具生成的image文件,包含kernel,devicetree和ramdisk
6将petalinux启动文件烧写到flash中:
6.1方法一-SD卡
先用SD卡在板子上启动petalinux系统,系统起来后使用指令烧写
(1)flash_eraseall /dev/mtd0 先擦除
用于存放BOOT.bin : flashcp BOOT.bin /dev/mtd0
(2)flash_eraseall /dev/mtd2 先擦除
用于存放image.ub:flashcp image.ub /dev/mtd2
(3)将板卡设置为flash启动,就能看到petalinux在串口启动起来;
6.2方法二-JTAG 和 串口
使用 jtag 烧写BOOT.bin,使用SecureCRT 串口烧写image.ub
(1) Zynq> sf probe 0 0 0
SF: Detected n25q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB
(2) Zynq> sf erase 0x520000 0xa00000 //擦除
SF: 10485760 bytes @ 0x520000 Erased: OK
(3) Zynq> sf read 10000000 0x520000 0xa00000 //这是清空存放image.ub的flash地址段里面的内容
device 0 offset 0x520000, size 0xa00000
SF: 10485760 bytes @ 0x520000 Read: OK
(4)Zynq> loadx 0x10000000 //xmodem下载image文件到DDR
//等待ScureCRT传递数据;选择Transfer->SendXmodem->目录对话框中选择image.ub文件,串口波特率115200
(5)Zynq> sf write 0x10000000 0x520000 0xa67604($filesize) (image.ub大概16M,需要持续好几分钟)
//将DDR中的image拷贝到QSPI flash中,0x10000000 RAM中暂存image起始地址,
//0x520000 flash中存放image的偏移地址 offset,0xa67604 image文件大小(size)
(6)将板卡设置为QSPI启动,就能看到petalinux在板子上启动起来;串口有打印输出。
6.3方法三-从裸机SDK下载petalinux启动文件
(1)将板卡设置为JTAG模式,在Xilinx SDK中选择 Xilinx Tools->Program Flash。
Image File选择刚才生成的BOOT.bin文件,Flash Type选择qspi_single,Offset填写0,点击Program按钮。烧录完成后,我们的FSBL,bit,FSBL就下载到QSPI Flash中去了,已经可以实现u-boot的启动了,但是要烧录完uImage后才能引导kernel。
烧写完成。
断电重启。可以看到u-boot的打印信息了。
(2)将板卡设置为JTAG模式,烧录image.ub文件,因为Image file只能选择.bin或者.mcs文件,
所以需要把image.ub重新命名为image.ub.bin,然后再烧录( Xilinx Tools->Program Flash)
Offset需要填写偏移地址,可以通道查看uboot启动信息。查看地址
这个地址也可以通过petalinux-config配置,或者可以通过system-config.dtsi文件查看。内容如下:
&qspi {
#address-cells = <1>;
#size-cells = <0>;
flash0: flash@0 {
compatible = "micron,n25q128";
reg = <0x0>;
#address-cells = <1>;
#size-cells = <1>;
spi-max-frequency = <50000000>;
partition@0x00000000 {
label = "boot";
reg = <0x00000000 0x00500000>;
};
partition@0x00500000 {
label = "bootenv";
reg = <0x00500000 0x00020000>;
};
partition@0x00520000 {
label = "kernel";
reg = <0x00520000 0x00a80000>;
};
partition@0x00fa0000 {
label = "spare";
reg = <0x00fa0000 0x00000000>;
};
};
};
我们kernel的偏移地址是0x00520000,因此Offset就填写这个数值,点击烧录。
由于image.ub.bin总共10.4M,这个过程有点漫长;
(3)将板卡设置为QSPI启动模式,先关闭再打开电源,可以看到有启动打印信息。系统固化成功。
7自动运行程序。
将自动运行脚本,放置在/run/media/mmcblk1p2/autorun.sh
脚本内容为:
8跟新系统文件(可忽略)
9启动系统
板卡设为qspi启动
pc和板卡连上串口,打开secureCRT(或putty等)串口工具,配置如图,断电重启,系统登录名和密码都默认为:root