ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC

news2024/11/18 10:19:35

硬件:黑金AX7450开发板、zynq7100、QSPI Flash、eMMC Flash
软件:Vivado 2017.4、Petalinux
我用了一台Windows主机,用于设计Vivado和烧写QSPI Flash,一台Ubuntu主机,用于运行Petalinux配置Linux系统。

硬件设计

新建Vivado工程,添加ZYNQ7 Processing System IP核,根据原理图使能UART、QSPI、SD0(后续流程不插SD卡)、SD1(eMMC)、Ethernet外设接口。其他设置按黑金教程配置就好。
在这里插入图片描述在这里插入图片描述再写一个闪灯的模块用于看系统运行状态,编写管脚约束。然后Validate Design,Create HDL Wrapper,Generate Output Products,Generate Bitstream,Export Hardware(include bitstream),Launch SDK。在SDK里创建一个FSBL工程,用于烧录BOOT.BIN文件到QSPI Flash。

Petalinux设计

1、设置Vivado环境变量,设置petalinux环境变量

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

在这里插入图片描述

2、创建petalinux工程

petalinux-create -t project --template zynq -n linux_firmware

3、配置petalinux工程
把Vivado生成的linux_firmware.sdk拷贝到petalinux的工程目录下,在终端运行下面两条指令,进入petalinux工程配置窗口。

cd linux_firmware
petalinux-config --get-hw-description …/linux_firmware.sdk

因为要从QSPI Flash启动系统,所以需要把BOOT.BIN放到QSPI Flash里。把Subsystem AUTO Hardware Settings➡Advanced bootable images➡storage Settings boot image settings的image storage media改成primary flash。
在这里插入图片描述Linux内核和根文件系统要放在eMMC里,eMMC接在ZYNQ的SD1接口上,把Subsystem AUTO Hardware Settings➡SD/SDIO Settings的Primary SD/SDIO设置成ps7_sd_1(这里有Bug,后面改)。其他保持默认设置。
4、配置Linux内核
执行以下命令配置Linux内核。

petalinux-config -c kernel

开发板上的以太网芯片采用Micrel公司的KSZ9031RNX以太网PHY芯片,把Device Drivers➡Network device support➡PHY Device support and infrastructure的Micrel PHYS使能。其他保持默认设置。
在这里插入图片描述5、配置根文件系统
执行以下命令配置根文件系统。

petalinux-config -c rootfs

需要新增mkfs.ext4命令,后续用于格式化eMMC分区。Filesystem Packages➡base➡e2fsprogs的e2fsprogs和e2fsprogs-mke2fs使能。其他保持默认设置。
在这里插入图片描述6、编译petalinux工程

petalinux-build

7、制作BOOT.BIN

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/design_1_wrapper.bit --u-boot --force

如果Ubuntu已经设置好了tftp服务器,6、7步生成的文件将自动复制到/tftpboot文件夹(这个文件夹的路径可以在petalinux-config的Image Packaging Configuration的tftpboot directory修改,我采用默认设置并且在Ubuntu的根目录创建了tftpboot文件夹)里。
8、烧写QSPI Flash
把第7步生成的BOOT.BIN拷贝到Windows主机,用SDK把BOOT.BIN烧写到烧写QSPI Flash。方法和裸机开发时一样。
在这里插入图片描述

eMMC分区

1、启动开发版
开发板设置成QSPI启动,UART连到Windows主机上,开发板网口连接路由器,打开串口助手(我用的XShell 6),连接开发板。开发板上电,一开始是uboot程序输出的信息,在倒计时结束前按回车进入uboot模式。
在这里插入图片描述
在这里插入图片描述2、查看eMMC
eMMC连在ZYNQ的SD1接口上,输入mmc dev 1切换当前mmc设备,输入mmc info查看eMMC信息。eMMC为5.1版本,容量为7.3GiB(8GB的eMMC),4位宽的总线
在这里插入图片描述3、加载Linux内核文件到ZYNQ内存
在串口终端输入下面指令,将内核文件image.ub通过tftp加载到内存。

tftpboot image.ub

在这里插入图片描述4、从内存启动Linux系统

bootm 10000000

这一步要求在petalinux配置时把Linux的根文件系统类型配成INITRAMFS类型,否则启动不了。因为现在eMMC里面还没有根文件系统,不能配置成根文件系统类型SD card类型。
在这里插入图片描述5、eMMC分区
在串口终端输入下面指令查看eMMC设备文件名。

ls /dev/mmcblk*

在这里插入图片描述可以看到,没插SD卡,只有eMMC,对应mmcblk1。eMMC分区和SD卡分区操作方法是一样的。输入指令

fdisk /dev/mmcblk1

开始分区。“p”打印分区表,“n”分区,“w”保存。
在这里插入图片描述6、格式化分区
uImage、system.dtb放在第一个分区,格式化成FAT32。

mkfs.vfat -F 32 /dev/mmcblk1p1

根文件系统放在第二个分区,格式化成EXT4。

mkfs.ext4 /dev/mmcblk1p2

在这里插入图片描述

拷贝内核和根文件系统

1、创建挂载文件夹,挂载eMMC分区
在这里插入图片描述2、挂载共享文件夹
Ubuntu配置好NFS服务器,在ZYNQ的串口终端执行下面命令挂载共享文件夹。

mount -t nfs -o nolock 192.168.1.104:/home/owc/workspace/all_test/Debug /mnt

3、拷贝根文件系统到eMMC
在Ubuntu主机上解压debian_roofts.tar.gz到共享文件夹/home/owc/workspace/all_test/Debug

sudo tar zxvpf debian_rootfs.tar.gz -C /home/owc/workspace/all_test/Debug

在ZYNQ的共享文件夹里能看到debian_rootfs。
在这里插入图片描述将根文件系统拷贝到板子上。

cp -rf debian_rootfs/* /home/root/mmcp2

4、重新配置Linux系统
输入petalinux-config重新配置Linux系统,做如下修改:

  1. 根文件系统类型改成 SD card,修改根文件系统所在文件夹名称为/dev/mmcblk1p2。
  2. 修改/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h。这里有bug,petalinux设置SD1为主SD后,没有修改uboot启动指令为SD1。如果在Vivado上只配置了SD1,则不用改,但是要把根文件系统所在文件夹名称改为/dev/mmcblk0p2(可以像eMMC分区中的操作一样,先进到文件系统类型为INITRAMFS类型的Linux系统看一眼eMMC的文件名)。

在这里插入图片描述在这里插入图片描述

petalinux-build编译、petalinux-package打包。
5、拷贝Linux系统到eMMC
在Ubuntu主机上把image.ub和system.dtb复制到NFS共享文件夹,在ZYNQ的串口终端上把image.ub和system.dtb复制到/home/root/mmcp1。
6、解挂eMMC。
在这里插入图片描述7、把新的BOOT.BIN烧到QSPI Flash里。

快要成功了

开发板重新上电,此时能够加载Linux内核,但是因为eMMC挂载问题(/etc/fstab文件内容不对,eMMC自动挂载失败),系统会进入emergency mode。输入密码进入命令行模式,修改/etc/fstab文件中设备名称为对应eMMC的设备名称,如下图所示。
在这里插入图片描述开发板重新启动,成功进入Linux系统。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10 工具Bootchart的使用(windows)

Bootchart的使用方法(windows) 下载bootchart.jar并拷贝到windows, 然后保证windows也安装了open jdk 1.8; 下载地址:https://download.csdn.net/download/Johnny2004/87807973 打开设备开机启动bootchart的开关: adb shell touch /data/boo…

生成VLC 及其模块的全面帮助

使用vlc.exe -H命令生成VLC帮助文件vlc-help.txt -h, --help, --no-help 打印 VLC 帮助 (可以和 --advanced 和 --help-verbose 一起使用) (默认禁用) -H, --full-help, --no-full-help VLC 及…

如何创造一个属于自己的springboot stater

如何创造一个属于自己的springboot stater 什么是staterstater是怎么实现注入进来的如何进行约定 基于上述理论的demo实现功能代码目录核心实现spring.factoriesSpringMessageSubscribe(扫描所有Subscribe注解生成消息订阅)基于Redis的消息订阅基于redis…

对封装好的Vue组件库进行打包,并发布到npm上

1. 新建vue 项目 并且在根目录创建两个文件夹 packages和examples。 packages:用于存放所有的组件 examples:用于进行测试组件,把src改为examples 2.配置vue.config.js 并设置入口文件 如果没有vue.config.js文件 就需要在项目根目录下创…

数说故事@FBIC丨首发食饮SMI社媒心智品牌榜,为品牌支招紧跟健康新风尚

第八届Foodaily创博会(FBIC全球食品饮料创新大会)于5月14-16日在上海跨国采购会展中心圆满落幕,呈现了一场食品饮料行业盛会。数说故事与众多食饮健康品牌一起,走过了一段大数据AI加持的创新之旅。 数说故事VP孙淑娟Jessie受邀分享…

Android APP 集成系统签名

由于android 系统权限限制,很多时候普通APP权限无法完成,需要系统APP才有足够的权限, 比如:安装、卸载应用,重启设备,恢复出厂设置,以及设置里面的一些功能,都是需要系统权限才能调…

【WLAN网络故障,带你搞定它!】

01 无线网卡搜索不到 AP的无线信号 01 问题现象 无线网卡搜索不到 AP 的无线信号 02 问题分析 无线网卡搜索不到 AP 的信号 ,原因可以从两方面着手: 1.无线网卡 AP本身 在遇到该问题的时候,我们可以从以上两个方面进行处理。 03 处理过程 1.无线…

Python GUI编程:使用wxPython处理长文本

这段代码的应用场景有: 在文本编辑器和IDE等应用程序中,可以使用这个示例代码来处理长文本,以便用户更好地查看和编辑文本。在数据分析和科学计算等领域中,可以使用这个示例代码来显示和处理大量的数据和结果。在日志分析和系统监…

解决方案 TestCenter自动测试软件平台

方案概述 TestCenter是一个专为加速您的测试系统软件开发而设计的自动测试系统软件平台,主要应用于测试程序的开发、运行和管理。TestCenter实现了对测试资源管理、测试程序开发与调试、测试数据管理以及测试程序发布等功能的无缝集成和统一部署,这将帮…

Google I/O 2023 推出Flutter 3.10 快来看看都有哪些变化

本文首发自[慕课网] ,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”! 作者: CrazyCodeBoy |慕课网名师 今年的Google I/O满满的 AI与狠活,而且还推出 Flutter 3…

Flutter一天一控件之ListTile(列表的实现)

ListTile简介 Flutter中的ListTile控件是一种常用的列表项控件,它可以用于显示列表中的每一个项,通常包含标题、副标题、图标等内容。ListTile控件的外观和行为类似于Android中的ListView中的列表项。 一个简单的ListTile示例: ListTile(l…

大流量卡介绍:网上的大流量卡都是怎么来的?

大流量卡介绍,你知道网上的大流量卡都是怎么来的? 其实,网上29元155G、39元180G的优惠套餐,本身都是我们常见的流量卡如电信星卡、联通王卡、移动花卡等等,之所以这么便宜,只不过运营商在这些套餐上面增加…

【新星计划】数据库 排名函数 初识

数据库 排名函数 初识 查询排序初识排名函数row_number()rank()dense_rank()ntile()percent_rank() 开窗函数为聚合函数使用开窗函数 小结 查询排序 在日常工作中,我们对所有需要的数据都会进行一个排序操作,以获得我们最需要的数据。 排序指令 order …

Unreal Niagara粒子入门1

记录下学习Niagara粒子的过程,这次调的是比较简单的一个效果: 使用了随粒子生命的缩放、打开速率解算、基本的发射器和Niagara容器。 1.创建Niagara Niagara中,发射器和NiagaraSystem文件是可以分开创建的: 通常直接点Niagara…

GPT-2(Transformer Decoder)的TensorFlow实现(附源码)

文章目录 一、GPT2实现步骤二、源码 一、GPT2实现步骤 机器学习模型的开发实现步骤一般都包含以下几个部分:   1. 遵照模型的网络架构,实现每一层(Layer/Block)的函数;   2. 将第1步中的函数组合在一起&#xff0c…

微信小程序nodejs+vue校园快递代拿系统uniapp校园互助系统

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 平台旨在解决目前大学生找人帮忙,难,慢,不可靠以及想兼职同学找不到好的平台的问题。对于招人帮忙的…

应急演练脚本编写的几个步骤

应急演练是一项非常重要的活动,对于保障企业的安全和稳定运行至关重要。而一个完整的应急演练需要编写一个详细的脚本来指导演练过程。以下是应急演练脚本编写的几个步骤。 定义演练场景 首先,需要定义演练场景,这将决定演练的目标和方向。在…

美国原装二手 SR560 低噪声电压前置放大器

Stanford Research SR560低噪声电压前置放大器 ​Stanford Research SR560 是一款高性能、低噪声前置放大器,适用于各种应用,包括低温测量、光学检测和音频工程。 SR560 具有一个具有 4 nV/√Hz 输入噪声和 100 MΩ 输入阻抗的差分前端。完整的噪声系数…

三招教你图片文字转语音怎么转

随着数字化时代的到来,人们对于数字信息的获取和处理需求越来越大,而图片文字转语音技术正是为了满足这一需求而诞生的。这项技术不仅可以辅助视力障碍者,让他们能更轻松地获取信息和理解内容,而且也可以帮助正在学习外语的人们练…

Menards EDI对接流程

Menards是一家美国的家居建材零售商,成立于1962年,总部位于美国威斯康星州的伊甸谷市。该公司经营各种家居建材产品,包括木材、地板、墙纸、厨房卫浴用品等,并拥有超过300家门店,分布在美国中西部和北部地区。Menards的…