基于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的启动:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:1736. 替换隐藏数字得到的最晚时间(python3解法)

难度:简单 给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。 有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。 …

selenium处理下拉框

当想要爬取的数据由下拉框来选择时,应该如何处理? 页面如下: 目的获得电影的详细信息,包括票房,上映日期等。 代码如下: from selenium import webdriver from selenium.webdriver.support.select impor…

C语言——大头记单词

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 每一发奋努力的背后,必有加…

Ubuntu18.04在线镜像仓库配置

在线镜像仓库 1、查操作系统版本 rootubuntu:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic 2、原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 3、查…

【开源】基于JAVA语言的陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

零售EDI:Babylist EDI 项目案例

Babylist 与各种不同的品牌和零售商合作,包括婴儿用品、玩具、衣物和其他相关产品的制造商。用户可以在 Babylist 上浏览各种不同的产品,并根据自己的需求和喜好选择适合的项目。本文将为大家介绍对接Babylist 的EDI项目案例。 Babylist EDI 需求 传输协…

linux文件比较工具diff-关于参数-pN的设置方法

非纯文本文件比较可用cmp命令 第一:利用diff创建分析文件,处理补丁(patch)功能的文件 案例:多数用于同一软件的不同版本之间,比如比较配置文件和源文件的区别,生成补丁文件,执行更…

Midjourney网页版

引言 基于国外的api开发开发了一款网页版的midjourney,文末有链接 相关资源 Midjourney官方教学资料Midjourney官网discord官网B站学习资源推荐 账号注册 获取网络访问权限 使用Midjourney的前提是计算机有外网访问权限 此处推荐两款软件,lantern的优势是免费&…

windows vscode jsoncpp cmake c++ 构建项目

jsoncpp的编译和使用推荐文章:jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn)https://www.subingwen.cn/cpp/jsoncpp/从这个链接下载jsoncpp-master:https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp,…

LLM之LangChain(二)| LangChain中的Agent

在本文中,我们将讨论LangChain中的Agent及其各种类型。但在深入研究Agent之前,让我们先了解一下什么是LangChain和Agent。 一、什么是LangChain? LangChain是一种功能强大的自动化工具,可用于各种任务,它提供了可用于…

Cobalt: 我愿称之为IDEA最美配色☕️

先来个预览: Cobalt是为IntelliJ IDEA和Java语言优化的一个配色主题,以现代和科技感的蓝色为主。题主相信哪怕是一个简单的主题配色,都是可以给开发者们带来更有生产力、更舒适的创作心境。希望你会喜欢! 另外Cobalt这个名字取自…

【开源】基于JAVA的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

04章【面向对象(上)】

文章目录 面向对象基本概念类与对象类和对象的定义格式对象与内存分析封装性构造方法this关键字值传递与引用传递对象的一对一关系static关键字main方法分析代码块单例设计模式对象数组与管理 面向对象基本概念 什么是面向对象: 面向对象是一种编程思想。面向对象…

经典ABR算法介绍:Pensieve (SIGCOMM ‘17) 原理及训练指南

文章目录 前言Pensieve原理*Pensieve重训练参考Oboe [SIGCOMM 18]Comyco [MM 19]Fugu [NSDI 20] A3C熵权重衰减思路实现 前言 Pensieve是DASH点播视频中最经典的ABR算法之一,也是机器学习类(Learning-based)ABR算法的代表性工作。Pensieve基…

母婴品牌找小红书达人卖货怎么做?

小红书母婴种草推广,就是品牌方找小红书上的达人进行产品体验和内容分享,从而达到卖货的目的,软广形式更容易被大众所接受,而且小红书平台上的宝妈用户群体都是有一定消费水平的一二线城市用户,所以这样就会形成一套完…

十一、常用API——正则表达式

目录 练习1: 正则表达式的作用 正则表达式 字符类(只匹配一个字符) 预定义字符(只匹配一个字符) 数量词 类 Pattern 正则表达式的构造摘要 反斜线、转义和引用 字符类 行结束符 组和捕获 Unicode 支持 与…

第3章 无监督学习与预处理

目录 1. 无监督学习的类型2. 无监督学习的挑战3. 预处理与缩放3.1 不同类型的预处理3.2 应用数据变换3.3 对训练数据和测试数据进行相同的缩放快捷方式与高效的替代方法 3.4 预处理对监督学习的作用 4. 降维、特征提取与流形学习4.1 主成分分析(PCA)4.1.…

大数据StarRocks(八):集群扩缩容

一、FE扩缩容 StarRocks FE 节点分为 Follower 节点和 Observer 节点。Follower 节点参与选举投票和写入,Observer 节点只用来同步日志,扩展读性能。 注意: 所有 FE 节点的 http_port 必须相同。Follower FE 节点(包括 Leader …

Vue Axios——前端技术栈

文章目录 基本介绍Vue是什么? MVVMVue的使用快速入门注意事项和使用细节 Vue 数据绑定机制分析数据单向渲染注意事项和细节 双向数据绑定事件绑定示例:注意事项和使用细节课后作业1课后作业2 修饰符示例 条件渲染/控制: v-if v-showv-if VS v-show课后作…

山海鲸可视化软件:引领航空业数字化转型的智慧机场解决方案

作为山海鲸可视化软件的开发者,我们深知在当今数字化时代,数据可视化的重要性。特别是在航空业,数据可视化不仅可以提高运营效率,还能为决策者提供更准确、实时的信息。为此,我们推出了一款专为智慧机场设计的可视化解…