9. zynq应用开发--makefile编译

3. 使用SDK工具

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

  • 配置根文件系统
    • petalinux-config -c rootfs
  • 编译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
        在这里插入图片描述
        在这里插入图片描述
- 在makefile中使用
  • 查询编译器路径(全部参数,尤其是sysroot)
    • echo $CC
    • echo $CXX
    • 修改makefile以下几个方面就可以使用
      • CROSS_COMPILE :根据实际开发板进行替换(使用echo $CC可以看到)
      • CFLAGS :根据实际开发板进行替换(使用echo $CC可以看到)
      • TARGET :替换为你的可执行文件名字
      • SRCS :替换为你的源文件
# 定义交叉编译器前缀
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或将程序传输到目标设备上运行

makefile 解释
CC := $(CROSS_COMPILE)gcc
CXX := $(CROSS_COMPILE)g++
LD := $(CROSS_COMPILE)ld
AR := $(CROSS_COMPILE)ar
  • 这些变量使用了CROSS_COMPILE前缀,这意味着可以轻松地切换到交叉编译环境。例如,如果CROSS_COMPILE设置为arm-linux-gnueabihf-,那么CC将被解析为arm-linux-gnueabihf-gcc
CFLAGS := -march=armv8-a+crc -mtune=cortex-a72.cortex-a53 --sysroot=/media/kemao/linux/pkg_install/sdk/sysroots/aarch64-xilinx-linux -g -Wall -O2
  • 这些标志指定了目标架构、优化级别、调试信息等。
    -march-mtune选项指定了目标处理器架构和优化设置,
    --sysroot指定了交叉编译的根目录,
    -g用于生成调试信息,
    -Wall启用所有警告,
    -O2用于优化编译。
TARGET := my_program
SRCS := hello.c

# 如果源文件有很多
# 源文件目录
SRC_DIRS := src1 src2 src3
# 查找所有源文件
SRCS := $(wildcard $(addsuffix /*.c, $(SRC_DIRS)))
  • TARGET是最终生成的可执行文件的名称,SRCS是源文件列表。
      1. SRC_DIRS变量定义了源文件所在的目录列表。
      1. SRCS变量使用wildcard函数和addsuffix函数查找所有源文件
# 定义了目标文件的中间对象文件
OBJS := $(SRCS:.c=.o)
  • 将源文件的扩展名从.c替换为.o,生成对象文件列表。
# `all`目标是默认目标,它依赖于最终的可执行文件
all: $(TARGET)
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^
  • $(TARGET)依赖于$(OBJS),并使用$(CC)编译器和$(CFLAGS)编译标志生成可执行文件。
    • $@表示目标文件(TARGET),
    • $^表示所有依赖文件(OBJS)。
# 编译每个源文件生成对象文件
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
  • 任何.o文件依赖于相应的.c文件,并使用$(CC)编译器和$(CFLAGS)编译标志进行编译。
      • $(CC):这是编译器变量,通常是gcc或交叉编译器(例如arm-linux-gnueabihf-gcc)。
    • $(CFLAGS):这是编译标志变量,包含了编译时需要的各种选项(例如优化级别、警告选项、目标架构等)。
    • -c:这个选项告诉编译器只进行编译,不进行链接。也就是说,只生成目标文件(.o文件),而不生成可执行文件。
    • $<:这是自动变量,表示第一个依赖文件。在这个规则中,它表示当前正在编译的源文件(例如hello.c)。
    • -o $@:这个选项指定输出文件名,$@是另一个自动变量,表示目标文件。在这个规则中,它表示生成的对象文件(例如hello.o)。
clean:
    rm -f $(OBJS) $(TARGET)

debug:
	$(CROSS_COMPILE)gdb $(TARGET)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“鞋履创新工坊”:运动鞋店的新产品设计与管理

3.1 系统可行性分析 开发一款程序软件不仅需要时间&#xff0c;也需要人力&#xff0c;物力资源。而进行可行性分析这个环节就是解决用户这方面的疑问&#xff0c;看看程序在当前的条件下是否可以进行开发。 3.1.1 技术可行性分析 此程序选用的开发语言是Java&#xff0c;这种编…

重温设计模式--6、享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

*(int**)是什么意思

有这样一段连续的内存&#xff0c;int*arr(int*)malloc(20); malloc 开辟了 20 个字节大小的空间&#xff0c;arr 指向这段空间的开头 我们要实现像链表一样的功能&#xff0c;有什么方法呢&#xff1f;(关于为什么要在一段连续的空间上实现像链表一样的功能&#xff0c;这只是…

STM32 SPI读取SD卡

七个响应类型&#xff1a; R1 Response (Normal Response): R1响应是最基本的响应&#xff0c;包含一个字节的状态位&#xff0c;用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…

[手机Linux] 七,NextCloud优化设置

安装完成后在个人设置里发现很多警告&#xff0c;一一消除。 只能一条一条解决了。 关于您的设置有一些错误。 1&#xff0c;PHP 内存限制低于建议值 512 MB。 设置php配置文件&#xff1a; /usr/local/php/etc/php.ini 把里面的&#xff1a; memory_limit 128M 根据你自…

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法&#xff1a;删掉没有用的数据&#xff08;行与列&#xff09;和股代码格式处理&#xff0c;是和外部数据的制作方法是相同&#xff0c;自己上面看历史博文。只需要判断一下&#xff0c;股代码跟随的…

逆向工程在医疗器械中的应用

关于逆向工程&#xff1a; 逆向设计跟正向设计流程不同&#xff0c;它是对己有产品原型进行分析、改进和再创造的过程。通过先进的数字测量手段反向获取产品的外形数据&#xff0c;然后利用各种造型软件由点云数据重构出该产品的CAD模型。逆向工程的辅助设计建构可以缩短产品的…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻防…

rk3588 android12 root

问题说明&#xff1a; 将 andorid12 root 测试情况说明&#xff1a;我在 串口上 实际上 是可以 使用 su root 命令 进入 root 的&#xff0c;但是 使用 root check apk 检测的时候却通不过。 是否解决说明&#xff1a; 已解决 解决问题的逻辑&#xff1a; 就按照 网上的资料…

基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)

源码地址&#xff1a;https://download.csdn.net/download/2302_79553009/89933699 项目简介 本项目旨在构建一个基于MBTI&#xff08;迈尔斯-布里格斯性格分类指标&#xff09;理论的在线平台——“16Personalities”。该平台利用PHP、MySQL、JavaScript等技术栈开发&#x…

数字IC后端设计实现十大精华主题分享

今天小编给大家分享下吾爱IC社区星球上周十大后端精华主题。 Q1:星主&#xff0c;请教个问题&#xff0c;长tree的时候发现这个scan的tree 的skew差不多400p&#xff0c;我高亮了整个tree的schematic&#xff0c;我在想是不是我在这一系列mux前边打断&#xff0c;设置ignore p…

Docker 快速搭建 GBase 8s数据库服务

1.查看Gbase 8s镜像版本 可以去到docker hub网站搜索&#xff1a;gbase8s liaosnet/gbase8s如果无法访问到该网站&#xff0c;可以通过docker search搜索 docker search gbase8s2.拉取Gbase 8s镜像 以下演示的版本是目前官网最新版本Gbase8sV8.8_3.5.1 docker pull liaosn…

大型语言模型(LLMs)演化树 Large Language Models

大型语言模型&#xff08;LLMs&#xff09;演化树 Large Language Models flyfish 下面的图来自论文地址 Transformer 模型&#xff08;如 BERT 和 GPT-3&#xff09;已经给自然语言处理&#xff08;NLP&#xff09;领域带来了革命性的变化。这得益于它们具备并行化能力&…

让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战

在当今科技飞速发展的时代&#xff0c;大语言模型&#xff08;LLM&#xff09;的兴起彻底改变了人工智能领域的格局。从智能客服到文本生成&#xff0c;从知识问答到代码编写辅助&#xff0c;大语言模型的应用无处不在&#xff0c;深刻影响着我们的生活和工作。然而&#xff0c…

CPU条件下Pytorch、jupyter环境配置

一、创建虚拟环境 查看虚拟环境 conda env list 创建python虚拟环境 conda create -n minist python3.11 激活虚拟环境 conda activate minist 查看虚拟环境下有哪些包 pip list 二、安装pytorch 切换清华源 conda config --add channels https://mirrors.tuna.tsing…

【iOS安全】Block开发与逆向

1. OC中的Block 1.1 Block的基本概念 在iOS开发中&#xff0c;Block是一种特殊的数据类型&#xff0c;类似于其他编程语言中的匿名函数。它可以封装一段代码&#xff0c;并且能够像普通变量一样传递、存储和执行。Block可以捕获并访问定义它时所在作用域的变量&#xff0c;这…

C# 中的记录类型简介 【代码之美系列】

&#x1f380;&#x1f380;&#x1f380;代码之美系列目录&#x1f380;&#x1f380;&#x1f380; 一、C# 命名规则规范 二、C# 代码约定规范 三、C# 参数类型约束 四、浅析 B/S 应用程序体系结构原则 五、浅析 C# Async 和 Await 六、浅析 ASP.NET Core SignalR 双工通信 …

查询 MySQL 默认的存储引擎(SELECT @@default_storage_engine;)

要查询 MySQL 默认的存储引擎&#xff0c;可以使用以下 SQL 查询语句&#xff1a; SELECT default_storage_engine;解释&#xff1a; SELECT: 表示你要执行一个查询。default_storage_engine: 这是一个 MySQL 系统变量&#xff0c;它存储着当前 MySQL 服务器的默认存储引擎。…

大数据技术-Hadoop(二)HDFS的介绍与使用

目录 1、HDFS简介 1.1 什么是HDFS 1.2 HDFS的优点 1.3、HDFS的架构 1.3.1、 NameNode 1.3.2、 NameNode的职责 1.3.3、DataNode 1.3.4、 DataNode的职责 1.3.5、Secondary NameNode 1.3.6、Secondary NameNode的职责 2、HDFS的工作原理 2.1、文件存储 2.2 、数据写…

SpringBoot项目的5种搭建方式(以idea2017为例)

目录 1. idea中使用官方API 2. idea中使用阿里云API 3. 在spring官网创建 4. 在阿里云官网创建 5. Maven项目改造成springboot项目 SpringBoot项目的创建细分一共有5种&#xff0c;其实主要分为以下三种&#xff1a; ①使用开发工具idea创建springboot项目&#xff08; Sp…