如何使用Yocto构建Linux镜像

作者: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运行的环境

$ 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的用户邮箱和用户名

$ git config --global user.email "you@example.com"

$ git config --global user.name "Your 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

  • 添加用户配置 (下面的</path/to/my>替换为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

$HDF_BASE = "file://"

$# Replace with the path to your XSA file from hardware

$HDF_PATH = "</path/to/my>/design.xsa"

$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

最新文章

最新文章