操作系统:Ubuntu 16.04 LTS

应用软件:Vivado 2016.2  + petalinux 2016.2

参考官方应用手册:ug1144-petalinux-tools-reference-guide.pdf

1、软件安装

1.1 基础软件安装

在安装应用软件前,需要为zynq开发环境安装必要的基础软件,在手册11页已经明确标明。

注意:tftp软件使用tftp-hpa,如下所示:

  1. #1、安装
  2. sudo apt-get install tftp-hpa tftpd-hpa
  3.  
  4. #2、建立目录
  5. sudo mkdir /tftpboot
  6. sudo chmod 777 /tftpboot
  7.  
  8. #3、配置
  9. sudo vim /etc/default/tftpd-hpa
  10. #修改以下两项
  11. TFTP_DIRECTORY="/tftpboot"
  12. TFTP_OPTIONS="-l -c -s"
  13.  
  14. #4、启动
  15. sudo service tftpd-hpa restart

在此基础上,为了启动eclipse需要安装java开发环境和支持库:

  1. sudo apt-get install openjdk-8-jre
  2.  
  3. sudo apt-get install lib32z1
  4. sudo apt-get install lib32ncurses5
  5. sudo apt-get install lib32bz2-1.0 (官方说需要安装,但实际没有找到这个库)
  6. sudo apt-get install lib32stdc++6

1.2安装配置

完成1.1步骤后,需要打开tftp服务器,在后期可以直接通过petalinux给zynq更新代码

1.3安装应用软件

参考官方手册

注意:为安装目录打开所有可读可写可执行权限!

1.4应用软件配置

为了能够顺利启动vivado、sdk以及petalinux,需要做如下几步:

1、在/opt/Xilinx/SDK/2016.2/.settings64-Software_Development_Kit__SDK_.sh中增加

  1. export SWT_GTK3=0

2、在home目录下新建文件:.bash_aliases,

在启动控制台头bash会自动调用.bash_aliases里的内容。做如下设置:

  1. echo "<----自启动设置---->"
  2.  
  3. echo "1.设置快捷操作命令"
  4. ############################
  5. #重命名
  6. ###########################
  7.  
  8. echo "2.设置zynq sdk环境"
  9. ############################
  10. #自动运行
  11. ###########################
    export EXTERN_COMPILER=/opt/Xilinx/petaLinux/petalinux-v2016.2-final/tools/linux-i386/gcc-arm-linux-gnueabi/bin/
  12. source /opt/Xilinx/petaLinux/petalinux-v2016.2-final/settings.sh
  13. source /opt/Xilinx/Vivado/2016.2/settings64.sh

3、安装的应用软件目录很多默认需要root权限,如果是用普通用户操作应用软件,需要为很多目录增加权限。

4、修复awk错误

官方bug报告中有如下说明:

If you are not using the AXI BFM IP, you can remove the LD_LIBRARY_PATH setting from settings64.sh

通过屏蔽.settings64-Vivado.sh中对“LD_LIBRARY_PATH”的赋值,便可修复awk错误。

5、链接新库

官方包里有些库已经过时了,需要重新链接到系统的库。

  1. #先做更新
  2. sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  3. sudo apt-get update
  4. sudo apt-get upgrade
  5. sudo apt-get dist-upgrade
  6.  
  7. #然后链接
  8. cd /opt/Xilinx/SDK/2016.2/lib/lnx64.o/
  9. mv libstdc++.so.6 libstdc++.so.6.old
  10. ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6

2、生成嵌入式文件

2.1生成硬件描述文件

根据系统需求,使用vivado生成硬件描述文件并启动sdk生成硬件描述文件夹。

注意:linux下需要主动安装驱动,在 <xilnix安装目录>/Vivado/2016.2/data/xicom/cable_drivers/lin64/install_scripts/install_drivers/

运行:

  1. sudo install_drivers

完成后重启电脑。

2.2根据已经存在的bsp生成petalinux工程

  1. #生成工程bsp
  2. petalinux-create -t project -s <path-to-bsp>
  3.  
  4. <path-to-bsp>= petalinux结构的bsp文件夹

关于版本控制:

使用git在工程目录下需要忽略三个文件夹:

1、.petalinux

2、build

3、images

2.3从头新建petalinux工程

在petalinux工程目录下使用命令:

  1. petalinux-create --type project --template <CPU_TYPE> --name <PROJECT_NAME>
  2.  
  3. CPU_TYPE = zynqMP zynq microblaze
  4. PROJECT_NAME 即为新建工程名字
  1. petalinux-config --get-hw-description=<path-to-directory-which-contains-hardware-description-file>
  2.  
  3. path-to-directory-which-contains-hardware-description-file:即为包含.hdf的文件夹

此过程中,会自动调用配置界面。配置完成后,生成fsbl,u-boot,内核,设备树,根文件系统等。

问题:

在生成设备树的过程中,会出现警告:

WARNING: ps7_ethernet_0: No reset found

WARNING: ps7_usb_0: No reset found

这个警告会导致以太网口不能使用!

解决:

2.4编译生成镜像文件

在petalinux工程目录下使用命令:

  1. petalinux-build -x distclean
  2.  
  3. LANG=C petalinux-build

生成uImage文件使用命令

  1. petalinux-package --image -c kernel --format uImage

2.5生成启动文件

在petalinux工程目录下使用命令:

  1. petalinux-package --boot --fsbl <FSBL image> --fpga <FPGA bitstream> --u-boot
  2.  
  3. FSBL image fsbl文件位置,位于./images/linux
  4. FPGA bitstream:bit :文件,位于./images/linux

执行命令后,会在工程目录下生成BOOT.BIN文件。

在配置好启动方式为SD卡启动后,将此文件和image/linux下的image.ub拷贝进SD卡,便可启动Linux

2.6生成打包文件

在petalinux工程目录下使用命令:

  1. petalinux-package --prebuilt --fpga <FPGA bitstream>

在工程目录,生成pre-built文件夹,里面有系统需要的所有文件。

默认的登录名及密码都是root

2.7 将SD卡作为硬盘启动Linux

这种情况下linux下所做的改动将会保存在SD卡上。

1、将linux下将SD卡分为两个区,第一个区至少40M字节且格式化为FAT32,另一个区至少4G且格式化为EXT4。

2、使用"petalinux-config"命令,进入 "Image Packaging Configuration"->" Root filesystem type"然后选中SD卡,并保存配置。

3、重新编译并生成BOOT.BIN及image文件

4、使用以下命令生成文件系统压缩包:

  1. #生成文件名为 rootfs.cpio,位于image/linux下
  2. petalinux-package --image -c rootfs --format initramfs

5、将BOOT.BIN和image.ub拷贝进SD卡的第一分区

6、将rootfs.cpio拷贝进SD卡的第二分区,并且使用以下命令解压

  1. sudo pax -rvf rootfs.cpio

3、软件应用

规定命令的使用均在petalinux工程根目录下使用!

使用petalinux启动zynq,可以选择3个阶段。

阶段1:仅仅下载FPGA 的bit流文件

阶段2:启动至uboot

阶段3:完全启动

3.1仿真启动

使用以下命令调用软件仿真:

  1. petalinux-boot --qemu --prebuilt 3
  2.  
  3. 3代表启动等级为3,即为全部启动。
  4. 12分别代表启动至fsblu-boot
    软件仿真仅能使用23

退出软件仿真使用 “ctrl+a” 松开以后按下 “x” 就可以了。

注意:若重新配置系统代码,在编译系统文件后,也需要重新更新pre-built文件夹(参考2.6节)

也可以为仿真指定新文件:

  1. #调用./images/linux/u-boot.elf
  2. petalinux-boot --qemu --u-boot
  3.  
  4. #调用./images/linux/zImage
  5. petalinux-boot --qemu --kernel
  6.  
  7. #或者指定内核路径,设备树路径(从zImage中提取设备树文件)
  8. petalinux-boot --qemu --image ./images/linux/zImage --dtb ./images/linux/system.dtb

3.2 jtga启动

首先需要将启动方式改为JTAG启动。

与3.1命令类似,仅仅是将 "qemu"替换为"jtag"即可

  1. petalinux-boot --jtag --prebuilt 3

除此之外也可以单独下载部分代码:

  1. #下载bit文件
  2. petalinux-boot --jtag --fpga --bitstream <BITSTREAM>
  3.  
  4. #下载uboot代码(image/linux/u-boot.elf)
  5. petalinux-boot --jtag --u-boot
  6.  
  7. #下载内核文件(image/linux/zImage)
  8. petalinux-boot --jtag --kernel
  9.  
  10. #查看启动的详细信息
  11. petalinux-boot --jtag --u-boot -v
  12.  
  13. #下载pmu 固件
  14. petalinux-boot --jtag --pmufw <PATH_TO_PMUFW_ELF> --u-boot
  15.  
  16. #获取xmd日志信息
  17. petalinux-boot --jtag --prebuilt 3 --tcl test.txt

3.3使用tftp启动目标板

在配置好tftp服务器的基础上,需要运行命令:

  1. petalinux-config
  2.  
  3. #进入 "Image Packaging Configuration".
  4. #选中 "Copy final images to tftpboot"
  5. #默认服务器文件位于“/tftpboot”,若不同还需要设置"tftpboot directory"

目标板需要连接网线,并且已经运行了U-boot(通过sd卡载入等)。在u-boot下进行如下设置:

  1. #设置服务器ip
  2. set serverip <HOST IP ADDRESS>; saveenv
  3.  
  4. #启动
  5. run netboot

3.3固件打包

固件打包用于将工程文件(fsbl+bit+ssbl+linux)打包成为.tar.gz文件

  1. petalinux-package --firmware --bootbin=<BOOT_BIN> --linux
  2.  
  3. #BOOT_BIN-> boot.bin文件所在位置
  4. #linux自动引用./images/linux/image.ub文件

3.4 bsp打包

将当前工程打包为一个bsp文件,形成结构和其他开发板商提供的bsp包一样。

在工程包外执行命令:

  1. petalinux-package --bsp -p <plnx-proj-root> --output <name>
  2.  
  3. #<name>即为bsp包名称(比如name = exercise,则会生成exercise.bsp文件)

3.5工程配置

petalinux提供了kconfig配置界面,能够很详细的配置系统很多参数。使用命令:

  1. petalinux-config

具体配置说明及操作从手册第52页往后都有说明。

3.6基于petalinux的app开发

使用命令生成工程:

  1. petalinux-create -t apps [--template TYPE] --name <user-application-name> --enable
  2.  
  3. --template TYPE :可以选择模板类型
  4. <user-application-name> :工程名称
  5.  
  6. #创建一个C模版应用
  7. petalinux-create -t apps --template c --name myapp --enable
  8.  
  9. #创建一个C++模版应用
  10. petalinux-create -t apps --template c++ --name myapp --enable

生成的工程位于./components/apps,在此工程模板的基础上编辑源代码,当有新文件需要修改当前目录下的Makefile。

1、当要添加更多的源文件,可以简单粗暴的添加对应的.o文件名

2、当要添加其他配置文件,在"install"目标下加入

  1. #将myfile.conf 固化进 /etc目录下
  2. $(TARGETINST) myfile.conf /etc
  3.  
  4. #将字符串"some text here" 固化进 /etc/system.conf下
  5. $(TARGETINST) -a "some test here" /etc/system.conf

同时在petalinux配置菜单里面也会出现这项,可以通过修改kconfig来配置APP选项。

  1. #进入配置界面后,Applications选项可以找到APP,并使能
  2. petalinux-config -c rootfs
  3.  
  4. #使用命令编译重新编译,并将bin文件固化进文件系统
  5. petalinux-build

当需要完全编译整个系统时,使用:

  1. LANG=C petalinux-build

当仅仅需要修改根文件系统时,在petalinux工程目录下使用:

  1. #假设app工程名为myapp
  2. petalinux-build -c rootfs -x do_gen_sysroot
  3. petalinux-build -c rootfs/myapp
  4. LANG=C petalinux-build -x package

此app便被加入了文件系统,可以使用以下命令来选择app是否被编译

  1. petalinux-config -c rootfs

3.7 在文件系统中增加库

3.8 自动登录(开机自动运行APP)

创建一个新的app,并做如下修改:

  1. #修改app内容
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6. execlp( "login", "login", "-f", "root", 0);
  7. }
  8.  
  9. #修改makefile 的install 目标内容,这样可以开机自动运行
  10. $(TARGETINST) -d -p 0755 autologin /etc/init.d/autologin
  11. $(TARGETINST) -s /etc/init.d/autologin /etc/rc5.d/S99autologin

注意:当需要设置一个APP开机运行且不会退出时,应当以守护进程的方式启动它。

3.9 调试内核

使用GDB在QEMU仿真的支持下调试

  1. #1.启动仿真内核
  2. petalinux-boot --qemu --kernel
  3.  
  4. #2.在QEMU启动输出的前几行中,可以找到gdb 的 tcp端口号
  5. -gdb tcp:<TCP_PORT>
  6.  
  7. #3.启动linux另外一个命令行窗口,进入images/linux目录
  8.  
  9. #4.启动gdb调试
  10. petalinux-util --gdb vmlinux
  11.  
  12. #5.在GDB中使用刚才显示的端口号
  13. (gdb) target remote :9000
  14.  
  15. #6.然后尽情调试吧,折腾吧

注意:可以在配置菜单中打开内核调试选项:

petalinux-config--kernel > Kernel hacking > Kernel debugging


3.10 通过SDK下的TCF工具调试APP(未验证通过)

首先生成执行文件

  1. #1.进入根文件配置界面
  2. petalinux-config -c rootfs
  3.  
  4. #2.在 Filesystem Packages 中进入base 子菜单
  5.  
  6. #3. 使能 tcf-agent 选项
  7.  
  8. #4.进入上层的 console/network 子菜单
  9.  
  10. #5.使能 dropbear-openssh-sftp-server 子菜单
  11.  
  12. #6.重新编译

然后进行调试

  1. #1.使用QEMU或者硬件启动系统
  2.  
  3. #2.启动SDK并新建工程
  4.  
  5. #3.在新建工程中选择硬件描述符文件,位于"<plnx-proj-root>
  6. #/subsystems/linux/hw-description/system.hdf"
  7.  
  8. #4.新建linux类型的debug

3.11 修改设备树

设备树的编辑在文件system-top.dts下,此文件位于subsystems/linux/configs/device-tree文件夹下。

设备树的文档位于内核跟目录下的:Documentation/devicetree

3.12 u-boot配置

若需要在u-boot下打开某些命令或选项,官方建议编辑 ./subsystems/linux/configs/u-boot/platform-top.h 文件,然后重新编译u-boot

  1. #编译u-boot
  2. petalinux-build -c u-boot
  3.  
  4. #生成u-boot.bin
  5. petalinux-package --boot --fsbl <FSBL image> --fpga <FPGA bitstream> --u-boot

3.13 深度定制

关于需要修改最底层的驱动、源码等等,需要将自己生成的uboot、linux源码等放在当前工程根目录的components目录下操作

4 petalinux 工作流程

4.1基于官方提供的bsp上开发

在官方bsp开发可以提高开发速度,使用以下命令关联bsp:

  1. #关联bsp,并在当前目录创建工程
  2. petalinux-create -t project -s <path-to-bsp>
  3. #编译生成最终的镜像文件
  4. LANG=C petalinux-build

在./build/build.log中有具体的编译日志,在./images有编译文件,在/tftpboot(tftp服务区文件夹,默认为此路径)中也复制了一份。

zynq基础-->linux下软件应用的更多相关文章

  1. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  2. 2019-9-16:渗透测试,基础学习,Linux下软件安装,环境搭建,笔记

    Centos linux下软件安装yum 通过分析rpm包头数据后,自动解决依赖关系,直接云端下载软件,根据不同版本系统获取不同软件信息,按顺序下载rpm包,安装软件yum search 软件名:搜索 ...

  3. Linux 下软件安装

    Linux 下软件安装 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而 ...

  4. Linux下软件安装

    1.apt-get安装 自动下载依赖包.全程自动安装.但不能指定安装的位置 xiaohuang@xiaohuang-virtual-machine:~$ sudo apt-get install sl ...

  5. linux下软件安装的方法

    linux下软件的安装与卸载   第一章   linux下安装软件,如何知道软件安装位置 注:一般的软件的默认安装目录在 jdk-1_6_0_14-linux-i586-rpm.bin    ←修改为 ...

  6. Linux下软件安装方法即路径设置

    Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html

  7. linux下软件安装与卸载

    linux上软件二进制安装主要分为:rpm手动安装和yum在线安装(其所安装的都为rpm二进制包). 关于rpm手动安装,学习后面内容前需分清如下内容: 包全名 : 操作的包是没有安装的软件包时,使用 ...

  8. linux下软件安装的几种方式

    linux下软件安装的几种方式(主要有源码安装, rpm安装, yum安装). 一:源码安装 几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc. ...

  9. Linux下软件常见安装方式

    pasting  分类: Linux2007-12-08 16:31 1909人阅读 评论(0) 收藏 举报 linuxredhat脚本文档managerfile        Linux下软件安装主 ...

随机推荐

  1. ORA-01919: role 'PLUSTRACE' does not exist

    环境:Oracle 10g,11g. 现象:在一次迁移测试中,发现有这样的角色赋权会报错不存在: SYS@orcl> grant PLUSTRACE to jingyu; grant PLUST ...

  2. 纯css瀑布流布局

    由于公司的项目需要才用到瀑布流布局 因为后台返回的json直接循环出来的,所以不能做左右浮动的那种,所以才用到了瀑布流布局 16年之前的瀑布流布局基本都时基于js或者直接用jq插件的,但是随着技术的进 ...

  3. RSA加解密 公钥加密私钥解密 公加私解 && C++ 调用openssl库 的代码实例

    前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密 ========================= ...

  4. LeetCode112.路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22 ...

  5. php开启慢日志

    默认是以本机的安装路径 cd /usr/local/php/etc/ vim php-fpm.conf ; The log file for slow requests ; Default Value ...

  6. CentOS中无法使用setup命令 -bash:setup: command not found

    出现这个问题是因为 Minimal 安装模式 所以并没有安装 setuptool 软件. 解决办法为: 使用yum 源直接下载安装 或者 去下载 setuptool 软件包安装 #安装setuptoo ...

  7. RabbitMQ理论

    RabbitMQ理论   消息 = 有效载荷(数据) + 标签(包含载荷和收件人的信息)   信道:你的应用于RabbitMQ代理服务器之间的TCP连接(有唯一的ID),信道主要解决了每一个线程单独T ...

  8. Vue系列之 => 动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. sitecore系统教程之内容编辑器中创建项目

    在内容编辑器中创建新项目时,必须先在内容树中选择一个项目,以指示新项目的位置.您可以创建一个新项目作为您选择的项目的兄弟或子项目: 兄弟是您在与所选项目相同的级别创建的项目. 子项是您在所选项下创建的 ...

  10. Lua 服务器与客户端实例

    =============================================================== 服务器,main.lua ======================= ...