0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在 Vitis 中使用 UIO 驱动框架创建简单的 Linux 用户应用

电子工程师 来源:XILINX技术社区 作者:XILINX技术社区 2020-11-20 14:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux嵌入式设计中最基本的任务之一是创建用户应用程序。

在本篇博文中,我们将探讨如何在 Vitis 中使用 UIO 驱动框架创建简单的 Linux 用户应用。

1

硬件设计

本次使用的是 Zynq UltraScale+ MPSoC ZCU104 评估板。但是,无论您使用任何器件,下列步骤都应适用。

先使用 Vivado 来创建了块设计。建立了 Zynq UltraScale PS,并把 AXI GPIO 连接到 ZCU104 评估板上的 4 个 LED

地址映射如下所示:

首先 在创建 XSA 时使用了以下选项:

2

Linux 镜像

如果您使用开发板,则建议使用 BSP(如果存在)。

但在本示例中,我们使用模板来创建镜像。已经添加了 UIO 驱动程序,用于 AXI GPIO。

然后创建了 sysroot,在 Vitis 中需要使用它来进行交叉编译。

petalinux-create -t project --template zynqMP -n zcu104_linux

cd zcu104_linux

petalinux-config --get-hw-description=

依次选择“DTG Settings -> (zcu104-revc)MACHINE_NAME”

petalinux-config -c kernel
Select Device Drivers -> Userspace I/O drivers
<*> Userspace I/O platform driver with generic IRQ handing
<*> Userspace platform driver with generic irq and dynamic memory

将 system-user.dtsi 替换为:

/include/ "system-conf.dtsi"

/ {

chosen {

bootargs = "earlycon clk_ignore_unused uio_pdrv_genirq.of_id=generic-uio";

stdout-path = "serial0:115200n8";

};

};

&axi_gpio_0 {

compatible = "generic-uio";

};

然后,运行以下命令:

petalinux-build

cd images/linux
petalinux-build --sdk
petalinux-package --sysroot

3

创建平台

这并非必要步骤,因为用户只需在 Vitis 中使用 sysroot 即可。

但为了便于使用,我们可以创建一个平台并在 Vitis 中使用此平台来创建 Linux 应用。

首先,设置平台文件。

把平台文件组织为一种文件夹结构。这并非必要步骤,但用户需要注意 BIF 中的文件路径。

在 Bootgen 中使用 BIF 来创建可启动的镜像。此处我们仅使用占位符文件名。

mkdir -p sw_comp/src/a53/xrt/image
mkdir sw_comp/src/boot

将 image.ub、boot.scr 和 rootfs.cpio.gz 文件从 PetaLinux image/linux 文件夹复制到sw_comp/src/a53/image

将 system.bit、bl31.elf、uboot.elf、zynqmp_fsbl(已重命名为 fsbl.elf)和 pmufw.elf 文件从 PetaLinux image/linux 文件夹复制到sw_comp/src/boot

创建 BIF:

the_ROM_image:

{

[fsbl_config] a53_x64

[bootloader]

[pmufw_image]

[destination_device=pl]

[destination_cpu=a53-0, exception_level=el-3, trustzone]

[destination_cpu=a53-0, exception_level=el-2]

}

将 linux.bif 复制到sw_comp/src/boot。现在,在 Vitis 中创建一个新平台工程,如下所示:

这样就会在zcu104_base/export中创建平台。

4

在 Vitis 中创建 Linux 镜像

选择“从存储库中选择平台 (Select a platform from therepository)”,单击 + 图标并浏览至您的平台。

创建新应用:

此处可以看到,“应用设置 (Application settings)”默认使用的是平台中的设置。

选择“空白应用 (Empty Application)”模板,因为我们将创建自己的自定义应用。

右键单击 led_test 应用下的 src 文件夹,然后选择“新建 (New)”->“文件 (File)”

指定其文件名 (.c),然后单击“完成 (Finish)”。

现在,即可将以下代码复制到其中。这是一个简单的 UIO 示例,可用于开关 LED。

#include

#include

#include

#include

#include

#define GPIO_MAP_SIZE 0x10000

#define GPIO_DATA 0x00

#define GPIO_TRI 0x04

#define LED_NUM 256

#define LED_DELAY 10000000

int main(int argc, char *argv[])

{

int fd;

char *uiod = "/dev/uio0";

void *gpio_ptr;

volatile int Delay;

printf("AXI GPIO UIO test. ");

// open the UIO device file to allow access to the device in user space

fd = open(uiod, O_RDWR);

if (fd < 1) {

printf("Invalid UIO device file:%s. ", uiod);

return -1;

}

// mmap the GPIO device into user space

gpio_ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

if (gpio_ptr == MAP_FAILED) {

printf("Mmap call failure. ");

return -1;

}

// set bit0 on the GPIO to be output

// see pg144 for ref

*((volatile unsigned *)(gpio_ptr + GPIO_TRI)) = 0x0;

// Toggle the LED

while (1) {

int i;

unsigned char led_pin = 0x0;

for (i = 0; i < LED_NUM; i++) {

*((volatile unsigned *)(gpio_ptr + GPIO_DATA)) = led_pin;

for (Delay = 0; Delay < LED_DELAY; Delay++);

*((volatile unsigned *)(gpio_ptr + GPIO_DATA)) = 0x0;

led_pin++;

}

}

// unmap the GPIO device from user space

munmap(gpio_ptr, 4096);

return 0;

}

选择系统工程,然后单击锤子图标。这样即可构建可执行文件,并创建启动镜像。

5

在硬件上执行测试

将所有镜像从led_app_systemDebugsd_card复制到 SD 卡上。

启动后,将自动装载 SD 卡。

在此处更改目录,并执行led_app.elf,如下所示:

同时,您在板上应该还可以看到 LED 闪烁。

使用 Ctrl + c 即可取消。

责任编辑:xj

原文标题:开发者分享 | 在 Zynq UltraScale 器件上通过 Vitis 创建 Linux 用户应用

文章出处:【微信公众号:XILINX技术社区】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11871

    浏览量

    219961
  • Zynq
    +关注

    关注

    10

    文章

    636

    浏览量

    49662
  • Vitis
    +关注

    关注

    0

    文章

    160

    浏览量

    8455

原文标题:开发者分享 | 在 Zynq UltraScale 器件上通过 Vitis 创建 Linux 用户应用

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在 Linux 中使用 imx8mm

    Hi, 我们在 Linux 中使用 imx8mm(4x Cortex A53)。因此,我们的设备树 dts 包括 imx8mm.dtsi (https://elixir.bootlin.com
    发表于 04-29 08:26

    何在运行 Linux作系统的 i.MX 8M Plus EVK 板上创建用户友好的 GUI?

    我正在尝试创建一个用户友好的GUI to display some data. i have flashed the imx-image-full (所有
    发表于 04-08 06:33

    uIO-Stick v2 用户指南:设计、应用与安全要点

    uIO-Stick v2 用户指南:设计、应用与安全要点 在电子工程领域,接口设备对于连接不同系统和实现功能交互起着至关重要的作用。uIO-Stick v2 作为一款用于 MOTIX™ MCU 设备
    的头像 发表于 12-20 11:10 991次阅读

    Linux-RT特点及简单应用

    工具。这些工具可以用来查看和修改任务的调度策略和优先级,以及监视系统中运行的实时任务。 下面一个示例,演示如何在Linux-RT上使用C语言和pthread_create()函数创建实时
    发表于 12-05 07:37

    Linux驱动开发的必备知识

    、内核模块编程: 掌握内核模块的编写、编译、加载和卸载方法。 了解内核模块的初始化和清理函数的编写。 5、设备驱动框架: 熟悉字符设备、块设备、网络设备等驱动框架。 能够根据
    发表于 12-04 07:58

    何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在
    的头像 发表于 11-18 11:13 3474次阅读
    如<b class='flag-5'>何在</b>AMD <b class='flag-5'>Vitis</b> Unified IDE<b class='flag-5'>中使</b>用系统设备树

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux 设备驱动开发(第 2 版)》。第2版系统讲解内存管理、IRO管理、加锁机制等嵌入式系统关键内容,透彻分析时钟源、DMA引擎等核心机制,引入Regmap API等现代驱动开发框架
    发表于 11-17 17:52

    何在VS code中配置Zephyr集成开发环境

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code中的开发有了基础的了解。
    的头像 发表于 11-05 14:46 2012次阅读
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成开发环境

    PYQT 应用程序框架及开发工具

    大家好,本团队此次分享的内容为开发过程中使用到的PYQT 应用程序框架及开发工具。 pYqt 是一个多平台的 python 图形用户界面应用程序框架,由于其面向对象、 易扩展(可
    发表于 10-29 07:15

    何在应用程序调试期间分析栈和堆使用情况

    ,并在 Unified IDE 中仍可使用。本文涵盖了如何在 Vitis 中使用分析工具在应用程序调试期间对栈和堆进行监控。
    的头像 发表于 10-24 16:54 1141次阅读
    如<b class='flag-5'>何在</b>应用程序调试期间分析栈和堆使用情况

    请问STM32如何移植Audio框架

    最近在学习音频解码,想用一下Audio框架。 1、这个该如何移植到自己创建的BSP并对接到device框架中?看了官方移植文档没有对没有对该部分的描述。 2、我只想实现一个简单的播放功
    发表于 09-25 07:17

    何在AMD Vitis Unified 2024.2中连接到QEMU

    在本篇文章我们将学习如何在 AMD Vitis Unified 2024.2 中连接到 QEMU。 这是本系列的第 2 篇博文。要了解如何设置和使用 QEMU + 协同仿真,请参阅开发者分享|在 AMD Versal 自适应 SoC 上使用
    的头像 发表于 08-06 17:24 2127次阅读
    如<b class='flag-5'>何在</b>AMD <b class='flag-5'>Vitis</b> Unified 2024.2中连接到QEMU

    何在Unified IDE中创建视觉库HLS组件

    Vivado IP 流程(Vitis Unified),在这篇 AMD Vitis HLS 系列 3 中,我们将介绍如何使用 Unified IDE 创建 HLS 组件。这里采用“自下而上”的流程,从 HLS
    的头像 发表于 07-02 10:55 1779次阅读
    如<b class='flag-5'>何在</b>Unified IDE中<b class='flag-5'>创建</b>视觉库HLS组件

    使用AMD Vitis Unified IDE创建HLS组件

    这篇文章在开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE) 的基础上撰写,但使用的是 AMD Vitis Unified IDE,而不是之前传统版本的
    的头像 发表于 06-20 10:06 2721次阅读
    使用AMD <b class='flag-5'>Vitis</b> Unified IDE<b class='flag-5'>创建</b>HLS组件

    如何使用AMD Vitis HLS创建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 来创建一个 HLS IP,通过 AXI4 接口从存储器读取数据、执行简单的数学运算,然后将数据写回存储器。接着会在 AMD Vivado Design Suite 设计
    的头像 发表于 06-13 09:50 2425次阅读
    如何使用AMD <b class='flag-5'>Vitis</b> HLS<b class='flag-5'>创建</b>HLS IP