ZYNQ开机挂载SPI FLASH中的jffs2文件系统

写在前面

  做类嵌入式开发很久了,从51到STM32,Arduino,ESP8266,ESP32,树莓派,ZYNQ,做了很多小项目,虽然根本没有牛到有资格写博客,但也是记录下自己的工作给以后做一个备忘吧。
  本文记录的是一个以太网转同步串口的活,导师给了一块7z030的板子,让在这上面做,这块板子的以太网居然是航空接插件接口,而且供电也得找电源,太麻烦了我还是用手里的7z010的黑金开发板吧,PS部分都一样完成之后再移植就是了。
  文章中有大量部分参考了黑金的教程,本来不打算写重复的部分,但考虑到也许会有比我基础更差的同学需要学习,就把自己的工程建立流程分享出来。

Vivado工程建立

  这里选择与黑金相同的版本2017.4,需要有配套的Ubuntu,petalinux以及linux-xilinx版本。
在这里插入图片描述
  选择自己的芯片,这里本来贴了很多建立工程的详细过程,图太多了就删掉了。
在这里插入图片描述
  建立一个block design
在这里插入图片描述
  添加IP核ZYNQ7 PS。
在这里插入图片描述
  双击IP核进行配置,先在PS-PL Configuration里面取消m axi GP0,图片里的标注有问题,应该默认勾选的是m。
在这里插入图片描述
  之后进行IO的配置,从FLASH里启动Linux以及挂载jffs2文件系统,所以spi flash需要勾选,以太网透传,以太网0也需要勾选,注意选上下面的MDIO。还需要选上UART1作为系统控制台。所有的IO要根据自己的硬件来选择。
在这里插入图片描述
  在下面还有以太网的复位管脚,这里要根据原理图,连上了的话就需要勾选。在这里插入图片描述
  在MIO Configuration里调整以太网的IO速度为fast。
在这里插入图片描述
  选择相近的DDR型号。
在这里插入图片描述
  确认调整后点击run block automation引出IO,我这里截的图没有取消勾选m axi gp0,如果取消了的话没有左边这部分。
在这里插入图片描述
  切换到sources选项卡,右键选择create hdl wrapper。
在这里插入图片描述
在这里插入图片描述
  生成bit文件。
在这里插入图片描述
  将硬件信息导出。
在这里插入图片描述
  如果大家有PL部分需要勾选包含bit文件。
在这里插入图片描述

petalinux工程建立

  把刚才建立工程目录下的sdk文件夹复制到Linux主机。
在这里插入图片描述
  首先配置环境,这里应该要根据大家的安装位置来,Linux真的不熟。

source /opt/pkg/petalinux/settings.sh 
source /opt/Xilinx/Vivado/2017.4/settings64.sh 

在这里插入图片描述
  使用petalinux建立新的工程

petalinux-create --type project --template zynq --name 7z010_jffs2

在这里插入图片描述
  进入工程目录。

cd 7z010_jffs2/

  根据硬件信息建立工程,这里路径要正确,sdk文件夹在工程的上层目录中。

petalinux-config --get-hw-description ../7z010_jffs2.sdk/

在这里插入图片描述
  之后会弹出config界面,这个界面可以通过petalinux-config命令重复进入。因为学校环境没有网络,需要更改Linux Components Selection为本地内核文件,如果使用的是有外网环境的Linux主机,这里可以使用默认配置从git上面下载Linux内核。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  需要调整flash配置,我们需要预留一部分flash空间作为系统“硬盘”。在Sbusystem AUTO Hardware Settings -> Flash Settings。具体的size大家可以自己测试一下,这里的数字应该是扇区大小,spi flash在大学时研究过现在记不清也懒得看了,size过大会在erase为jffs2文件系统时破坏掉系统。这里的大小是测试出来的,能用就没研究了。这里我们并不需要将文件系统修改为jffs2,这个设置不知道对应的教程在哪里,直接配置成jffs2系统后我无法开机进入Linux系统了,不知道该如何解决,官方应该有教程吧,又找到的同学可以提供一下。
在这里插入图片描述
  配置Linux内核,如果不需要加入额外驱动这里就不需要修改,直接保存退出就OK。

petalinux-config -c kernel

在这里插入图片描述
  拷贝黑金提供的startup文件夹到工程目录下。
在这里插入图片描述
  修改project-spec/meta-user/recipes-core/images/petalinux-image.bbappend文件,在最后加入一行

IMAGE_INSTALL_append = " startup"

在这里插入图片描述
  我们需要修改一下7z010_jffs2/project-spec/meta-user/recipes-apps/startup/files下的startup.sh文件,这个文件就是开机后会执行的命令。黑金提供的内容是开机后自动挂载SD卡的第一分区到/sd文件夹下。这里我们修改为开机后挂载flash的mtd4,这个mtd4就是上面配置flash的第四分区jffs2。判断里面的-f路径写错了,就当没看见吧,这句不关键。。
在这里插入图片描述
  回到petalinux工程的命令行,配置根文件系统。

petalinux-config -c rootfs

  在apps中选择startup,按下‘y’键。保存退出。
在这里插入图片描述
  编译工程

petalinux-build

  这里需要的时间比较久了。
在这里插入图片描述
  生成BOOT文件,因为只有flash启动,所以一切包括内核都要打包到BOOT中,因为我这里还没有PL部分,所以命令没有–fpga,PL部分有工程的同学记得加上–fpga

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --u-boot --kernel --force

在这里插入图片描述
  至此就完成了工程的建立。

下载程序,开机测试

  我使用Vivado进行boot文件的烧写,打开硬件管理器,自动连接。
在这里插入图片描述
  在PL部分右键选择add configuration memory device,选择你用的flash型号。在这里插入图片描述
  添加生成的boot.bin文件,在工程目录的7z010_jffs2/images/linux/下,添加FSBL elf文件,说实话这个文件的作用不太清楚是什么,猜测是根据flash的分区写入boot文件?那么是否修改了flash的前几个分区后需要使用不同的elf文件呢?没有测试过。
在这里插入图片描述
  完成后上电进入系统,插上串口线查看控制台信息,由于我是边尝试边记录,不能保证这一套操作之后可以实现描述的功能。我这里目前已经成功了,挂载mtdblock4之后在/home/root/flash下vi一个文件,reboot或者断电再开机后这个分区都能正确挂载,并且vi的文件内容正常。
在这里插入图片描述

没成功的话看这里

  写的第一个版本把flash_eraseall语句也放到startup.sh里面了,开机时控制台输出擦除信息立刻就反应过来,每次开机都擦除那我的文件不是都没了。。修改后直接挂载就可以正确挂载成功了,但是我认为没有进行eraseall的分区是不能正确作为jffs2文件系统挂载的(猜测,懒得试了。。)。所以没有挂载成功的同学可以在开机进入petalinux后输入

cat /proc/mtd

先看一下flash的分区是否和自己在petalinux-config里面配置的一样,一样的话可以直接把mtd4格式化为jffs2。

flash_eraseall -j /dev/mtd4

大家可以输入

flash_eraseall --help

查看一下信息,上面的-j就是format the device for jffs2,这也是为什么我猜测必须先eraseall一下,毕竟Windows也需要先按文件系统格式化不是?

已经存在jffs2系统的flash在重新分区为其他大小时,可以在下载boot.bin文件是选择全盘。

贴两个需要的文件,elf和startup
https://download.csdn.net/download/fadepurple/11196759
https://download.csdn.net/download/fadepurple/11196765

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值