基于 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 系统)。在下载源码编译之前,需要做以下准备:
i. 安装 git
ii. 安装 gcc-aarch64-linux-gnu 交叉编译工具链
iii. 安装 make
在 shell 中使用以下命令安装 git、make 以及 gcc-aarch64-linux-gnu:
2.1 下载飞腾官方移植好的 U-Boot 源码
源码可以通过飞腾在 gitee 上的仓库下载,在 shell 环境中执行下面的命令:
使用上述 git 命令后,git 将会从代码仓库中下载飞腾官方 U-Boot 源码,如下图所示。u-boot 目录即为下载得到的飞腾官方 U-Boot 源码。
2.2 编译 U-Boot
2.2.1 设置环境变量
开始编译前,出于 U-Boot 支持多种目标架构的原因,需要根据目标平台以及所用的交叉编译工具链设置 ARCH 和 CROSS_COMPILE 两个环境变量。
编辑~/路径下的.bashrc 文件,在文件末尾加入两行脚本:
设置后需要重新启动终端,或者使用【source ~/.bashrc】命令让配置在当前终端立即生效。
2.2.2 编译
对 U-Boot 的编译可通过执行下列命令来完成。编译完成后将会得到可以在 FT2000 处理器中运行的 U-Boot 二进制可执行文件。
下图是编译过程中最后一部分输出信息以及编译后的目录结构,从中可以看到编译生成了 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 开发环境自带的交叉编译工具链,安装完成后重启系统或者执行下述命令,可以使编译工具链的环境生效:
以上过程如下图所示:
3.4 拉取 Phytium-FreeRTOS-SDK 源码
上述章节的步骤完成后,可以在 phytium-dev-windows-nt 目录下使用下述 git 命令实现 Phytium-FreeRTOS-SDK 源码的拉取。
进入拉取到的源码路径下,执行该路径下的 install.py 脚本,将会安装 Standalone SDK 和设置环境变量,安装完成后重启系统或者执行下述命令可使编译环境立即生效:
以上执行过程如下图所示:
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 寄存器、最后开始执行。
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 的启动:
原文链接:https://mp.weixin.qq.com/s/WyrCKaghDLP5a_M5HpyPFw
版权声明: 本文为 InfoQ 作者【DevOps和数字孪生】的原创文章。
原文链接:【http://xie.infoq.cn/article/6acca75fa03305474dbe1e38b】。文章转载请联系作者。
评论