Zynq UltraScale+ MPSoC上构建xenomai
zynq ultrascale+ 使用petalinux搭建xenomai
Zynq UltraScale+ MPSoC上构建xenomai
1 使用petalinux工具构建工程
在安装完petalinux工具后,执行
source settings.sh
构建全局环境变量后,发现已安装的交叉编译器只有aarch64-none-,没有aarch64-linux-;阅读settings.sh可以看到交叉编译器安装目录如下图所示。
进入该目录后发现其并不完整。因此需将其填充完整。
建议直接从 linaro 的官网下载相应版本的 gcc-linaro 交叉编译工具,并直接选择带有二进制的文件,即在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch64-linux-gnu-gcc 二进制可执行程序。
下载完并解压后,将bin目录下的可执行文件复制到上一步路径下的bin目录即可,最后再执行一遍
source settings.sh
此时可以发现交叉编译工具链aarch64-linux-已添加进环境变量。
2 创建petalinux工程并使用本地编译
- 将使用vitis生成的.xsa硬件描述文件添加到ubuntu下。
- 执行如下指令创建petalinux工程。
petalinux-create -t project --template zynqMP -n xenomai_zynqmp
- 在xilinx的github网站下载linux源码与uboot源码,版本最好与petalinux的版本保持一致,下载完成后拷贝到ubuntu并进行解压,这里我下载的是
u-boot-xlnx-xilinx-v2022.2.zip
linux-xlnx-xilinx-v2022.2.zip
- 进入xenomai_zynqmp目录,执行如下指令进行硬件描述文件的导入及本地内核编译设置
petalinux-config --get-hw-description ~/work/xsa/
后面的xsa文件路径替换成自己的
- 设置uboot源码的路径,选择“Linux Components Selection —>u-boot —> ext-local-src”选顷。在“External u-boot local source settings —> ”添加解压缩后的uboot源码路径
- 设置linux内核源码的路径,选择“Linux Components Selection —>linux-kernel —> ext-local-src”选顷。在“External u-boot local source settings —> ”添加解压缩后的linux内核源码路径
- 保存后退出。
3 对linux内核打实时补丁及xenomai编译
对5.4及以前版本的内核需要打ipipe补丁,而5.4以上版本的内核则需要使用dovetail补丁,
进入linux内核源码路径,打开Makefile可以查看内核版本。
3.1安装补丁文件
注意:这里需要下载3.2版本的xenomai,3.2以前的版本不支持devotail补丁。
- 向linux内核打入补丁
进入补丁包下载目录,将其解压:
$ cd /home/luo/linux
$ bzip2 -d patch-5.15-dovetail2.patch.bz2
而后进入Linux目录,打入补丁:
$ cd /home/luo/work/linux/linux-xlnx-xilinx-v2022.2/
$ patch -p1 < ../patch-5.15-dovetail2.patch
- 添加xenomai内核
进入xenomai下载目录将其解压:
$ cd /home/luo/work/linux
$ tar -vxf xenomai-stable-v3.2.x.tar
进入xenomai源码目录xenomai-stable-v3.2.x/scripts,使用脚本prepare-kernel.sh对linux内核源码打cobalt内核补丁:
$ cd /home/luo/work/xenomai-stable-v3.2.x
$ ./prepare-kernel.sh --linux=/home/luo/work/linux/linux-xlnx-xilinx-v2022.2 --arch=arm64 --outpatch=/home/luo/work/linux/cobalt-core-3.2.x-linux5.15.0.patch
执行上述指令后会在/home/luo/work/linux/目录下生成了cobalt-core-3.2.x-linux5.15.0.patch的补丁。
–linux 用于指定linux内核源码路径
–arch 用于指定硬件架构,arm arm64 x86_64
–devotail 用于指定补丁包,若已在linux内核中打过补丁则不用再指定
进入linux目录,添加cobalt内核补丁:
$ cd /home/luo/work/linux/linux-xlnx-xilinx-v2022.2
$ patch -p1 < ../cobalt-core-3.2.x-linux5.15.0.patch
3.2配置及编译linux内核
- 配置linux内核
$ petalinux -c kernel
进入menuconfig配置界面会看到xenomai选项有如下警告信息:
*** WARNING! Page migration (CONFIG_MIGRATION) may increase ***
*** latency. ***
*** WARNING! At least one of APM, CPU frequency scaling, ACPI 'processor' ***
*** or CPU idle features is enabled. Any of these options may ***
*** cause troubles with Xenomai. You should disable them. ***
消除该警告信息需做如下配置:
CPU Power Management --->
CPU Frequency scaling --->
[] CPU Frequency scaling
CPU Idle --->
[] CPU idle PM support
Memory Management options --->
[ ] Contiguous Memory Allocator
[ ] Transparent Hugepage Support
[ ] Allow for memory compaction
[ ] Page migration
修改完配置后可发现警告均已消失,保存退出即可。
- 编译内核
执行如下指令编译内核:
$ petalinux-build
执行如下指令生成BOOT.bin文件,由于我这里没有使用bit流文件,故无需加入–fpga参数:
$ petalinux-package --boot --u-boot --fsbl --force
执行完上述指令后,即可在image目录下查看到生成的启动文件及镜像文件,将BOOT.bin、boot.scr 及 image.ub 三个文件拷贝到格式化的 SD 卡中,然后弹出 SD 卡,插入开发板运行即可。Linux启动过程中可发现与xenomai相关的启动项。
3.3 编译安装xenomai库
由于在ubuntu20.04上进行xenomai源码的编译一直出现一些奇怪的问题,换到ubuntu18.04上进行编译后就一切正常,故以下过程均在ubuntu18.04上进行。
$ cd ~/work/linux/xenomai-stable-v3.2.x
$ ./scripts/bootstrap
$ ./configure CFLAGS="-mtune=cortex-a53" LDFLAGS="-mtune=cortex-a53" --build=i686-pc-linux-gnu --host=aarch64-linux-gnu --with-core=cobalt --enable-smp CC=aarch64-linux-gnu-gcc LD=aarch64-linux-gnu-ld
其中编译器指定为aarch64-linux-gnu-gcc, 链接器指定为aarch64-linux-gnu-ld。执行上述过程可能会出现如下错误:
$ checking whether the registry should be enabled... no
$ ./configure: line 10641: syntax error near unexpected token `FUSE,'
$ ./configure: line 10641: ` PKG_CHECK_MODULES(FUSE, fuse)'
解决方法,需要添加如下组件:
$ sudo apt-get install fuse
$ sudo apt install debhelper findutils autotools-dev autoconf automake libtool pkg-config libltdl-dev
添加完成后重新执行上述步骤即可。
创建一个目录用于存放xenomai库。
$ mkdir build
编译安装到该目录
$ make -j$(nproc) DESTDIR=`pwd`/build-arm install
此时即可在该目录下找到xenomai编译后的相关库及可执行文件。
4 配置环境变量
将xenomai目录下所有文件通过ssh发送至开发板/usr目录下。
使用vim打开/etc/profile,添加xenomai环境变量如下:
执行如下指令使能全局变量即可。
$ source /etc/profile
xenomai运行需要root权限,故执行如下指令即可测试xenomai实时性。
$ sudo su
$ cd /usr/xenomai/bin
$ ./latency
执行结果如下:
这是在无负载且未作任何优化的情况下的测试结果,后续会单独写一篇文章进行压力测试及实时性能的优化。
更多推荐
所有评论(0)