VITIS2021编译debian启动文件启动linaro系统

本文详细介绍了如何使用VITIS 2021编译ZYNQ MPSoC的fsbl引导uboot,并配置Linux系统。流程包括从vivado导入硬件到vitis,编译生成fsbl.elf和system_wrapper.bit文件,更新设备树,虚拟机中编译启动文件,最后进行SD卡分区和系统验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,vivado到vitis流程

ZYNQ MPSoC芯片的特点是,需要fsbl来引导uboot。fsbl全称为First Stage Boot Loader,是用户可以接触到的最早的启动部分。我们使用 vitis 跑裸机代码的时候,fsbl 也发挥作用了,在程序运行前会打印 fsbl 的信息,引导裸机和引导系统都需要 fsbl 文件。

vitis会生成pmufw.elf和system_wrapper.bit这两个文件。pmufw.elf顾名思义就是pmu的管理程序,它负责了板级的电源管理。system_wrapper.bit文件则是PL端的配置文件,通过这个文件我们可以在linux启动时将vivado工程给一并配置至pl端,这样我们就能通过linux与PL端交互了。bit文件不仅会配置pl端,ps端也需要通过bit文件设置,要想让linux系统启动时配置好FPGA 端的逻辑,首先我们得先导出在vivado里设计好的硬件,然后用vitis把它汇编成机器可以识别的bit 文件,最后使用 linux下的工具包将其打包进BOOT.bin文件,也就是uboot。

二,vitis配置流程

1,从vivado2021导入PL端硬件到vitis。生成的硬件文件,以.xsa结尾

2,从桌面打开xilinx vitis 2021中填入路径

### 如何使用 Vitis 编译 NE10 库 为了成功编译 NE10 库并将其集成到 Vitis 工具链中,可以按照以下方式操作: #### 准备工作 NE10 是由 ARM 官方发布的开源库,主要用于优化 ARM 平台上的信号处理算法。可以从其官方网站下载完整的项目工程以及相关文档[^2]。 在准备阶段,需确认开发环境已安装必要的工具链,例如 GCC 高版本支持 C++11 的特性[^4]。对于 Windows 用户,推荐通过虚拟机或者 WSL(Windows Subsystem for Linux)来设置基于 Ubuntu 或其他兼容发行版的操作系统。 #### 下载与配置 NE10 源码 访问 NE10 的官网地址 (http://projectne10.github.io/Ne10/) 获取最新版本的源代码包,并解压至本地目录。阅读随附的 `README` 文件了解构建需求和依赖项[^3]。 #### 设置交叉编译器路径 Vitis 提供了针对不同目标平台预定义好的工具链集合。假设当前的目标设备架构为 ARM Cortex-A 系列处理器,则需要指定相应的交叉编译前缀给 Makefile 中的相关变量。通常情况下,默认名称类似于 `arm-linux-gnueabihf-`. 编辑顶层 Makefile 添加如下内容: ```makefile CROSS_COMPILE ?= /path/to/vitis/toolchain/bin/arm-linux-gnueabihf- CC := $(CROSS_COMPILE)gcc AR := $(CROSS_COMPILE)ar RANLIB := $(CROSS_COMPILE)ranlib ``` #### 修改编译选项适应硬件特点 由于 NE10 设计之初即考虑到了多种 CPU 扩展指令集的支持情况(比如 NEON),因此务必开启这些功能开关以便充分发挥性能优势: ```bash export CFLAGS="-march=armv7-a -mfpu=neon-vfpv4 -O3" ``` 上述命令设置了目标体系结构(`armv7-a`) 和浮点单元类型 (`neon-vfpv4`) 同时启用了最高级别的优化级别(-O3)[^2]. #### 构建静态链接库(.a) 运行标准 GNU 自动化构建流程完成最终产物生成过程: ```bash ./configure --host=arm-linux-gnueabihf && make clean all ``` 如果一切顺利的话,在 ne10/lib 子目录下应该能够找到名为 libNe10.a 的文件表示已经成功创建了一个可供分发使用的静态库实例。 #### 测试验证环节 编写简单的测试程序调用任意一个公开接口函数来进行基本的功能性校验。下面给出了一段示范性的例子用于演示如何加载该第三方组件并与之交互: ```c #include <stdio.h> #include "ne10_types.h" #include "ne10_fft.h" int main() { printf("Testing NE10 FFT function...\n"); /* Initialize input/output buffers */ float *input = malloc(sizeof(float)*N); complex_float_t *output = malloc(sizeof(complex_float_t)*N); /* Perform forward transform */ ne10_fft_cpx_f32(input, output, N, FORWARD_TRANSFORM); free(input);free(output); return 0; } ``` 利用之前提到过的相同参数组合重新执行一次完整编联动作即可获得独立可移植的应用二进制镜像形式的结果物[^1]: ```bash $(CC) test_ne10.c -o test_ne10.out ./ne10/lib/libNe10.a -lm ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值