转自:http://blog.csdn.net/u013793399/article/details/53054734

前言

PetalLinux是Xilinx公司推出的嵌入式Linux开发工具,专门针对Xilinx公司的FPGA SoC芯片和开发板,用户可以在PetaLinux工具的帮助下进行完整的开发流程,包括设计,验证,仿真,下载等。
本文将详细介绍PetaLinux的安装流程,虽然实际上基本就是把Xilinx的UG1144翻译一遍。但对于初学者而言,全是英文的Guidance还是很难受的,可能某一步要输入某个命令,但是却并不知道为什么要这么做,这并不好,也容易打击信心,尤其是UG里还有一点小错误。

安装前的准备工作

  • 你需要一个运行着Linux操作系统的电脑作为主机
    • 你可以用虚拟机,也可以装双系统,或者你甚至可以直接把系统换成Linux。
    • 在这里,我用的是VMware虚拟机下的Ubuntu Kylin 14.04 LTS
  • 你需要一个足够大的硬盘空间,一个足够好的cpu,尽量大的内存。
    • 毕竟是用来做开发的,对于配置要求还是比较高,Xilinx推荐4GB内存,20GB硬盘,2GHz主频cpu。
    • 然则,20GB硬盘远远不够!!我分配了100GB,安装完之后就剩30G空间了;我电脑一共就8GB内存,只能分给虚拟机2GB,倒是没出现什么问题,就是安装的时候比较慢,Guidance说只要“few minutes”,然而我需要花一局OW的时间。
    • 以下是Xilinx的推荐配置,不要相信他推荐的硬盘容量,其他都还好。
  • 安装一系列的支持包。以下是列表,最左边是支持包的名称,右侧是各个操作系统下,该支持包的安装包名称(很绕口,其实就是同一个功能在不同系统下有不同的叫法),只需要关注你所用的操作系统的那一列就可以了。记得在安装之前把这些支持库全部安装好,不然到时候等了好久,结果告诉你缺少库,请少侠重头再来,那就哭晕在厕所了。

  • 把shell设置成bash(这一步你看不懂的话可以忽略,因为有些人喜欢把shell设置为dash),具体设置方法是$ sudo dpkg-reconfigure bash,这里UG1144写错了。

  • 下载安装Vivado for Linux。或者你想在Windows下用Vivado搞完之后把文件扔到虚拟机里也可以,只是比较麻烦,还不如直接装在Linux里,实测界面和Windows下完全一样。推荐WebPack版本,虽说是阉割版,但还是可以用ZYNQ系列和MicroBlaze的全部功能,只是少了UltRascale系列和一些高端的7系列,重点是免费啊= =||

安装步骤

  • 下载PetaLinux包。网址如下:
    • https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html
    • 选择7.02GB的PetaLinux 2016.3 Installer
    • 下载完之后应该是一个 petalinux-v2016.3-final-installer.run 文件
    • 放到虚拟机里;
  • 建立安装路径,比如$ mkdir ~/Desktop/petalinux
  • 运行安装文件;
    • $ ./petalinux-v2016.3-final-installer.run ~/Desktop/petalinux
    • 如果缺少后面的安装路径参数,则默认会安装在当前路径;
  • 经过漫长的等待~~~来到了Agreement部分了,就是一些协议,不同意就不让装,Windows下一般用勾选的方式,Linux终端没有这种条件,只能用Vim展示给你看。
    • 按 Enter 进入协议文本,按 q 退出协议文本,然后就会有问你同不同意,输入 y 同意协议,进入下一条协议,按 q 退出,y 同意,若干次之后,就进入安装部分了。
  • 再次经过漫长的等待,安装完成。

环境配置

装好了工具,接下来就是要配置环境了。
环境配置方法很简单,先确保你的shell是bash,具体设置方法看上面的“安装前准备工作”部分。
然后运行$ source <path-to-installed-PetaLinux>/settings.sh
比如我的安装路径是 ~/Desktop/petalinux,那对应的命令就是$ source ~/Desktop/petalinux/settings.sh

执行$ echo $PETALINUX
如果显示出你的安装路径,那就证明环境变量配置好了

有一个问题是,每次打开一个新的终端,环境变量都会被重置,需要重新source,作为一个强迫症,我觉得这种重复而无聊的工作必然是可以自动化的。解决方案如下:

修改 ~/.bashrc 这个文件
在最后加上$ source ~/Desktop/petalinux/settings.sh
.bashrc 是终端的初始化配置脚本,每次打开新的终端是的时候,都会执行这个脚本,把环境变量配置脚本加在里面,就能在打开的时候自动配置了。

安装PetaLinux BSP

BSP(Board Support Package)板级支持包,是一个文件包,当你使用特定的硬件平台时,可以帮你隔离底层硬件,更方便地进行上层开发。Xilinx的开发板基本上都有对应的BSP,在PetaLinux环境下可以很方便地生成一个基础工程,在基础工程的基础上进行配置和增删修改等,会比从零开始做简单得多。这里详细介绍了BSP的安装流程。

  • 下载你需要的板级支持包BSP。
    • https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html
    • 把PetaLinux下载列表往下拉,能看到很多的BSP,选择你想要的,比如我这里选的就是ZC706的BSP。
  • 把这个BSP文件放在你喜欢的地方。你可以把BSP文件看做一个种子,通过特定的命令可以让其“成长”为一个工程,一个模板工程,一个基于特定板子的基础工程,让你可以在此基础上直接进行开发而不需要关心板子上的具体电路等。
  • 好吧,其实我是骗你的,根本不需要什么安装,下载完放着就可以了;然则Guidance里说这就是Installation,所以也算不上骗吧┑( ̄Д  ̄)┍

利用BSP生成一个工程

刚刚说到,BSP相当于一个种子,可以种出一个工程,现在我们就来动手吧。

  • 首先 cd 到你希望放置工程的路径。比如我的就是:
    • $ cd ~/Desktop/petalinux_project
  • 创建一个工程
    • petalinux-create -t project -s ~/Desktop/BSP/zc706.bsp
    • 把上面的路径换成你的BSP放置的路径,文件名也换成你的BSP的文件名(废话…)
    • -t 表示的是 type,类型是project,-s 表示 source,源是你的BSP文件
    • 你也可以加一个 -n 参数,自定义工程的名称。n for name
  • 好的,一个BSP工程建立完毕。

创建一个自定义工程

创建工程肯定不可能只从BSP生成嘛,以下步骤可以创建一个自定义的工程,而不是基于某个特定开发板的工程。

  • 先 cd 到你希望放置工程的路径。比如我的就是:
    • petalinux-create -t project --template zynq --name test_proj
    • 这样就创建了一个基于zynq芯片模板,名为test_proj的工程了。
    • template属性可以选择zynq,zynqMP,microblaze。

将硬件平台从Vivado工程导出

Vivado中,可以通过以下方法导出硬件描述文件(.hdf)
- File -> Export -> Export to hardware
将导出的 hdf 文件放好,待会需要用到。

将工程的硬件配置导入PetaLinux

我们从Vivado中得到了一个硬件,并导出为 .hdf 文件,现在可以把它导入PetaLinux平台。

  • 首先 cd 到你的工程根目录下
  • 导入硬件配置文件
    • $ petalinux-config --get-hw-description=~/Desktop
    • 注意参数是存有hdf文件的路径,而不是文件本身。
  • 然后应该会弹出一个菜单让你配置,配置完之后 save,exit即可。
    • 其实一般不用怎么动,尤其是第一次跟着做的话基本一脸懵逼
    • 每个细目具体是什么意思,参考UG1144的附录B和附录C

生成系统镜像文件

生成一个Linux镜像文件。

  • 首先 cd 到你的工程根目录下
  • 生成系统镜像
    • $ petalinux-build
    • 生成日志 build.log 存放在‘build’子目录中
    • 镜像文件存放在 /images/linux 中

生成引导镜像

我们有了一个系统镜像,有了一个FPGA的比特流文件,还有了一个u-boot。我们就可以生成一个引导镜像BOOT.bin
命令如下:
$ petalinux-package --boot --fpga xxx.bit --u-boot
其中 xxx.bit 是你在Vivado里生成出来的比特流文件。
然后你就可以看见当前目录下生成了一个BOOT.bin,就是引导镜像文件。

打包Pre-Built镜像

举个栗子,我们成功地做了一个镜像系统,现在需要将其备份,可以通过以下命令将其打包为“Pre-Built镜像”。
首先 cd 到工程根目录。
$ petalinux-package --prebuilt --fpga xxx.bit
然后就会出现一个prebuilt目录,里面有完整的系统镜像文件。
我们可以用prebuilt的镜像来引导系统,命令如下:
$ petalinux-boot --qemu --prebuilt 3
其中3代表的是 < BOOT_LEVEL >,可以选择为1/2/3,分别代表不同的引导层次,具体请参考UG1144的24页。

在QEMU中启动系统

上面说到的用prebuilt的镜像引导是其中一种方法,也可以直接引导。
在工程根目录下执行如下命令:

  • $ petalinux-boot --qemu --u-boot
    • 这样就可以把u-boot下载到QEMU中;
    • 其中 qemu 表示在QEMU虚拟环境中启动,可以换成--jtag,这样就可以通过J-TAG下载到板子上。
  • $ petalinux-boot --qemu --kernel
    • 这样就可以把内核下载到QEMU中;
    • 其实还需要一个--dtb参数的,dtb是device tree blob,设备树文件,用来描述外挂的设备地址,如果缺省此参数,则会自动选用 /images/linux/system.dtb 文件

那么,到这里,就安装成功并简单地测试了一下了。 UG1144是个好东西,后面还有打包固件包、封装自己的BSP、添加用户库、添加用户应用、自动登录等等的教程。 刚开始看确实很痛苦啊,看了一整天,跟着做,做完了博客里写的部分,才看了不到一半。而且是全英文,虽然我英语不差,但是看起来还是有些吃力。 ┑( ̄Д  ̄)┍话虽如此,还是推荐看英文的UG,毕竟原汁原味,我水平也有限,有一些可能理解不到位。反正,一起加油吧。。。

PetaLinux安装教程,基于Ubuntu的更多相关文章

  1. 在两个屏幕上运行的iOS应用程序(无镜像)

    我创建了一个包含幻灯片的iPad应用程序,当用户点击此幻灯片时,他/她可以输入一些信息.我现在要做的是在通过AirPlay连接电视和iPad时在电视上显示幻灯片显示内容可以这样做吗?如何在iOS中完成?所以不要反映整个应用程序.解决方法您可以使用Airplay和AppleTV编写应用程序以处理2个UIScreens,然后为电视UIScreen和iPadUIScreen设置单独的根视图控制器.然后在电视的视图控制器上显示图像或幻灯片,并从iPad视图控制器的事件中运行该图像或幻灯片!

  2. ios – 如何镜像UIBezierPath?

    我有一个UIBezierPath,我想得到它的镜像.我该如何做到这一点?

  3. ios – Airplay:外部窗口镜像子视图

    米解决方法称为AirPlay镜像的技术命名不佳.它实际上以两种模式运行,一种是将整个iOS设备镜像到AirPlay设备,另一种模式下,一旦连接了镜像AirPlay设备,开发人员就可以使用两个UIWindow/UIScreen.您正在使用后一种模式,通常被称为“镜像”,但是您真的有一个完全独立的窗口/屏幕进行管理,应该有更好的术语来指代这种操作模式.上面所描述的内容基本上是将UIView从设备窗口移动到AirPlay窗口,它的工作原理与之一致!

  4. iOS AirPlay:我的应用程序仅在镜像开启时通知外部显示器?

    >为什么我的应用程序会收到通知我开镜像时的外部显示……我显然误解了一些东西,但是看起来像镜像应该通知我的应用程序外部显示器已经消失代码示例如下.在此先感谢您的帮助!

  5. 让你真正明白cinder与swift、glance的区别

    Cinder——提供块存储,类似于Amazon的EBS块存储服务,目前仅给虚机挂载使用。Cinder包含以下三个主要组成部分APIservice:Cinder-api是主要服务接口,负责接受和处理外界的API请求,并将请求放入RabbitMQ队列,交由后端执行。Cinder目前提供VolumeAPIV2Schedulerservice:处理任务队列的任务,并根据预定策略选择合适的VolumeService节点来执行任务。目前版本的cinder仅仅提供了一个SimpleScheduler,该调度器选择卷数量

  6. npm淘宝镜像修改讲解

    这篇文章主要介绍了npm淘宝镜像修改讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  7. 使用Docker制作Python环境连接Oracle镜像

    这篇文章主要为大家介绍了使用Docker制作Python环境连接Oracle镜像示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  8. 解决Mac下安装nmp的淘宝镜像失败问题

    今天小编就为大家分享一篇解决Mac下安装nmp的淘宝镜像失败问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  9. python 镜像环境搭建总结

    这篇文章主要介绍了python 镜像环境搭建总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  10. php7 安装yar 生成docker镜像

    这篇文章主要介绍了php7 安装yar 生成docker镜像,需要的朋友可以参考下

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部