自学内容网 自学内容网

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,也可以编译其三方的应用,可以说一劳永逸。

  • 配置根文件系统
  • 编译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或将程序传输到目标设备上运行


原文地址:https://blog.csdn.net/ssh18581030544/article/details/144721694

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!