首页 > 其他分享 >基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS

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

时间:2024-01-19 17:57:16浏览次数:31  
标签:SkyEye FreeRTOS Phytium Boot 编译 加载

仿真平台在帮助提升研发效率、加快产品面市时间上的作用已得到诸多验证,通过对处理器进行仿真来支持嵌入式系统及软件的虚拟化开发、测试和验证成为目前应用较为广泛的方法。天目全数字实时仿真软件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系统)。在下载源码编译之前,需要做以下准备:

i. 安装git

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

iii. 安装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,FreeRTOS,Phytium,Boot,编译,加载
From: https://www.cnblogs.com/digiproto/p/17975262

相关文章

  • FreeRTOS--事件组
    示例源码基于FreeRTOSV9.0.0事件组1.概述FreeRTOS事件组,是任务间同步的一种方式。它基于bitmap实现,所谓的事件组,即一个整数。整数中的每一位代表着一个事件,bit为1时表示事件发生,bit为0表示事件未发生;事件触发可以由任务触发,也可以由中断服务触发,触发时将对应bit位置1;当任......
  • BUG分享|报错:Cannot access Memory (@ 0xe00fffe4, Read, Acc Size: 4 Byte);移植FreeR
    引言在移植FreeRTOS到STM32F411CEU6上时,出现了烧录一次后,无法再次烧录的情况。现象烧录时报错:CannotaccessMemory(@0xe00fffe4,Read,AccSize:4Byte);弹窗:Connectionrefusedduetodevicemismatch!单片机:STM32F411CEU6烧录器:DAPLink现象:修改代码后,第一次可以......
  • FreeRTOS调度
    FreeRTOS调度器是其核心组件之一,负责管理和调度系统中的多个任务。以下是对FreeRTOS调度器的原理和使用方法的深度解析:原理:任务创建:使用xTaskCreate()函数创建任务,该函数需要指定任务函数、任务名称、堆栈大小、优先级和其他参数。每个任务都有自己的堆栈空间和优先级。优先级调度......
  • FreeRTOS中的定时器介绍和使用
    FreeRTOS作为一款流行的嵌入式实时操作系统,提供了强大的任务调度和同步机制。在实时嵌入式系统中,定时器是一项重要的功能,用于执行特定任务、延时操作或周期性执行代码。本文将深入介绍FreeRTOS中的定时器,并提供详细的代码演示,以帮助开发者更好地理解和应用定时器功能。1.定时器的......
  • FreeRTOS中的中断中能否使用互斥量
    在嵌入式系统中,实时操作系统(RTOS)是为了确保任务的实时性和协同工作而设计的。FreeRTOS作为一款流行的RTOS,提供了丰富的同步和通信机制,其中互斥量是一种用于保护共享资源的关键工具。然而,开发者在使用FreeRTOS时,经常会面临一个问题,即在中断中是否可以安全地使用互斥量。本文将深入讨......
  • FreeRTOS中的任务优先级划分策略
    FreeRTOS是一款广泛应用的实时操作系统,它采用任务优先级来调度不同任务的执行顺序。在多任务系统中,合理的任务优先级划分策略是确保系统稳定性和性能的关键之一。本文将深入探讨FreeRTOS中的任务优先级划分策略,以及通过详细的代码演示展示如何灵活地配置任务的优先级。1.任务优先......
  • FreeRTOS中信号量和互斥量背后的原理
    FreeRTOS是一个流行的嵌入式实时操作系统,提供了信号量和互斥量等同步机制来协调任务之间的访问共享资源。本文将深入探讨FreeRTOS中信号量和互斥量的背后原理,以及如何使用这些机制确保系统的稳定性和性能。1.信号量和互斥量的概念1.1信号量信号量是一种计数器,用于控制多个任务对......
  • FreeRTOS--递归锁
    示例源码基于FreeRTOSV9.0.0递归锁1.概述递归锁是特殊的互斥量,允许同一任务多次获取和释放锁,而不会造成死锁;获取和释放的次数必须相同;递归锁的实现依赖于内部的uxRecursiveCallCount变量,它标记递归的次数,每次上锁加1,每次解锁减1,减为0才真正释放锁;递归锁也不能在中断内使用......
  • FreeRTOS--互斥量
    示例源码基于FreeRTOSV9.0.0互斥量1.概述互斥量用于临界资源的保护,通过互斥量,多个任务对相同资源进行的访问操作是互斥的;互斥量的核心在于谁上锁,就由谁解锁,这只是约定,FreeRTOS并没有在代码上实现这一点;互斥量是一种特殊的信号量,也是一种特殊的队列;使用互斥量,需要开启宏con......
  • 嵌入式操作系统的抉择:FreeRTOS、Linux、LiteOS的异同比较
    引言:在嵌入式系统开发中,选择合适的操作系统是至关重要的决策。FreeRTOS、Linux和LiteOS都是嵌入式领域常见的操作系统,各自具有特定的优势和应用场景。本篇博客将深入比较FreeRTOS、Linux和LiteOS之间的异同点,为嵌入式开发者提供更清晰的选择指南。1.FreeRTOS:轻量级实时操作系统Fr......