当前位置: 首页 > article >正文

8.zynq编译应用程序

MPsoc开发应用的三种方法

  • 方法一:使用petalinux工具
  • 方法二: 使用vitis工具
  • 方法三:使用SDK工具

1. 使用petalinux工具

  • 使用petalinux命令创建程序模版:

    • petalinux-create -t appd --template -n myapp --enable
    • petalinux-create -t apps --template c/c++ -n myapp --enable
      - ![[Pasted image 20241223160448.png]]
  • 在程序文件中编写应用程序

    • cd <plnx-proj-root>/project-spec/meta-user/recipes-apps/myapp
      - ![[Pasted image 20241223160754.png]]
  • 使用petalinux命令编译程序

    • petalinux-build -c 应用程序名称
      • petalinux-build -c myapp

2. 使用vitis工具

这里不进行记录,因为不想安装vitis,只记录实现思路

  • 在linux主机或者虚拟机中安装vitis
  • 打开vitis创建Linux应用
  • 编写Linux应用
  • 编译工程
  • 将elf文件放到SD卡中
  • 启动开发板执行elf文件

3. 使用SDK工具

如果只做 Linux 应用开发,只需要一个 sdk.sh 文件即可,可以脱离 Petalinux 和 Vitis,也可以编译其三方的应用,可以说一劳永逸。

  • 配置根文件系统
    • petalinux-config -c rootfs
    • 6.petalinux根文件系统配置(filesystem package)
    • 7. petalinux 根文件系统配置(package group)
  • 编译SDK
    • petalinux-build --sdk

      • Linux主机或者虚拟机需要连接网络,如果在之前设置离线编译的此时应该打开网络使能,而后可以关闭网络使能
      • ![[Pasted image 20241224165450.png]]
    • petalinux-package --sysroot

      • petalinux-package --sysroot 是PetaLinux工具套件中的一个命令,用于生成一个系统根文件系统(sysroot),这个sysroot包含了为目标平台(如Xilinx的Zynq或Zynq UltraScale+ MPSoC等)编译的库、头文件和其他必要的文件
  • 安装SDK
    • ./project/images/linux/sdk.sh -d path
      • 默认在petalinux路径
  • 使用SDK
    • source 设置环境变量

      • source …/sdk/environment-setup-aarch64-xilinx-linux
    • 查看环境变量

      • aarch64
      • echo $CC
      • echo $CXX
        - ![[Pasted image 20241224173355.png]]

      - ![[Pasted image 20241224173310.png]]

- 在makefile中使用
  • 指定编译器路径(全部参数,尤其是sysroot)
    • echo $CC
    • echo $CXX
# 定义交叉编译器前缀
CROSS_COMPILE := aarch64-xilinx-linux-
# 定义编译器
CC := $(CROSS_COMPILE)gcc
# 其他编译工具
CXX := $(CROSS_COMPILE)g++
LD := $(CROSS_COMPILE)ld
AR := $(CROSS_COMPILE)ar
# 编译标志
CFLAGS := -march=armv8-a+crc -mtune=cortex-a72.cortex-a53 --sysroot=/media/kemao/linux/pkg_install/sdk/sysroots/aarch64-xilinx-linux -g -Wall -O2
# 目标文件
TARGET := my_program
# 源文件
SRCS := main.c another_file.c
# 生成的目标文件
OBJS := $(SRCS:.c=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARGET)

debug:
    $(CROSS_COMPILE)gdb $(TARGET)

# 这里是示例,实际运行需要根据你的目标设备或仿真器来决定
run:
    # 你可能需要使用QEMU或将程序传输到目标设备上运行


http://www.kler.cn/a/453597.html

相关文章:

  • McDonald‘s Event-Driven Architecture 麦当劳事件驱动架构
  • 【再谈设计模式】享元模式~对象共享的优化妙手
  • mysql性能问题排查
  • WebXR
  • 运行Zr.Admin项目(后端)
  • 施耐德变频器ATV320系列技术优势:创新与安全并重
  • 【windows】组合的 Windows 系统调用表
  • 视频会议是如何实现屏幕标注功能的?
  • 美畅物联丨如何在视频汇聚平台上添加RTMP主动推流设备?
  • 三维场景重建与3D高斯点渲染技术探讨
  • Spring Boot项目开发常见问题及解决方案(上)
  • 阿里推出QVQ 视觉推理模型,解锁视觉智能新维度
  • day17-18-进程管理和系统资源管理
  • GPT-O3:简单介绍
  • 【Ubuntu学习】另一个程序已锁定文件的一部分,进程无法访问
  • 从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计
  • Android Https和WebView
  • 命令行之巅:Linux Shell编程的至高艺术(上)
  • 链游破局之路:如何打破边缘化,获得更好的发展
  • [Unity Shader]【图形渲染】 Shader数学基础13-模型空间,世界空间和观察空间的转换
  • GPIO+TIM(无PWM)实现呼吸灯功能
  • Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena
  • mysql三种读取模式(普通、流式、游标)
  • node.js web框架koa的使用
  • Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品
  • ip-协议