文件准备
在ZYNQ-7000系列Soc上启动Linux操作系统需要两个文件,
- 一个为BOOT.mcs(QSPI启动所需,SD卡启动为BOOT.bin)BOOT文件由三个文件合成,分别是系统第一阶段引导文件fsbl.elf,FPGA配置文件design.bit,Linux系统的启动文件u-boot.elf。
- image.ub。其中image.ub为Linux系统镜像文件,由petalinux工具编译而成,
制作BOOT文件可以采用两种工具
- xilinx官方的XSDK软件,ref
- petalinux工具。通过指令“petalinux-package –boot –fsbl–fpga–u-boot”进行合成。
文件内容
boot.bin
fsbl.elf、u-boot.elf、design_1_wrapper.bit(非必须)、
-
一级引导程序:fsbl.elf
-
镜像引导程序:u-boot.elf
-
PL配置程序.bit
image.ub
这个文件是linux镜像程序(内核、设备树、文件系统),由petalinux-package --image 打包kernel rootfs device-tree这个三个文件合成的image.ub文件
启动方式
(一) SD卡启动linux
在生成BOOT.bin文件后,将其与image.ub文件一起放到SD卡中,设置板子的启动方式为SD卡启动,则可以通过SD卡进行linux的启动,该方法较为简单,调试时经常使用。
(二) QSPI Flash启动linux
在代码调试完成后,一般需要将linux内核烧写到Flash中,方便今后的使用。其步骤如下。
烧写BOOT.mcs文件:改变Zynq芯片的处理板模式为QSPI启动,找到刚才生成的BOOT.mcs文件,然后利用XSDK软件中的“Xilinx Tools”——“Program Flash Memory”工具,在Image File栏中添加刚才生成的BOOT.mcs文件.
连接板子的JTAG电缆(为了烧写Flash)和USB-UART电缆(供电和串口信息监控),点击Program将BOOT文件烧写进Flash。烧写完成后,断电重启并利用串口调试工具,即可观察到串口的打印信息。但由于BOOT文件中仅包含了u-boot文件,因此板子启动到u-boot阶段就会停止,无法找到linux内核,若要同时启动linux系统,则在生成BOOT文件的时候,将linux内核文件image添加进去,生成的BOOT文件内部u-boot会自动找到内核文件并展开加载相应的内核和文件系统。
把image.ub镜像烧写在flash开机启动(无SD卡)
flash 启动
借鉴tftp的启动方式,因为没有randisk所以直接用image.ub;
把iamge.ub加载在0x1000000内存地址就可以运行系统了
(注意:其他地址不行,这个地址查看u-boot环境变量得出)。红色为特别注意的,蓝色次之。(这个图是修改后的环境变量设置)注意:开始地址不能放在0x500000以下,boot环境变量存储就在0~5M内,查看环境变量得出。
1.将images.ub下载到内存中
tftp 0x800000 image.ub
2.把flash中的6~14M之间的内容擦除(输入sf probe 0命令后才能读写flash,我看到其他有些人是sf probe 0 0 0)
sf probe 0
sf erase 0x600000 0x700000
3.把内存中0x800000开始的7M的内容写到0x600000开始的后面7M的空间去。(因为我的镜像6.09M,实际大小看具体情况)
sf write 0x800000 0x600000 0x700000
4.设置环境变量让启动后把0x600000开始的7M内容加载到内存0x1000000中去,再用bootm命令启动内存中的内核。
setenv bootcmd ‘sf probe 0 && sf read 0x1000000 0x600000 0x700000 && bootm 0x1000000’
下图为启动启动过程截图,因为太长就只给出开始和末尾的:
ref
https://www.pianshen.com/article/2243712623/