lan口配置 petalinux_【Xilinx-Petalinux学习】-02-建立PetaLinux工程

前面我已经把PetaLinux成功安装到了Ubuntu虚拟机当中了,接下来就要实际操作,将PetaLinux移植到我们自己的硬件平台当中去。

step1:硬件描述文件

有两种PetaLinux工程建立的方法,一种是下载官方开发板的BSP包并安装,一种就是针对自己的硬件平台去剪裁Linux功能以适应自己的需求。

第一种,比较简单,官方提供了完整的demo和已经预编译好的各种文件。

比如说我们从网上下载了Avnet-Digilent-ZedBoard-v2015.4-final.bsp,我们直接执行下面的命令就可以安装这个BSP包了。安装完成后,PetaLinux工程就安装在了Avnet-Digilent-ZedBoard-v2015.4-final文件夹下面。可以选择自己重新编译,或者直接使用预编译好的文件直接拷贝到SD卡中,马上就能够在ZedBoard上运行PetaLinux了。

petalinux-create -t project -s ./Avnet-Digilent-ZedBoard-v2015.4-final.bsp

第二种,根据我们自行设计的硬件平台去创建PetaLinux工程。这就稍微复杂一些了,需要进行各种配置,我也是尝试了各种配置方法,最终获得了一个基本上满足我需求的结果。

选用的芯片是ZYNQ系列的芯片,我们将会在内部的ARM硬核上去跑Linux。

首先,为了让PetaLinux正常的运行,需要分配一些硬件外设资源给PetaLinux,文档ug1144中也说明了PetaLinux中对Zynq-7000系列FPGA硬件资源的需求。若用到了MicroBlaze或者Zynq Ultrascal+ MPSoC的话,自己查看文档说明吧。

1.TTC模块(必须) #如果多个TTC都使用了的话,Linux内核将会使用第一个TTC模块。

2.外部32MB存储空间(必须)

3.UART模块(可选,控制台打印信息用) #如果用UART IP模块的话,如AXI UART,需要确保中断信号有连接到PS

4.非易失存储器(可选) #如QSPI Flash,SD/MMC

5.以太网接口(可选) #若果用Ethernet IP模块或外部PHY的话,需要确保中断信号连接道PS

知道这些后,我们在Vivado中设计硬件平台时需要预留好上述模块就可以了。Vivado设计,综合,实现后,我们在Vivado中使用“Export Hardware”输出PetaLinux需要的硬件描述文件。

输出的文件都在“//.sdk/_hw_platform_0”文件夹下。

如果我们使用的是Windows版本的Vivado,我们就需要把“***_hw_platform_0”这个文件夹拖到Linux虚拟机当中去。如果使用Linux版本的Vivado,之后直接定位到这个文件夹就可以了。

step2:创建PetaLinux工程

接下来就能够根据这些硬件描述文件,来创建基于我们自己的硬件平台的PetaLinux工程了。

首先,创建一个PetaLinux工程目录。执行命令:

#创建工程,针对Zynq芯片,工程名称ifc_petalinux

petalinux-create --type project --template zynq --name ifc_petalinux

创建成功后,在ifc_petalinux目录下将包含2个文件夹和一个文件,如下所示。

接着,我们来引用刚才输出的硬件描述文件。执行命令:

petalinux-config --get-hw-description=/home/xilinx-arm/PetaLinux/ifc_v1_0/ifc_hw_description/IFC_TOP_wrapper_hw_platform_0

因为是空工程,我们会进入一个配置界面。在里面我们可以配置一些系统参数,主要的配置包括:启动方式,启动存储器分区表,启动文件名称等等。

这里我们仅需要修改两个启动方式选项即可。boot和kernel的存储位置,都选到QSPI Flash即可。配置如下:

#Subsystem AUTO Hardware Settings --->

#Advanced bootable images storage Settings --->

#boot image settings --->

#image storage media ---> choose primary flash

#kernel image settings --->

#image storage media ---> choose primary flash

这里要说明一下,因为我自己的板子上包含了QSPI Flash、eMMC、USB,而没有SD卡、以太网。

所以非常尴尬,不能通过简单的SD卡复制文件去进行系统boot,必须通过JTAG下载BOOT.bin和image.ub文件。非常非常的e'xin!!下载两个文件就要下载好久,这也导致我每次尝试都花费大量时间在下载Flash上。

所以在这里,建议大家一定要在设计板子的时候尽量留好SD卡的位置,或者就算留上几个测试点飞线出来也好,对开发来说肯定会提供很多方便。

回到正题,配置完成后,按ESC并选择YES保存配置。系统就自动进行配置了,配置成功的打印信息如下:

为了方便我们之后复制和修改文件,执行命令:

chmod -R 777 ../ifc_petalinux/

step3:内核配置

因为硬件平台没有SD卡和网口,尴尬的我很难复制文件。想了个办法,就是通过U盘去复制文件,所以我需要把USB配置一下,让系统能够识别出U盘,并进行读写操作。而且以后可能用到USB摄像头,就顺便把这个功能也打开吧。参考网址:http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver

配置kernel,执行命令:

petalinux-config -c kernel

打开了kernel的配置界面,

USB的配置如下:

#Device Drivers --->

# USB support --->

# Support for Host-side USB

# OTG support

# EHCI HCD (USB 2.0) support

# USB Mass Storage support

# ChipIdea Highspeed Dual Role Controller

# ChipIdea host controller

# ChipIdea device controller

# USB Physical Layer drivers --->

# NOP USB Transceiver Driver ####!!!在2015.4中不用打开这个

# USB Gadget Support

# USB Gadget Drivers

# USB functions configurable through configfs

# [*] Mass storage

上面都是按照OTG功能来配置的,但我暂时没有OTG的转接线,没法调试不敢确认是否能用,所以我们最后在设备树中只开启host功能。

其实除了“NOP USB Transceiver Driver”是默认没有打开,剩下都是默认打开的,我最终根据自己的配置并没有打开这个选项!!!

USB摄像头配置如下:

#Device Drivers --->

# Multimedia Support --->

# Media USB Adapter --->

# USB Video Class (UVC) (also UVC Input Event Support) #打开

# USB Support --->

# < >USB 2.0 OTG FSM Implementation #关闭

配置完成后,ESC并保存。

step4:设备树配置

我设计的板子是参考ZYBO开发板的,usb phy上有一个reset引脚连接到了PS的MIO46管脚上。

需要在设备树中告诉系统。

设备树文件都在目录 ./subsystems/linux/configs/device-tree 底下

首先修改pcw.dtsi文件:(在最下面的问题二中,解决了usb reset的问题。按照解决方法配置好后,就不用修改pcw.dtsi文件了,它能够自动生成!)

gedit subsystems/linux/configs/device-tree/pcw.dtsi

#在&usb0上增加一行usb-reset = ;

#最后如下:

&usb0 {

dr_mode = "host";

phy_type = "ulpi";

status = "okay";

usb-reset = ;

};

接着修改system-top.dts文件:

gedit subsystems/linux/configs/device-tree/system-top.dts

#可以看到里面基本是空的

#在里面增加以下内容

&qspi {

flash0: flash@0 {

compatible = "micron,n25q128a11";

};

};

/{

usb_phy0: usb_phy@0 {

compatible="ulpi-phy"; ###假如前面的kernel配置中打开了“NOP USB Transceiver Driver”,需要配置为compatible="usb-nop-xceiv";

#phy-cells = <0>;

reg = <0xe0002000 0x1000>;

view-port=<0x170>;

reset-gpios = ;

drv-vbus;

};

};

&usb0 {

status = "okay";

dr_mode = "host";

usb-phy = ;

};

其中QSPI Flash我用到型号是N25Q128A11EF740E,所以要在这个设备树中说明。而USB配置为host模式,并打开VBUS电源。

step5:编译和下载程序

终于,配置完成了,接下来就可以愉快的编译了,执行命令:

petalinux-build

编译成功log:

最终在./images/linux文件夹下,就能够找到我们需要的各种文件了。

我们需要的四个文件是:

zynq_fsbl.elf #FSBL可执行文件

IFC_TOP_wrapper.bit #FPGA配置bit文件

u-boot.elf #SSBL可执行文件

image.ub #linux镜像文件

由于我没有在Linux虚拟机中安装Vivado,所以我没有办法使用“petalinux-package”命令。

因此我将这四个文件拖到Windows中进行处理,

在Windows中打开Xilinx SDK,选择 Xilinx Tools->Create Boot Image,可以参考一下官方手册,

分别按顺序加入 zynq_fsbl.elf--->IFC_TOP_wrapper.bit--->u-boot.elf 三个文件。点击 Create Image 按钮,生成BOOT.bin文件。

因为我的系统中没有SD卡,而且一开始就配置为了QSPI FLASH启动的方式,在Xilinx SDK中选择 Xilinx Tools->Program Flash。

Image File选择刚才生成的BOOT.bin文件,Flash Type选择qspi_single,Offset填写0,点击Program按钮。烧录完成后,我们的FSBL,bit,SSBL就成功下载到QSPI Flash中去了,我们就已经可以实现u-boot的启动了,但是还不能引导kernel。

接下来烧录image.ub文件,因为Image File只能选择.bin或者.mcs文件,所以需要把image.ub重新命名为image.ub.bin,好像有点粗暴。。。

然后Offset需要填写偏移地址,这个地址可以通过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就填写这个数值。点击Program烧录。

最终,我们通过跳线方式将板子的启动方式配置为QSPI Flash,上电,启动~~~~

我们的PetaLinux就成功运行了~~~~哈哈哈哈

运行后插入了USB Hub和U盘,成功挂载!之后传输文件或者更新BOOT.bin和image.ub就可以用U盘复制了,JTAG下载flash的方式实在是太慢了!

Log打印没有截图,有空了copy一下。先留个位置。

log信息

需要做PetaLinux版本控制时,需要备份如下几个文件夹内的所有文件:

• "/.petalinux"

• "/build/"

• "/images/"

需要注意的问题:

1.假如在FPGA中用到了VDMA模块,在编译时会提示有错误出现。

原因是VDMA的中断编号有错误,我的处理方法是在pl.dtsi设备树文件中,把每个VDMA模块里的MM2S,S2MM通道的interrupt=-1那两行直接删除,这样就能够成功编译了。但是有什么影响我就不知道了。以后再研究吧。

2.在petalinux-config配置完成后,提示类似No USB reset found, No ethernet reset found类似的警告。

一直以为是设备树的问题,最后发现原来是在Vivado中Zynq系统配置时,没有设置Reset对应的MIO管脚。配置好后就不需要修改pcw.dtsi文件了。如下图,配置了USB的Reset为MIO46。

配置这个后,当调用 petalinux-config --get-hw-description=/*** 命令时,就会自动在pcw.dtsi文件中生成“usb-reset = ;”这段描述了。

3.USB HOST模式,USB PHY的CPEN不使能电源,导致不能向外供电。

由于我使用的是2015.4的PetaLinux,这个bug已经被修复了。在之前的版本会出现这个现象,大致原因就是就算配置设备树成host模式,系统仍然按otg方式配置了USB。

问题描述的网址:

https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2015-2-1-usb-not-working/td-p/654349

http://zedboard.org/content/using-petalinux-configure-zedboard%EF%BC%8C-usb-otg-can-not-work解决方法就是在petalinux中安装一个app,每次启动时候运行脚本强制打开USB。也可以手动打开,针对usb0,执行命令:devmem 0xe0002170 32 0x600a0067

补丁网址:https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/14090/1/force_usb_power.tar.gz

app的安装方法参考ug1144,执行的命令大致包括:

mkdir ./components/apps/force_usb_power

#复制force_usb_power.sh, Kconfig, Makefile, README四个文件到文件夹下

petalinux-config -c rootfs

#进入Applications ---> 使能force_usb_power应用

petalinux-build -c /rootfs/force_usb_power

petalinux-build -c /rootfs/force_usb_power

petalinux-build -x package

#得到了打了补丁的image.ub文件

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

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

相关文章

oracle其他盘添加表空间吗,oracle增加表空间的四种方法

实例1&#xff1a;在中&#xff0c;磁盘空间不足是DBA都会遇到的问题&#xff0c;问题比较常见。--1查看表空间已经使用的百分比select a.tablespace_name,a.bytes/1024/1024 "SumMB",(a.bytes-b.bytes)/1024/1024 "used MB",b.bytes/1024/1024 "free…

oracle获取登录名,oracle如何获取当前登录的用户名

Microsoft Windows [版本 5.2.3790](C) 版权所有 1985-2003 Microsoft Corp.C:/>sqlplusSQL*Plus: Release 9.2.0.1.0 - Production on 星期三 5月 30 00:04:26 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.请输入用户名: scott请输入口令:连…

广告冷启动_亚马逊新品冷启动,你的广告策略怎么定?

上新品&#xff0c;没有黑科技加持&#xff0c;纯靠PPC广告冷启动&#xff0c;你会怎么做&#xff1f;我们先来看看运作成功且销售情况稳定的ASIN的流量组成&#xff1a;对比这些数据&#xff0c;大家可以算算自己漏掉了多少流量。占了大头的关联流量中&#xff0c;又以“Newer…

oracle报28003,【翻译自mos文章】运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误...

运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误。适用于&#xff1a;Oracle Server - Enterprise Edition - Version 8.1.7.0 and laterInformation in this document applies to any platform.Checked for relevance on 15-Sep-2012原因&…

mysql 天数减1_mysql 日期加减天数

MySQL 为日期增加一个时间间隔&#xff1a;date_add()now() //now函数为获取当前时间select date_add(now(), interval 1 day); - 加1天select date_add(now(), interval 1 hour); -加1小时select date_add(now(), interval 1 minute); - 加1分钟select date_add(now(), …

oracle注入过滤了单引号,sql绕过单引号限制继续注入的解决方法

在防范sql注入时&#xff0c;对变量过滤不足甚至没有过滤而构造畸形SQL语句&#xff0c;极有可能被成功注入&#xff0c;比如下面这行sql&#xff0c;相当轻松就注入成功了&#xff1a;代码示例:http://www./show.asp?id1;exec master.dbo.xp_cmdshell net user angel pass /a…

python实现英文新闻摘要自动提取_Automotive Innovation摘要集系列2:Intelligent and Connected Vehicles...

为便于广大科技工作者更好的了解中国汽车行业首个英文学术期刊《Automotive Innovation》&#xff0c;并更快的定位到自己感兴趣的论文&#xff0c;编辑部把2018-2019年刊出的70篇论文摘要进行集结&#xff0c;并按照节能与环保(Energy-saving & Eco-systems)、智能网联汽车…

oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2

二&#xff0c;11g 使用snapshot方式设置Data Guard闪回snapshot standby是11g引入的新特性&#xff0c;它不需要开启flashback database特性&#xff0c;就可以让physical standby数据库以read-write模式开启&#xff0c;而后可以退回到standby模式&#xff0c;所有open模式下…

fp算法例题_机器学习(九)—FP-growth算法

本来老师是想让我学Hadoop的&#xff0c;也装了Ubuntu&#xff0c;配置了Hadoop&#xff0c;一时间却不知从何学起&#xff0c;加之自己还是想先看点自己喜欢的算法&#xff0c;学习Hadoop也就暂且搁置了&#xff0c;不过还是想问一下园子里的朋友有什么学习Hadoop好点的资料&a…

linux 改变文件夹属性,技术|在Linux中用chattr和lsattr命令管理文件和目录属性

为了允许添加数据&#xff0c;防止更改或者删除等&#xff0c;文件和文件夹可以设定了特定的控制属性。例如&#xff0c;你可以在关键的系统文件或者文件夹中启用属性&#xff0c;然后没有任何用户&#xff0c;包括root&#xff0c;可以删除或者修改它&#xff0c;比如不允许使…

封头名义厚度如何圆整_松原封头价格

松原封头价格这种情况下我们常常是选用宽度1500毫米的板材开展下料。同时为了保证其的宽度&#xff0c;借此需要下两块料。此外在下料前需要在原板材上面选择一段试样&#xff0c;需对试样实施物理性能测试和化学元素含量的测试&#xff0c;缘于物理性能决定封头的减薄率&#…

Linux系统驱动全吗,linux系统需要给硬件安装驱动程序么?谁推荐一下linux系统阿~要驱动最全...

需要&#xff0c;不过大部分linux都自带&#xff0c;少量的也都有自动安装文件 比如ati的显卡驱动什么的。之前还自己写过驱动&#xff0c;linux的驱动比windows的驱动透明度高很多大部分硬件基本上 都可以识别的 也可以通过网络更新 之前我用ubantu的时候是这样的 别的没试过 …

div和div之间画横线_javascript – jQuery – 使用画布在div之间绘制线条

我会把div定位为绝对的,然后把它们放在你想要的地方.然后用这个功能获得他们的位置&#xff1a;//Get the absolute position of a DOM object on a pagefunction findPos(obj) {var curLeft curTop 0;if (obj.offsetParent) {do {curLeft obj.offsetLeft;curTop obj.offse…

linux 系统盘无法ls,系统故障排除

1.系统故障排除1)模拟磁盘/dev/sda的MBR故障&#xff0c;并执行修复01.备份磁盘/dev/sda的MBR扇区选择一个/dev/sda以外的文件系统(比如/dev/sdb1)来存放备份文件&#xff1a;[rootsvr5 ~]# df -hT/home//选择/dev/sdb1存放备份文件系统 类型 容量 已用 可…

docker公共存储库_查找并修复docker镜像安全漏洞

容器的出现使开发团队可以创建沙盒环境&#xff0c;以在其中运行和测试应用程序&#xff0c;容器主要由从 docker hub 或其他公共镜像存储库提取的开源镜像组成。但是这些开源镜像有时可能包含一些漏洞&#xff0c;这些漏洞可能会危害容器的安全&#xff0c;进而危害其主机/服务…

linux修改services命令,Linux中service指令都有哪些参数

这是因为没有配置安装服务器配置安装服务器 如下1、 以root登录安装服务器,用命令 rpm –qa | grep tftp 查看是否安装了tftp软件包,如果没有&#xff0c;安装一下(安装软件的方法将在后面的文章中详细介绍)。2、 修改tftp的配置文件&#xff0c;使tftp服务可以随linux开机启动…

vim关闭下一行也是注释_在Vim中注释/取消注释行的快速方法是什么?

我有一个在vi中打开的Ruby代码文件&#xff0c;其中的行注释为#&#xff1a;class Search < ActiveRecord::Migrationdef self.up# create_table :searches do |t|# t.integer :user_id# t.string :name# t.string :all_of# t.string :any_of# t.string :none_of#…

linux中常用安装程序的方法,Linux下常见的软件安装方式

一、Linux源码安装1、解压源码包文件源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩&#xff0c;后缀格式会分别为.tar.gz与.tar.bz2&#xff0c;分别的解压方式&#xff1a;#tar -zxvf File.tar.gz#tar -jxvf File.tar.bz22、切换到解压后的目录#cd File3、准备编…

git status清空_本地删除文件后,git status会显示红色的那个文件。

知道了&#xff0c;感谢大家&#xff1a;正确答案应该是&#xff1a;$ git rm -r 倒计时rm 倒计时/js/countDown.jsrm 倒计时/倒计时整理.htmlWarning: Your console font probably doesnt support Unicode. If you experience strange characters in the output, consider swi…

Linux导出函数控制,linux 下仅导出指定函数的方法

节整理资料时&#xff0c;发现了这个&#xff0c;是两年前在 LOVEUNIX 上的回帖。自己都忘了&#xff0c;贴在这里做个备份。linux 也有导出文件。不用特定的扩展名&#xff0c;且不是在 gcc 中指定参数&#xff0c;而是在 ld 中。写一个导出符号文件&#xff0c;如 symbol 指定…