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了。
1 |
|
第二种,根据我们自行设计的硬件平台去创建PetaLinux工程。这就稍微复杂一些了,需要进行各种配置,我也是尝试了各种配置方法,最终获得了一个基本上满足我需求的结果。
选用的芯片是ZYNQ系列的芯片,我们将会在内部的ARM硬核上去跑Linux。
首先,为了让PetaLinux正常的运行,需要分配一些硬件外设资源给PetaLinux,文档ug1144中也说明了PetaLinux中对Zynq-7000系列FPGA硬件资源的需求。若用到了MicroBlaze或者Zynq Ultrascal+ MPSoC的话,自己查看文档说明吧。
1 2 3 4 5 |
|
知道这些后,我们在Vivado中设计硬件平台时需要预留好上述模块就可以了。Vivado设计,综合,实现后,我们在Vivado中使用“Export Hardware”输出PetaLinux需要的硬件描述文件。
输出的文件都在“/<vivado project>/<project name>.sdk/<top module name>_hw_platform_0”文件夹下。
如果我们使用的是Windows版本的Vivado,我们就需要把“***_hw_platform_0”这个文件夹拖到Linux虚拟机当中去。如果使用Linux版本的Vivado,之后直接定位到这个文件夹就可以了。
step2:创建PetaLinux工程
接下来就能够根据这些硬件描述文件,来创建基于我们自己的硬件平台的PetaLinux工程了。
首先,创建一个PetaLinux工程目录。执行命令:
1 2 |
|
创建成功后,在ifc_petalinux目录下将包含2个文件夹和一个文件,如下所示。
接着,我们来引用刚才输出的硬件描述文件。执行命令:
1 |
|
因为是空工程,我们会进入一个配置界面。在里面我们可以配置一些系统参数,主要的配置包括:启动方式,启动存储器分区表,启动文件名称等等。
这里我们仅需要修改两个启动方式选项即可。boot和kernel的存储位置,都选到QSPI Flash即可。配置如下:
1 2 3 4 5 6 |
|
这里要说明一下,因为我自己的板子上包含了QSPI Flash、eMMC、USB,而没有SD卡、以太网。
所以非常尴尬,不能通过简单的SD卡复制文件去进行系统boot,必须通过JTAG下载BOOT.bin和image.ub文件。非常非常的e'xin!!下载两个文件就要下载好久,这也导致我每次尝试都花费大量时间在下载Flash上。
所以在这里,建议大家一定要在设计板子的时候尽量留好SD卡的位置,或者就算留上几个测试点飞线出来也好,对开发来说肯定会提供很多方便。
回到正题,配置完成后,按ESC并选择YES保存配置。系统就自动进行配置了,配置成功的打印信息如下:
为了方便我们之后复制和修改文件,执行命令:
1 |
|
step3:内核配置
因为硬件平台没有SD卡和网口,尴尬的我很难复制文件。想了个办法,就是通过U盘去复制文件,所以我需要把USB配置一下,让系统能够识别出U盘,并进行读写操作。而且以后可能用到USB摄像头,就顺便把这个功能也打开吧。参考网址:http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver
配置kernel,执行命令:
1 |
|
打开了kernel的配置界面,
USB的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
上面都是按照OTG功能来配置的,但我暂时没有OTG的转接线,没法调试不敢确认是否能用,所以我们最后在设备树中只开启host功能。
其实除了“NOP USB Transceiver Driver”是默认没有打开,剩下都是默认打开的,我最终根据自己的配置并没有打开这个选项!!!
USB摄像头配置如下:
1 2 3 4 5 6 |
|
配置完成后,ESC并保存。
step4:设备树配置
我设计的板子是参考ZYBO开发板的,usb phy上有一个reset引脚连接到了PS的MIO46管脚上。
需要在设备树中告诉系统。
设备树文件都在目录 ./subsystems/linux/configs/device-tree 底下
首先修改pcw.dtsi文件:(在最下面的问题二中,解决了usb reset的问题。按照解决方法配置好后,就不用修改pcw.dtsi文件了,它能够自动生成!)
1 2 3 4 5 6 7 8 9 |
|
接着修改system-top.dts文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
其中QSPI Flash我用到型号是N25Q128A11EF740E,所以要在这个设备树中说明。而USB配置为host模式,并打开VBUS电源。
step5:编译和下载程序
终于,配置完成了,接下来就可以愉快的编译了,执行命令:
1 |
|
编译成功log:
最终在./images/linux文件夹下,就能够找到我们需要的各种文件了。
我们需要的四个文件是:
1 2 3 4 |
|
由于我没有在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文件查看。内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
可以看到kernel的偏移地址是0x00520000,所以Offset就填写这个数值。点击Program烧录。
最终,我们通过跳线方式将板子的启动方式配置为QSPI Flash,上电,启动~~~~
我们的PetaLinux就成功运行了~~~~哈哈哈哈
运行后插入了USB Hub和U盘,成功挂载!之后传输文件或者更新BOOT.bin和image.ub就可以用U盘复制了,JTAG下载flash的方式实在是太慢了!
Log打印没有截图,有空了copy一下。先留个位置。
1 |
|
需要做PetaLinux版本控制时,需要备份如下几个文件夹内的所有文件:
1 2 3 |
|
需要注意的问题:
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 = <&gpio0 46 0>;”这段描述了。
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,执行的命令大致包括:
1 2 3 4 5 6 7 8 |
|
petalinux的制作实例【转载】相关推荐
- Spring-data-redis:特性与实例--转载
原文地址:http://shift-alt-ctrl.iteye.com/blog/1886831 Spring-data-redis为spring-data模块中对redis的支持部分,简称为&qu ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- Python GUI制作实例 wxPython使用多线程 防假死含wxFormBuilder的文件及源码
wxFormBuilder使用的教程较少,网上的文件源码也少. 最近使用 python 写了一个GUI,可以打开设置文件,并对xlsx文件进行处理,可以将部分信息输出到gui界面,像print输出到c ...
- php记录访问者ip和次数,一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例...
一个能对访问者进行编号.记录访问次数.IP.时间的统计制作实例 更新时间:2006年12月05日 00:00:00 作者: 一个能对访问者进行编号.记录访问次数.IP.时间的统计制作实例 我做了一 ...
- HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解
导航条的使用很广,每个网站都会做出具有自己特色的导航条.最近特地去了解了各种类型的导航条,比如具有高亮显示的导航条,中英文互相切换的导航条,具有弹性动画的导航条,甚至是具有摩擦运动动画的导航条(文字下 ...
- 如何用计算机完成一片文稿制作,2017年计算机一级考试MSOffice考点解析:演示文稿制作实例1...
5.9.1实例 1.按下列要求创建演示文稿.并以yswg-1.pptx保存. (1)建立一个含有5张幻灯片的演示文稿. 版式和内容如下: 第一张幻灯片:版式为"标题幻灯片",主标题 ...
- 【Unity】U3D TD游戏制作实例(一)创建敌人、加载预制件
文章目录 前言 本章实现效果 场景和敌人 文件目录结构 场景层次结构(Hierarchy) 处理模型 指定GameScript脚本 运行游戏 前言 TD(炮台防守)类游戏是比较经典的游戏类型,当年在 ...
- html书页卷角效果,HTML+CSS网页制作实例制作左上角卷角效果的网页
网页制作网络技术需要大家共同分享,不能闭门造车,下面是bj-dns文章简介:HTML+CSS网页制作实例:制作左上角卷角效果的网页. 英文原文 这篇文章中我们将介绍如何制做paper左上角的卷角效果. ...
- DTCMS插件的制作实例电子资源管理(四)URL重写
总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...
最新文章
- 通过案例学功能 自定义监控功能初探
- 数组,字符串,指针,内存分配机制
- object references an unsaved transient instance【异常】
- 如何删除wordpress侧边栏功能的wordpress.org链接
- Spring Cloud Gateway介绍(二)
- 硬件——STM32 , 录音
- oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
- bzoj 1095 捉迷藏
- PHP经典项目案例-(一)博客管理系统5
- 尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)
- 小数点进位 oracle,使用多个小数点(。)对Oracle中的记录进行排序
- 独家 | 一文读懂Adaboost
- 漂亮实用的loading(加载)封装
- mysql的随机查询
- RTMP 封包详解
- Myeclipse10如何进行代码提示和自动补全
- 基础学习——MySQL基础
- 数据结构与算法java - 03 链表,单向链表,逆序打印单向链表
- iPhone的设置中,找不到“开发者选项”
- 【无标题】excel中query编辑器修改数据类型、第一行做标题、计算行数
热门文章
- 互联网+风口直吹传统银行能否漫步起舞
- “0xffffffff”转为十进制数
- TypeError: ‘BaseQuery‘ object is not callable问题解决
- python astype_python astype函数
- Android蓝牙4.0开发及发送指令到蓝牙硬件设备,简单好用,方法已写好直接可用
- 【C语言】编写程序,输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
- 如何修改product.product的display_name的显示,解决_rec_name失效的问题
- 以太坊智能合约(模拟积分兑换商品)
- 看漫画学知识:详解获得苹果推荐的4大要素
- CATIA设计不容忽略的小技巧