1.准备一个开发板ALinx 7010 (Zynq 7000 系列)
2.下载PetaLinux 2021.2 (选择这个版本是因为我的xsa文件用的这个版本,为了避免不必要的麻烦,采用和vivado一样的版本,你可以选择其他的更高的版本)
3.准备Ubuntu 20.04.1 LTS 下载链接:Index of /releases
首先安装虚拟机(实体机也可以),此处不再介绍,在虚拟机中安装PetaLinux 2021.2。安装完成之后我们创建一个工作目录:EtherCatLinux,在终端中进入目录。
pwd: /home/pgl/WorkSpace/EtherCatLinux/
我们创建一个xsa的文件夹,并把已经准备好的xsa文件放入其中。(xsa文件需要自己准备,或者你的开发板提供这些资料,但是开发板一般提供的版本比较老,请在上下文中指定自己的版本,本文不再说明这些)
然后逐个执行以下命令:
在本终端中申明环境变量(只在本终端生效,本终端关闭后失效)
source /home/pgl/WorkSoft/PetaLinux/settings.sh
创建PetaLinux工程
petalinux-create --type project --template zynq --name EtherCatLinux
进入工程目录
cd EtherCatLinux/
根据xsa创建硬件信息 弹出的menuconfig什么都不要改
petalinux-config --get-hw-description ../xsa
进入以下目录中打开文件添加两行内容,编译完成不要删除源码信息
RM_WORK_EXCLUDE += "linux-xlnx"
RM_WORK_EXCLUDE += "u-boot-xlnx"
# config kernel 弹出的menuconfig什么都不要改
petalinux-config -c kernel
# config rootfs 弹出的menuconfig什么都不要改
petalinux-config -c rootfs
# build 直接编译
petalinux-build
等待编译完成。找到如下目录,这是自动下载的kernel源码
把这个文件夹拷贝出来,我们需要对次源码打上patch,patch根据kernel的版本自行下载。可以根据kernel根目录中的makefile查看版本号。patch下载
https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/
以我的为例 kernel版本号是5.10.0 所以我下载patch-5.10-rt17.patch.xz。记住下载patch开头,xz结尾的patch包。自己找最新的那个就可以。
我把上面找到的kernel源码拷贝到随便指定的目录下。同时把下载好的patch包放入,执行patch的命令:
xzcat ./patch-5.10-rt17.patch.xz | patch -p1
执行完成,无报错即可。
重新执行命令petalinux-config
注意:此命令需要在petalinux工程根目录中执行,对我来说就是以下目录
我们进入选项中把linux的源码改为外部源码
同时在最后一项中设置我们自定义的源码路径。
保存配置
重新执行petalinux-config -c kernel
在General setup中选择Preemption model,并更改选项为如下,保存。
重新执行petalinux-build。
编译结束后,执行以下命令。
petalinux-package --boot --u-boot --force
到此我们的petalinux就编译好了。我们只需要把生成的镜像拷贝到sd中就可以启动了。
SD卡应该包含2个分区,BOOT和EXT4分区。名字是自己指定的,如果要更改名字和调整分区顺序,记得自己去修改uboot中的启动分区和linux中的bootargs。
# /media/pgl/BOOT
# /media/pgl/EXT4
cp images/linux/BOOT.BIN /media/pgl/BOOT
cp images/linux/image.ub /media/pgl/BOOT
cp images/linux/boot.scr /media/pgl/BOOT
sudo tar xvf images/linux/rootfs.tar.gz -C /media/pgl/EXT4