基于zynq7000搭建xenomai实时操作系统/手把手教你zynq构建linux+xenomai实时操作系统双系统/arm构建xenomai实时操作系统

为了在zynq嵌入式 Linux 环境中实现高实时性能,决定为zynq搭载一个xenomai,实现linux+xenomai双系统。

制作不易,记得三连哦,给我动力,持续更新中!!!

博客中完整工程文件下载:zynq搭载linux+xenomai双系统完整工程 (点击蓝色文字即可下载)

提取码:19w5


Zynq 搭建 Linux 和 Xenomai 双系统简介

在嵌入式系统开发中,实时性和系统丰富功能是两个关键需求。通过在 Xilinx Zynq 平台上同时运行 Linux 和 Xenomai,可以结合两者的优点,实现高性能和高实时性的应用。

什么是 Xenomai?

Xenomai 是一个为 Linux 提供实时扩展的框架,旨在使 Linux 能够满足严格的实时性要求。通过 Xenomai,可以在运行标准 Linux 应用程序的同时,保证关键任务的实时性能。

搭建步骤

1、环境准备

在开始之前,确保你的开发环境包含以下工具和资源:

  • Vivado2021.2:用于创建和配置 FPGA 硬件设计。
  • Petalinux2021.2:用于创建和配置 Linux 系统。
  • ubuntu虚拟机:ubuntu18.04 版本。
  • Xenomai 源码:可以从 Xenomai 官方网站下载。
  • linux内核源码:可以从 linux 官方网站下载。
  • ARM 交叉编译工具链:如 arm-linux-gnueabihf-gcc等

2、vivado硬件设计

  1. 创建 Vivado 工程:在 Vivado 中创建一个新的工程,根据自己的开发板配置zynq IP核,如UART、Ethernet、USB、DDR、SD等。
  2. 生成硬件描述文件 (.xsa):完成设计后,生成 bitstream 文件并导出硬件描述文件 (.xsa)。

3、Petalinux配置

  • 创建 PetaLinux 工程
petalinux-create -t project -n <project_name> --template zynq
  • 导入硬件描述文件:    
petalinux-config --get-hw-description=<path_to_xsa>
  • 配置内核和根文件系统
petalinux-config -c kernel 
petalinux-config -c rootfs

选择合适的内核配置选项,并添加必要的包和库。

4、构建 Xenomai 内核

准备xenomai内核源码:

xenomai内核下载链接(本文章使用的):xenomai3.1内核源码

大家如果感觉3.1版本比较老的话,也可以通过xenomai官网去下载最新的内核镜像,操作步骤应该都一样,但是其他版本我没验证。

准备ipipe补丁

ipipe补丁下载链接(本文章使用的) :ipipe 4.9.24 arm 补丁下载

注意:xenomai 3.1以及以前的必须打ipipe补丁,xenomai3.2及以后的要打dovetail补丁

准备linux内核

linux4.9.24内核源码下载链接(本文章使用的):linux4.9.24内核源码下载

大家如果感觉4.9.24版本比较老的话,也可以通过linux官网去下载最新的内核镜像,操作步骤应该都一样,但是其他版本我没验证。

安装交叉编译工具链

// 更新包列表:
sudo apt-get update
//安装交叉编译工具链:
sudo apt-get install gcc-arm-linux-gnueabihf

现在所需要的源码和环境都已经准备就绪,接下就开始构建

1. 向linux内核打入补丁

通过xenomai内核源码的prepare-kernel.sh进行打补丁,这样可以保证打入补丁完整性并且可以避免一些错误

切换到xenomai内核源码路径,然后输入下面指令进入打补丁:

./scripts/prepare-kernel.sh --arch=arm --ipipe=<path_to_ipipe patch> --linux=<path_to_linux>

这里的 --linux 选项指定 Linux 内核源码目录,--arch 选项指定目标架构,--ipipe 选项指定 Xenomai 的 I-pipe 补丁文件。

2.  加载zynq配置文件

因为咱们最终要在zynq上进行使用,所以需要加载为 ARM 架构的 Xilinx Zynq 平台生成默认的 Linux 内核配置文件。

配置文件下载链接(本文章使用的):zynq linux配置文件下载

需要先把是这个配置文件放到内核的 /linux-4.9.24/arch/arm/configs里面

切换到linux内核源码路径,然后输入下面指令加载zynq配置文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

make:调用 GNU Make 工具来执行编译

ARCH=arm:指定目标架构为 ARM

CROSS_COMPILE=arm-linux-gnueabihf-:指定交叉编译工具链的前缀

xilinx_zynq_defconfig:指定使用 xilinx_zynq 的默认配置文件

3. 内核配置

除此之外,我们还需要再menuconfig中进行一些自定义配置,这是个界面配置,类似于petalinux-config - kernel

切换到linux内核源码路径,然后输入下面指令进入配置界面:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

xenomai非常良心,把一些需要关闭的配置都已经给你列出来了,只需要根据他的警告来对应的配置即可

需要关闭的有:

CPU Power Management --->
	CPU Frequency scaling  --->
		[] CPU Frequency scaling
	CPU Idle  --->
		[] CPU idle PM support

Memory Management options  --->
	[ ] Allow for memory compaction

然后警告就会消失了,记得要保存配置

4. 编译内核

配置的信息都已经配置完了,接下里需要编译内核,生成可以供u-boot加载的uImage文件

切换到linux内核源码路径,然后输入下面指令编译内核:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

此指令编译出来的是zImage,还需要通过u-boot-tools来进行转化

// 安装u-boot-tools
sudo apt-get install u-boot-tools

zImage转化为uImage:

mkimage -A arm -O linux -T kernel -C none -a 0x00200000 -e 0x00200000 -n "Linux-4.9.24" -d arch/arm/boot/zImage arch/arm/boot/uImage

转换完成之后会在/linux-4.9.24/arch/arm/boot 里面生成uImage内核镜像

5.  编译xenomai

创建我们的Linux系统需要运行的Xenomai库和工具,切换到xenomai目录

./scripts/bootstrap

开始编译xenomai

./configure CFLAGS="-march=armv7-a -mfpu=vfp3 -mfloat-abi=hard" LDFLAGS="-march=armv7-a" --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi --with-core=cobalt --enable-smp --enable-tls CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld
  • ./configure:运行配置脚本,准备编译环境。
  • CFLAGSLDFLAGS:设置编译器和链接器选项,指定目标架构为 ARMv7-A,并使用硬浮点运算单元。
  • --build--host:指定构建系统为 i686 架构的 Linux 系统,目标系统为 ARM 架构的 Linux 系统。
  • --with-core=cobalt:使用 Xenomai 的 Cobalt 实时核心。
  • --enable-smp:启用多处理器支持。
  • --enable-tls:启用线程局部存储支持。
  • CCLD:指定使用交叉编译工具链中的 GCC 编译器和链接器。

创建xenomai

make -j$(nproc) DESTDIR=`pwd`/build-arm install

此时即可在build-arm目录下找到xenomai编译后的相关库及可执行文件。

5、启动系统

制作一个SD卡,然后分为两个区,

FAT32:BOOT.bin,boot.scr,uImage(上面生成的)

EXT4:解压rootfs.tar.gz

然后把生成的xenomai文件夹及里面的内容复制到根文件系统的/usr下面

把zynq开发板设置为SD卡启动,用户名和密码都是root

启动开发板后,会发现和petalinux启动起来不太一样

然后再/usr/目录下面会发现,xenomai相关的目录

6、测试

运行测试程序之前需要把xenomai目录添加到环境变量:

使用vim打开/etc/profile,添加xenomai环境变量如下:

vim /etc/profile

 在末尾添加以下内容

export PATH$PATH:/usr/xenomai/bin:/usr/xenomai/1ib/:/usr/xenomai/sbin

执行如下指令使能全局变量即可。

source /etc/profile

xenomai运行需要root权限,因为我是通过root用户登录的,故执行如下指令即可测试xenomai实时性。

cd /usr/xenomai/bin 
./latency

 lat min: 最小延迟时间。

lat avg: 平均延迟时间。

lat max: 最大延迟时间。

overrun: 超时次数(任务未能在周期内完成的次数)。

msw: 模式切换次数(Mode Switches),通常是从用户态切换到内核态的次数。

lat best: 最佳延迟时间(整个测试期间的最小值)。

lat worst: 最差延迟时间(整个测试期间的最大值)

这是通过优化后的结果,下一期将具体讲解如何对实时内核进行自动调优。

博客中完整工程文件下载:zynq搭载linux+xenomai双系统完整工程 (点击蓝色文字即可下载)

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!! 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值