作者:Zhang Longley,AMD工程师,来源:AMD开发者社区
AMD XILINX的所有FPGA SoC器件(Zynq-7000, Zynq MPSoC, Versal)及软核(Microblaze)均支持使用Yocto构建Linux镜像。本博客展示了如何使用Yocto构建Linux镜像。本博客使用了2024.1版本的工具,快速构建基于ZCU102的Linux及其启动镜像,并在最后简单介绍如何在Yocto里导入用户设计并修改设备树。
1. Yocto运行的环境
Yocto对主机及其操作系统都是有要求的,具体要求请参考这个链接:https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html#compatible-linux-distribution
在满足要求的主机及操作系统里,先运行下面命令安装Yocto所需的软件包,下面命令是基于Ubuntu操作系统:
$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 python3-subunit zstd liblz4-tool file locales libacl1
$ sudo locale-gen en_US.UTF-8
$ sudo apt install libtinfo5
(安装libtinfo5是基于这个已知问题https://support.xilinx.com/s/question/0D52E00006tcCJ9SAM)
配置git的用户邮箱和用户名
"you@example.com" git config --global user.email
"Your Name" git config --global user.name
2. 构建基于ZCU102的Linux及其启动镜像
下载repo
$curl https://storage.googleapis.com/git-repo-downloads/repo > repo
$chmod a+x repo
下载Yocto manifests
$python3 ./repo init -u https://github.com/Xilinx/yocto-manifests.git -b rel-v2024.1
$python3 ./repo sync
配置Yocto环境
source setupsdk
构建镜像
$MACHINE=zcu102-zynqmp bitbake petalinux-image-minimal
其他可用的MACHINE可用在sources/meta-xilinx/meta-xilinx-bsp/conf/machine/下找到,例如:zcu106-zynqmp, zc706-zynq7
3. 运行镜像
在构建镜像完成后,所有的镜像位于Yocto工程这个目录下build/tmp/deploy/images/zcu102-zynqmp/ 。
在镜像目录下,把下面几个镜像拷贝到SD卡中,并重命名。(下面名字中的xxx为编译时间,每次编译均会变化)
boot.scr
BOOT-myhardware-zcu102-zynqmp-xxx.bin (重命名为BOOT.BIN)
Image--6.6.10-xilinx-v2024.1+git0+3af4295e00-r0.0-myhardware-zcu102-zynqmp-xxx.bin (重命名为Image)
petalinux-image-minimal-myhardware-zcu102-zynqmp-xxx.rootfs.cpio.gz.u-boot (重命名为rootfs.cpio.gz.u-boot)
system.dtb
在ZCU102中插入SD卡并设置为SD卡启动,上电后观察串口输出。
4. 在Yocto里导入用户设计
4.1 导入XSA文件
用户基于自己的电路板创建Vivado工程,编译导出XSA文件。然后用户可以通过下面的步骤,在Yocto里创建新的MACHINE并导入XSA文件。
创建新的layer
$bitbake-layers create-layer ../sources/meta-myhardware
$bitbake-layers add-layer ../sources/meta-myhardware
$mkdir ../sources/meta-myhardware/conf/machine
添加用户配置 (下面的替换为XSA文件所在的目录路径)
cat << EOF > ../sources/meta-myhardware/conf/machine/myhardware-zcu102-zynqmp.conf
#Base this machine configuration off of the zcu102 board and then make changes below
require conf/machine/zcu102-zynqmp.conf
"file://" HDF_BASE =
# Replace with the path to your XSA file from hardware
"/design.xsa" HDF_PATH =
EOF
修改conf/local.conf的MACHINE为myhardware-zcu102-zynqmp
$sed -i "/MACHINE ??=/c\MACHINE ??= \"myhardware-zcu102-zynqmp\"" conf/local.conf
4.2 修改设备树
用户可以添加system-user.dtsi去修改基于XSA文件生成的设备树。
用文本工具打开../sources/meta-xilinx-tools/recipes-bsp/device-tree/device-tree.bbappend,然后添加下面的语句。
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SYSTEM_USER_DTSI ?= "system-user.dtsi"
SRC_URI:append = " file://${SYSTEM_USER_DTSI}"
do_configure:append() {
cp ${WORKDIR}/${SYSTEM_USER_DTSI} ${B}/device-tree
echo "/include/ \"${SYSTEM_USER_DTSI}\"" >> ${B}/device-tree/system-top.dts
}
创建并修改system-user.dtsi
mkdir sources/meta-xilinx-tools/recipes-bsp/device-tree/files
vim sources/meta-xilinx-tools/recipes-bsp/device-tree/files/system-user.dtsi
下面是一个修改的例子:
/ {
};
&axi_iic_0 {
m24c08@50 {
compatible = "at,24c08";
reg = <0x50>;
};
};
4.3 构建及运行镜像
运行下面命令构建用户Linux镜像
$bitbake petalinux-image-minimal
参考上面第3点运行镜像,镜像所在的目录:build/tmp/deploy/images/myhardware-zcu102-zynqmp/
参考文档:
https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841883/Yocto
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2824503297/Building+Linux+Images+Using+Yocto
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2787311617/PetaLinux+to+Yocto+-+Command+Cross+Reference
【直播预告】