基于ZCU104的PS和PL数据交互例程(五):Petalinux流程
基于ZCU104的PS和PL数据交互例程(一):简介
基于ZCU104的PS和PL数据交互例程(二):vivado中封装现有工程成IP
基于ZCU104的PS和PL数据交互例程(三):vivado中创建IP
基于ZCU104的PS和PL数据交互例程(四):vivado中制作Block Design
基于ZCU104的PS和PL数据交互例程(五):Petalinux流程
基于ZCU104的PS和PL数据交互例程(六):上板流程
基于ZCU104的PS和PL数据交互例程(七):驱动编写与测试
在生成了硬件的xsa文件后,我们开始制作基于自定义架构的linux镜像。虽然板卡是zcu104,但是对于类似的zcu102,这种ZYNQ系列都是类似的。
下面的环境是在虚拟机 Ubuntu 18.04中进行的
1.安装petalinux 2020.2
下载安装包
从官网下载petalinux2020.02版本安装包,petalinux-v2020.2-final-installer.run
安装依赖
sudo apt-get install -y gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential zlib1g:i386 screen pax gzip gawk
修改bash
PetaLinux 工具要求主机系统 /bin/sh 为“bash”。使用下面命令更改默认的系统 shell /bin/sh更改(选择“否”,更改完再用查看一下是否更改成功)。
sudo dpkg-reconfigure dash
#查看修改后是dash还是bash
ls -l /bin/sh
在Ubuntu中新建文件夹
sudo mkidr -p /opt/eda/petalinux/2020.2
修改opt文件夹权限
sudo chown -R username::username /opt
#假设我的用户名叫shuiliu,则我执行
sudo chown -R shuiliu:shuiliu /opt
运行安装
./petalinux-v2020.2-final-installer.run --dir /opt/eda/petalinux/2020.2
设置运行别名
vim ~/.bashrc
#在最后加入下面一行
alias sptl20='source /opt/eda/petalinux/2020.2/settings.sh'
关闭终端,否则需要source ~/.bahrc才能生效。
后面每次打开终端,如果需要运行petalinux环境,只需要输入下面指令就行
sptl20
2.petalinux流程
环境说明
Ubuntu18.04,vivado 2023,petalinux 2020
bsp 2020,下载 (xilinx.com)
准备好BSP一定要选择跟petalinux配套的版本和pynq的镜像
流程
参考工程目录如图所示,我的主目录路径是*/home/shuiliu*,各自主机名不同,不清楚的话就是**~**路径,我在主目录下新建了一个workspace文件夹,后面都在这里操作
mkdir ~/workspace
文件夹说明:
BSP:里面放着从官网上下载的bsp文件
install:里面放着petalinux相关的安装包
ps_pl:里面是petalinux 的工程,注意这个文件夹不是我们mkdir创建的,是通过petalinux-create指令创建的
XSA:里面放着vivado生成的xsa文件
下面我们在workspace下新建终端,输出的路径应该是
pwd
#输出下面的结果
/home/shuiliu/workspace
-
source petalinux的setting.sh,通常会用alias在.bashrc中设置为别名启动
sptl20
-
创建工程,名称为ps_pl
petalinux-create -t project -n ps_pl -s ./BSP/xilinx-zcu104-v2020.2-final.bsp
-
配置工程
将生成的.hdf或者.xsa文件(vivado生成比特流后点击file-export hardware-勾选include 比特流)复制到新建的XSA文件夹下
然后执行下面的指令
cd ps_pl petalinux-config --get-hw-description ../XSA/design_1_wrapper.xsa
修改选项配置,选择从SD卡启动
Image Packaging Configurations -> Root filesystem type -> SD card
配置成功后如下图所示,选择save然后退出
-
修改设备树
将
/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi 的内容改为 /include/ "system-conf.dtsi" &amba { xlnk { compatible = "xlnx,xlnk-1.0"; }; }; /{ reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; reserved: buffer@0x10000000 { no-map; reg = <0x10000000 0x0DF9E000>; }; }; reserved-driver@0 { compatible = "xlnx,reserved-memory"; memory-region = <&reserved>; }; };
主要的目的是在PS的DDR中设置保留地址,从0x10000000开始,大小为0x0DF9E000,为了后面进行映射
20231026补充一下这个方法在petalinux2018.02上面是没有问题,我在跑这个系列,在petalinux2020.02上用这个方法也是可以的。
!!!但是,我在后面的工程里面遇到了一个问题,就是映射CMDA的地址后,无法读取和写入相关寄存器,以操作就会卡死。经过摸索,将这一步改为,不修改system-user.dtsi,保持默认,修改pl-custom.dtsi为下面的内容,就可以了
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
buffer@0x10000000 {
no-map;
reg = <0 0x10000000 0 0x0DF9E000>;
};
};
};
-
配置内核
petalinux-config -c kernel
不用修改什么,保存完,直接退出。这一步第一次加载会很久,后面有缓存了会好一些。
但是要注意,Kernel hacking —>[ ] Filter access to /dev/mem --> Save & exit 只有取消这个,才能访问PSDDR的地址空间,这里bsp的配置直接没有选,所以我们也不需要改。
出现下面这个界面后,先保存,后直接退出就行。
-
配置rootfs
petalinux-config -c rootfs
不用修改什么,保存完,直接退出
-
build工程
这一步会比较久
petalinux-build
-
打包工程
petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --pmufw images/linux/pmufw.elf --fpga images/linux/system.bit --u-boot images/linux/u-boot.elf --force
-
取出需要文件
将
/images/linux目录下的 BOOT.bin ,image.ub 和 boot.csr这三个文件取出 至此镜像准备完成