一、安装petalinux
1.安装虚拟机,在虚拟机里安装linux系统(ubuntu 16.04)
- 虚拟机里磁盘尽量预留多一点,建议60G以上,我的是80G
- 建议安装VMware Tools虚拟机
- 开发工具:vivado 2017.4(Windows) + petalinux 2017.1(Linux)
(1)更新apt-get(更换源,可选,加速用)
在linux系统中打开/etc/apt目录下找到sources.list文件,将文件内容替换为:
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
打开命令行执行:
apt-get update
刷新列表
(2)安装petalinux的依赖环境
安装petalinux的必要依赖环境,直接复制粘贴下面的命令行到终端中,系统自动下载安装下面的工具:
sudo apt-get install build-essential vim tofrodos \
iproute2 gawk gcc git make net-tools zlib1g-dev \
libssl-dev flex bison libselinux1 libncurses5-dev \
tftpd lib32z1 lib32ncurses5 libbz2-1.0:i386 \
lib32stdc++6 xvfb chrpath socat autoconf libtool
(3)修改/bin/sh
终端输入:
dpkg-reconfigure dash
在出现的界面中选择“no”
(4)下载petalinux
官网下载petalinux-v2017.1-final-installer.run(在Xilinx官网下载,文件大约8G,注册账号以后每次下载Xilinx大文件都可以用上)
(5)安装petalinux
在用户目录下(我的:home/bao/mnt),新建一个文件夹petalinux。
在普通用户下终端输入(home/bao/mnt路径下):
./petalinux-v2017.1-final-installer.run ./petalinux
经过漫长的等待,安装到一半的时候,提醒查看许可,按回车查看,按q退出,退出后输入y,回车,重复三次,才开始正式安装,在安装时会提醒一些库没有安装,不用管,后面安装也行。
(6)补一些库的安装
把下面命令粘贴到终端命令行中回车即可,这条要执行,后面的可以有选择安装。
apt-get install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386 libncurses5
libncurses5-dev libc6:i386 libstdc++6:i386 zlib1g:i386 libssl-dev tftpd tftp openbsd-inetd
先安装刚刚安装时,提示缺少的库:
apt-get install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386
安装一些之后需要的库,全都安装了避免麻烦:
在运行petalinux-config -c kernel会出现错误,需安装:
apt-get install libncurses5 libncurses5-dev
编译时可能会出现错误arm-xilinx-linux-gnueabi-gcc: Command not found,需安装:
apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386
提示缺少zlib和openssl,需安装:
apt-get install libssl-dev
出现警告(可以不处理),提示No tftp server found - please refer to “PetaLinux SDK Installation Guide” for its impact and solution,需安装:
apt-get install tftpd tftp openbsd-inetd
安装完成后,编辑一下/etc/inetd.conf里的东西:
gedit /etc/inetd.conf
打开了文件,并在文件最后一行增加:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftproot
然后保存并退出 ,之后再进行一些简单操作:
mkdir /tftproot
chmod 777 /tftproot
/etc/init.d/openbsd-inetd restart
输入
netstat -an | more | grep udp
以确定成功(打印出udp 0 0 0.0.0.0:69 0.0.0.0:*)
(7)验证是否安装成功
source /home/bao/mnt/petalinux/settings.sh
成功定位不报错的话,基本是成功了的
echo $PETALINUX
命令行会打印出安装路径 :/home/bao/mnt/petalinux
二、搭建硬件环境
1.新建工程,选择对应的芯片型号,并新建一个 Block Design 原理图文件(命名为design_1),然后添加一个ZYNQ Processing system的IP核,并设置好与硬件相符合的PS和PL时钟以及DDR型号。
2.为了使PetaLinux正常的运行,需要分配一些硬件外设资源,这些硬件资源根据需求还有不同的板卡来定,搭建好的block design原理图如下所示。
3.然后右键单击 Block文件,文件选择Generate the Output Products,然后右键单击Block文件,选择 Create HDL wrapper,根据 Block design文件内容产生一个 HDL 的顶层文件,并选择让vivado自动完成。
经Vivado综合,实现后,在Vivado中导出硬件,输出PetaLinux所需要的硬件描述文件。
输出的文件就在“/(工程文件夹)/(工程名).sdk”这个文件夹下,这个文件夹下的design_1_wrapper.hdf即为输出文件,这个文件在后面的编译中需要用到。
这个ZYNQ vivado工程下载地址:https://github.com/EdwardBao1006/Z-Turn_Petalinux,可以根据自己的需要修改block design。
三、搭建petalinux工程
1.定位目录
在home下新建PRO文件夹存放工程文件(我的是home/bao/PRO)
cd home/bao/PRO
2.定位编译链
根据安装petalinux的路径:
source /home/bao/mnt/petalinux/settings.sh
注:每次重启系统都要执行这一条,若是想解决,方法如下(当然也可以不解决,不影响):
.bashrc是终端的初始化配置脚本,每次打开新的终端的时候,都会执行这个脚本,把环境变量配置脚本加在里面,就能在打开的时候自动配置了。执行:
gedit ~/.bashrc
在最后一行增加
source /home/bao/petalinux/settings.sh
关闭终端,再打开终端
3.创建petalinux工程
在PRO目录下面,创建一个工程:
petalinux-create --type project --template zynq --name h1_petalinux_test
h1_petalinux_test是工程名,该命令会自动在PRO文件夹里创建h1_petalinux_test文件夹
4.引用刚才输出的硬件描述文件
把之前导出的硬件描述文件design_1_wrapper.hdf拷贝到虚拟机中的h1_petalinux_test工程文件夹下。
然后:
petalinux-config --get-hw-description=/home/bao/PRO/h1_petalinux_test
会进入一个配置界面,在里面我们可以配置一些系统参数,主要的配置包括:启动方式,启动存储器分区表,启动文件名称等等,本文暂不对其修改(默认是从SD卡中启动),然后等待其配置(时间较长)。
5.获取文件夹权限
在上一步完成后,输入命令
sudo chmod -R 777 /home/bao
获取文件夹权限(工程文件夹和petalinux的安装文件夹),否则编译的时候,会发生错误。
输入:
source /home/bao/mnt/petalinux/settings.sh
(如果上面修改过.bashr文件就不用执行这条,否则要重新执行)
注:到此为止,在终端中的命令既可以以超级用户su的身份运行也可以以普通用户的方式运行(建议全部都用普通用户的方式,免得切换),但是编译u-boot和kernel以及rootfs的时候,必须以普通用户的身份运行命令行,否则会报错。
6.编译u-boot
注意:到此处的时候,不能再用超级用户了,要切换到普通用户下,之后的所有操作都在普通用户下。
终端输入:
petalinux-config -c u-boot
然后等待GUI出来,这里暂时不改动配置,直接save(save为u-boot.config,名字随便取但不要留空),然后继续等(新建的工程时间会长一点)。
7.编译kernel
终端输入:
petalinux-config -c kernel
然后等待GUI出来,这里暂时不改动配置,直接save(save为kernel.config,名字随便取但不要留空),然后继续等。
8.编译rootfs
终端输入:
petalinux-config -c rootfs
操作同上(save为默认即可)。
9.设备树配置
若要修改,直接在工程文件夹下,Ctr+F搜索.dts就可以找到相关文件,做出相应修改,暂时默认,不修改,按照它自动生成的设备树。
10.编译工程
终端输入:
petalinux-build
等待即可,时间较长,可以喝杯咖啡,最后生成的文件在 image/linux下。
最终需要的四个文件在这个文件夹下,分别为:
- zynq_fsbl.elf #FSBL可执行文件
- design_1_wrapper.bit #FPGA配置bit文件
- u-boot.elf #SSBL可执行文件
- image.ub #linux镜像文件
四、烧录及测试
1.生成BOOT.bin文件
如果在linux中安装了vivado,可以在最后的文件夹中执行:
petalinux-package --boot --format BIN --fsbl zynq_fsbl.elf --fpga design_1_wrapper.bit --u-boot
会发现文件夹中多了BOOT.BIN文件,最后加上image.ub文件拷入SD卡,插入Z-turn板卡,也可以启动。
但是我在linux中没有装vivado,所以就在windows中生成了BOOT.BIN。将上面生成的四个文件:
zynq_fsbl.elf #FSBL可执行文件
design_1_wrapper.bit #FPGA配置bit文件
u-boot.elf #SSBL可执行文件
image.ub #linux镜像文件
拷贝到windows下,打开之前建立vivado ZYNQ block design的工程,在工程里File—> Launch SDK。
在SDK中选择Xilinx—> Creat Boot Image。
分别按顺序加入 zynq_fsbl.elf—> design_1_wrapper.bit—> u-boot.elf 三个文件。点击 Create Image按钮,生成BOOT.bin文件。
2.烧录FLASH
本文选择的是将启动程序烧录进QSPI FLASH,以FLASH上电启动。连接Jtag线,一定要保证在工程里板子和电脑是通过Jtag线接好的,选择Xilinx SDK的Xilinx—> Program Flash。
(1)烧录BOOT.bin
Image File选择刚才生成的BOOT.bin文件,Flash Type选择qspi_single,Offset填写0,点击Program按钮。烧录完成后,我们的FSBL.bit,SSBL就成功下载到QSPI Flash中去了,我们就已经可以实现u-boot的启动了,但是还不能引导kernel。
注:Device一项最好点“Select…”,选择跟电脑连接的板子,确认一下。
(2)烧录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烧录。
五、最终效果
用MobaXterm的串口配置如下:
串口线,这时候电源线也可以去掉
只用一根串口线也是可以的
按一下板子上的“RESET”,系统就跑起来了。
密码和用户名都是root。
感谢以下这几位小伙伴的帮助:
—> zynq学习笔记之petalinux (2)安装petalinux 2017.4
—> zynq学习笔记之petalinux (3)petalinux 创建自定义工程
—> ZYNQ跑系统 系列(二) petalinux方式移植linux