基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS

2024-01-19 19:36

本文主要是介绍基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仿真平台在帮助提升研发效率、加快产品面市时间上的作用已得到诸多验证,通过对处理器进行仿真来支持嵌入式系统及软件的虚拟化开发、测试和验证成为目前应用较为广泛的方法。天目全数字实时仿真软件SkyEye是一款基于可视化建模的硬件行为级仿真平台,在众多仿真工具中有着国产自主可控、所支持的处理器种类更为全面等优点。

本文主要关于如何基于SkyEye实现飞腾处理器的仿真,以及如何在飞腾仿真处理器上运行U-Boot并通过网络加载Phytium-FreeRTOS。

01.U-Boot

U-Boot(Universal Bootloader)是一个用于嵌入式系统与设备的轻量级引导加载程序,主要用于在启动时初始化硬件并加载操作系统。作为一个开源项目,U-Boot支持用户查看、修改和分发源代码,符合自由软件的原则。

具体来说,U-Boot负责初始化嵌入式系统的硬件,包括处理器、内存、外设等,其加载引导的操作系统可以是Linux、Android等嵌入式操作系统;同时提供一个命令行界面,用户可以通过该界面执行各种命令,例如烧写Flash、通过网络启动操作系统等。生态方面,U-Boot广泛支持多种处理器架构,包括ARM、MIPS、PowerPC、RISC-V等,并且具备很强的可移植性,可以轻松地移植到不同的硬件平台上。

02.编译U-Boot

在编译使用环境的选择上,推荐使用Ubuntu系统(本文演示中使用的是Ubuntu22.04系统)。在下载源码编译之前,需要做以下准备:

  1. 安装git

  2. 安装gcc-aarch64-linux-gnu交叉编译工具链

  3. 安装make

在shell中使用以下命令安装git、make以及gcc-aarch64-linux-gnu:

sudo apt install git make gcc-aarch-linux-gnu

2.1 下载飞腾官方移植好的U-Boot源码

源码可以通过飞腾在gitee上的仓库下载,在shell环境中执行下面的命令:

git clone https://gitee.com/PhytiumISJL/u-boot.git

使用上述git命令后,git将会从代码仓库中下载飞腾官方U-Boot源码,如下图所示。u-boot目录即为下载得到的飞腾官方U-Boot源码。

2.2 编译U-Boot

2.2.1 设置环境变量

开始编译前,出于U-Boot支持多种目标架构的原因,需要根据目标平台以及所用的交叉编译工具链设置ARCH和CROSS_COMPILE两个环境变量。

编辑~/路径下的.bashrc文件,在文件末尾加入两行脚本:

export ARCH=armexport CROSS_COMPILE=aarch64-linux-gnu-

设置后需要重新启动终端,或者使用【source ~/.bashrc】命令让配置在当前终端立即生效。

2.2.2 编译

对U-Boot的编译可通过执行下列命令来完成。编译完成后将会得到可以在FT2000处理器中运行的U-Boot二进制可执行文件。

make D2000_defconfig && make

下图是编译过程中最后一部分输出信息以及编译后的目录结构,从中可以看到编译生成了u-boot-nodtb.bin文件,该文件即为将要被加载到FT2000处理器中运行的U-Boot。

在后续加载u-boot-dtb.bin文件至基于SkyEye仿真的FT2000处理器上运行的过程中,需要配置程序的入口地址。该地址可以通过readelf命令查看u-boot得到,u-boot为elf格式的可执行文件,查看信息如下:

u-boot-dtb.bin文件是使用aarch64-linux-gnu-objcopy命令将u-boot转换为bin文件格式所得到的,因此其入口地址是一致的。从上图可知其入口地址为0x180000。

03.编译Phytium-FreeRTOS

FreeRTOS(Real-Time Operating System)是一个开源的、实时的嵌入式操作系统内核,专为小型嵌入式系统设计。Phytium-FreeRTOS是由Phytium官方专为FT2000-4、D2000等处理器定制的FreeRTOS移植版本,可以在Windows、Linux系统上搭建环境编译得到Phytium-FreeRTOS镜像,本文将以Windows系统为例。

3.1 Phytium-FreeRTOS-SDK开发环境

Phytium官方提供了一个FreeRTOS的开发环境,可供快速构建和开发Phytium-FreeRTOS的程序镜像,具体可通过以下网址获取开发环境:

https://gitee.com/phytium_embedded/phytium-free-rtos-sdk

Phytium-FreeRTOS-SDK开发环境集成了MSYS2、arm-none-eabi-gcc、aarch64-none-elf-gcc、tftpd64等工具。

  • MSYS2

Msys2 portable环境, 主要提供Windows上的shell命令行开发环境,包括Cygwin(POSIX兼容性层)和MinGW-w64。

  • arm-none-eabi-gcc、aarch64-none-elf-gcc

基于MinGW-w64构建的专门用于ARM架构的交叉编译工具链。

  • tftpd64

提供tftp服务,用于通过网络下载二进制镜像文件,主要功能包括安装tftp32服务和配置tftp目录。

3.2 配置环境变量

添加Windows环境变量【PHYTIUM_DEV_PATH】(环境变量名不能自定义),例如指向目录【D:\Software\phytium-dev-windows-nt】(Phytium-FreeRTOS-SDK开发环境的存放路径可以自定义)。

3.3 进入Phytium-FreeRTOS-SDK编译环境

Phytium-FreeRTOS-SDK编译环境基于MSYS2构建,所以编译过程在MSYS2提供的shell中进行。双击【run_msys2.cmd】进入开发环境,如下图所示:

进入开发环境后,执行当前目录下的setup_dev.py以初始化开发环境。该Python脚本会解压并安装Phytium-FreeRTOS-SDK开发环境自带的交叉编译工具链,安装完成后重启系统或者执行下述命令,可以使编译工具链的环境生效:

source /etc/profile.d/phytium_dev.sh

以上过程如下图所示:

3.4 拉取Phytium-FreeRTOS-SDK源码

上述章节的步骤完成后,可以在phytium-dev-windows-nt目录下使用下述git命令实现Phytium-FreeRTOS-SDK源码的拉取。

git clone https://gitee.com/phytium_embedded/phytium-free-rtos-sdk.git ./phytium-free-rtos-sdk

进入拉取到的源码路径下,执行该路径下的install.py脚本,将会安装Standalone SDK和设置环境变量,安装完成后重启系统或者执行下述命令可使编译环境立即生效:

source /etc/profile.d/phytium_dev.sh

以上执行过程如下图所示:

3.5 编译

完成上述步骤后,进入到【/phytium-free-rtos-sdk/example/template】目录,使用make -j8命令编译,编译过程如下图所示:

编译完成后,使用ls查看当前目录下的文件,可以看到freertos.elf可执行文件已经生成。

后续将会使用U-Boot从tftp服务器上下载Phytium-FreeRTOS的程序镜像到目标板卡上运行,此处以下载freertos.bin文件为例。

通过readelf工具可以查看到freertos.elf可执行文件为AArch64架构,程序入口地址为0x80100000,后续在SkyEye中加载该可执行文件将会用到这个地址,详细信息如下图所示:

04.SkyEye仿真FT2000运行U-Boot

4.1 SkyEye仿真FT2000

SkyEye支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模。使用SkyEye仿真的FT2000处理器可视化模型如下图所示:

4.2 配置SkyEye脚本

处理器仿真模型搭建完成后,需要配置SkyEye脚本来加载镜像启动。该脚本的工作主要是解析json文件并示例化模型对象、将镜像加载到指定地址、设置PC寄存器、最后开始执行。

define-conf D2000.jsonload-file ftc663_core_0 binary/u-boot-dtb.bin 0x180000set-pc ftc663_core_0 0x180000init-ok

4.3 运行U-boot

在SkyEye中加载U-boot,运行结果如下图所示:

从上图的串口输出信息中可知,U-Boot已经成功启动并进入命令行,接下来只需搭建好TFTP服务器,便可通过TFTP服务器下载freertos.bin运行。

05.U-Boot加载Phytium-FreeRTOS运行

U-Boot可以通过tftboot命令从tftp服务器上下载镜像至目标板卡的指定地址处,并使用go命令启动镜像。

5.1 tftp服务器搭建

本文选择使用TFTPD64来实现tftp服务器的搭建。TFTPD64是一个基于Windows平台、简单易用的TFTP服务器搭建软件,可供快速搭建TFTP服务器。软件安装后如下图所示,需要根据实际的freertos.bin文件存放路径以及本机网卡的IP地址来设置Current Directory和Server interface。

5.2 tftpboot命令下载镜像启动

tftp服务器搭建完成后,使用tftpboot命令从服务器下载镜像到0x80100000地址处,该地址为freertos.bin的程序入口地址。下载镜像到对应地址后,使用go命令启动镜像。如下图所示,红框中为用U-Boot加载镜像和启动镜像执行的命令,U-Boot已经成功实现Phytium-FreeRTOS的启动:

这篇关于基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623460

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

如何在运行时修改serialVersionUID

优质博文:IT-BLOG-CN 问题 我正在使用第三方库连接到外部系统,一切运行正常,但突然出现序列化错误 java.io.InvalidClassException: com.essbase.api.base.EssException; local class incompatible: stream classdesc serialVersionUID = 90314637791991

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

RabbitMQ使用及与spring boot整合

1.MQ   消息队列(Message Queue,简称MQ)——应用程序和应用程序之间的通信方法   应用:不同进程Process/线程Thread之间通信   比较流行的中间件:     ActiveMQ     RabbitMQ(非常重量级,更适合于企业级的开发)     Kafka(高吞吐量的分布式发布订阅消息系统)     RocketMQ   在高并发、可靠性、成熟度等

Spring Boot 入门篇

一、简介 Spring Boot是一款开源的Java Web应用框架,旨在简化Spring应用的初始搭建以及开发过程。它整合了Spring技术栈中的诸多关键组件,为开发者提供了一种快速、简便的Spring应用开发方式。Spring Boot遵循“约定优于配置”的原则,通过自动配置、起步依赖和内置的Servlet容器,极大地简化了传统Spring应用的配置和部署过程。 二、Spring Boot

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess