FT-1500A 移植
目录 SylixOS 概述 FT-1500A 概 述 移植过程
SylixOS 概述 SylixOS 是一个开源的嵌入式实时操作系统 它诞生于 2006 年 经过多年开发 目前已经成为 一个功能完善 性能卓越 可靠稳定的嵌入式软件开发平台 目前 SylixOS 是国内唯一支持 多核 SMP 处理器的实时操作系统 SylixOS 支持以下特性 1 兼容 IEEE 1003 ISO/IEC 9945 操作系统接口规范 2 兼容 POSIX 1003.1b ISO/IEC 9945-1 实时编程标准 3 优秀的实时性能 任务调度与切换 中断响应算法都是 O 1 时间复杂度算法 4 支持无限多任务 5 抢占式调度支持 256 个优先级 6 支持协程 windows 称为纤程 7 支持虚拟进程 8 支持优先级继承 防止优先级翻转 9 极其稳定的内核 很多基于 SylixOS 开发的产品都需要 7x24 小时不间断运行 10 内核 CPU 占用率低 11 柔性体系 Scalable 12 核心代码使用 C 编写 可移植性好
SylxOS 实时性测评 SylixOS 功能强大 但实时性依然卓越 2015 年 6 月由清华大学完成了 SylixOS 的实时性测评 在 AM335X 处理器 Cortex-A8 800MHz 硬件平台上分别运行 SylixOS Linux RT-Linux 操作系统 使用 Cyclictest 工具进行实时性测试 100W 次无压力测试结果 最大延迟时间 us 最小延迟时间 us 平均延迟时间 SylixOS 35 Linux+RT 35 Linux 717 比较结果 SylixOS=Linux+RT<linux 3 8 7 SylixOS<linux<Linux+RT 4 12 13 SylixOS<Linux+RT<linux
SylxOS 实时性测评 使用 Hackbench 工具提供压力环境 使用 Cyclictest 工具进行实时性测试 10W 次有压力测试结果 最大延迟时间 us 最小延迟时间 us 平均延迟时间 us SylixOS 62 Linux+RT 67 Linux 894 比较结果 SylixOS < Linux+RT < Linux 2 8 17 SylixOS < Linux+RT < Linux 4 31 35 SylixOS < Linux+RT < Linux
SylxOS 实时性测评 在 i.mx6 处理器 Cortex-A9 四核 硬件平台上 100W 次无压力测试结果 最大延迟时间 us 最小延迟时间 us 平均延迟时间 us SylixOS 13 Linux 117 比较结果 SylixOS << Linux 2 18 SylixOS < Linux 4 90 SylixOS < Linux SylixOS 25 Linux 121 比较结果 SylixOS << Linux 2 18 SylixOS < Linux 5 76 SylixOS < Linux 10W 次有压力测试结果 最大延迟时间 us 最小延迟时间 us 平均延迟时间 us 从统计结果可以看出 在有无压力的两种情况下 SylixOS 的最大延迟时间都 明显小于 Linux 的延迟时间 并且最小延迟时间和平均延迟时间都明显小于 Linux
SylixOS 的集成开发环境 SylixOS 的集成开发环境 RealEvo 系列软件 目前已经发展到 2.0 版本 主要有以 下几个软件 1. RealEvo-IDE 2. RealEvo-Compiler 3. RealEvo-Simulator 4. RealEvo-QtSylixOS 5. RealEvo-RadioSimulator RealEvo-IDE 基于 Eclipse 是 SylixOS 的内核 BSP 应用等类型工程的 IDE 集应用部署 调试 分析和内核裁减 调试 事件分析等功能于一身 RealEvo-Compiler 基于 GCC 目前支持四大处理器体系结构 X86 ARM MIPS PowerPC RealEvo-Simulator 是一个使用方便的 qemu 模拟器的前端 RealEvo-QtSylixOS 是 SylixOS 的 Qt SDK 同时通过插件增强 Qt-Creator 功能 RealEvo-RadioSimulator 是 SylixOS 无线自组网仿真环境
RealEvo-IDE 调试应用程序
RealEvo-QtSylixOS 分析 QML 应用
RealEvo-Simulator 模拟 ARM 平台
目录 SylixOS 概述 FT-1500A 概 述 移植过程
飞腾 FT-1500A 概述 FT-1500A 是国防科技大学开发用于天河二号超算 基于 Sparc V9 架构的 FT-1500 的后续产品 FT-1500A 系列处理器是 64 位通用 CPU 兼容 ARMv8 指令集 采用国际先进的 28nm 工艺流片 具有高性能 低功耗等特点 经测试 FT-1500A 系列处理器与 Intel 2010 年的处理器性能相当 部分性能略有优势 可实现对 Intel 中高端 至强 服 务器芯片的替代 目前 FT-1500A 系列包括 4 核和 16 核两款产品 其中 4 核处理器芯片主要面向桌 面终端和轻量级服务器应用领域 16 核处理器芯片面向服务器应用领域 支持虚拟 化功能
FT-1500A-16 主要技术指标 16 个处理器核 核心时钟频率 1.5GHz GFlops 是 giga floating-point operations per 峰值性能 96GFlops@1.5GHz second 每秒 10 亿次浮点运算 功耗 35W 4 通道 DDR3 两个 16X PCIE3.0 接口 每个 x16 接口都可以拆分为两个 x8 接口 1.0mm 球间距 BGA1944 封装 封装尺寸 42.5mmx60mm 至强 5500 与皓龙 2400 系列处理器性能对比测试 实测峰值 效能 平台价格 每 GFLOP 运算 成本 85.12 GFLOPS 74.03 GFLOPS 86.97% $3,800.00 $51.33 124.8 GFLOPS 99.38 GFLOPS 79.63% $3,500.00 $35.21 处理器型号 理论峰值 Nehalem X5550 2.66GHz Istanbul 2435 2.6GHz
ARMv8-A 体系结构
ARMv8-A 的异常模型
目录 SylixOS 概述 FT-1500A 概 述 移植过程
FT-1500A 移植 SylixOS 将移植工作分为两个阶段 1. FT-1500A 能正常运行 SylixOS 关键点.快速测试新内核的手段 调试信息输出手段.EL2 到 EL1 的转换 AARCH64 到 AARCH32 的转换.中断和内核心跳定时器支持.多核启动与 SMP.MMU CACHE VFP NEON 与 ARMv7-A 兼容 2. 完善驱动和实现 AARCH64 PCI 网卡 I2C DS1339 RTC GPIO
快速测试新内核的手段 FT-1500A 的 BIOS 采用 U-BOOT 默认从 SATA 硬盘加载 Linux 的 uimage U-BOOT 支持 TFTP 命令 可以从主机的 TFTPD 服务器下载 SylixOS 的内核镜像到 内存 然后通过 GO 命令跳转到下载地址运行 setenv ipaddr 192.168.1.11; setenv serverip 192.168.1.10; setenv loadaddr 0x90000000; setenv bootfile sylixosimage; tftp; go 0x90000000
EL2 到 EL1 和 AARCH64 到 AARCH32 的转 换 U-BOOT 工作在 EL2(AARCH64) 与 SylixOS 暂时支持的 AARCH32 不同 UBOOT 跳转后需要有一段代码实现 EL2 到 EL1 和 AARCH64 到 AARCH32 的转换 使用 aarch64-sylixos-elf-gcc 编 译 使用 arm-sylixos-eabi-gcc 编 译.global switch_aarch32 SECTION(.vector) FUNC_DEF( switch_aarch32) FUNC_DEF(secondary_holding_pen).word 0xd51c101f.word 0xd518101f.word 0xd53c1101.word 0x927ff821.word 0xd51c1101.word 0x10000161.word 0xd51c4021.word 0xd2800261.word 0xd51c4001.word 0xd69f03e0.word 0xd503201f.word 0xd503201f.word 0xd503201f.word 0xd503201f.word 0xd503201f.word 0xd503201f switch_aarch32: MSR MSR SCTLR_EL2, XZR SCTLR_EL1, XZR MRS BIC MSR X1, HCR_EL2 ;// Read HCR_EL2 into Xt X1, X1, #0x01 HCR_EL2, X1 ;// Write Xt to HCR_EL2 ADR MSR X1, aarch32 ELR_EL2, X1 MOV MSR X1, #0x13 ;// (AArch32 SVC mode) SPSR_EL2, X1 ERET.balign 32 aarch32:.word 0xeafffffe ;// b. objdump 反汇编 FUNC_DEF(vector) B reset
调试信息输出手段 FT-1500A 带有一个 16C550 串口 使用该串口作为调试输出的手段 16C550 可以使 用 8250 兼容的方式进行操作 由于 U-BOOT 也使用该串口 意味着该串口已经初始化过 在 SylixOS 中暂时不再进 行初始化 实现一个类似 putchar 的函数 VOID uart8250putchar (addr_t addrbase, CHAR cchar) { UINT32 uilsr; while (1) { uilsr = read32(addrbase + UART_LSR); if (uilsr & UART_LSR_THRE) { break; } } write8(cchar, addrbase + UART_THR); }
中断支持 GIC(Generic Interrupt Controller) 是 ARM 公司的中断控制器 IP 核 已经发展到第 四代 其中 FT-1500A 使用 GICv3
内核心跳定时器
ARMv8-A 的 CPU 启动方法 目前支持两种启动方法 /* arch/arm64/kernel/cpu_ops.c */ static const struct cpu_operations *supported_cpu_ops[] initconst = { #ifdef CONFIG_SMP &smp_spin_table_ops, #endif &cpu_psci_ops, NULL, }; 具体使用哪一种 由 U-BOOT 传入的 DTS 文件进行指定 /* u-boot.dts */ cpus {... cpu@0 { device_type = "cpu"; compatible = "arm,armv8"; reg = <0x0 0x0>; enable-method = "spin-table"; cpu-release-addr = <0x0 0x8007fff0>; }; }
spin-table 启动方法 spin-table 是一种简单的 可支持 SMP 启动的 cpu operations /* arch/arm64/kernel/smp_spin_table.c */ const struct cpu_operations smp_spin_table_ops = {.name = "spin-table",.cpu_init = smp_spin_table_cpu_init,.cpu_prepare = smp_spin_table_cpu_prepare,.cpu_boot = smp_spin_table_cpu_boot, }; 由上面的实现可知 spin-table operations 只支持 cpu_init cpu_prepare 和 cpu_boot 三个回调函数 因此 它只能实现 secondary cpu boot 的功能 其他功 能 如 cpu hotplug cpuidle 电源管理等 均不支持
ARMv8-A 的 CPU 启动流程 由它的名字 spin 就可以看出 secondary cpu boot 的实现逻辑 即 SOC 上电 后 每个 CPU 都启动 开始执行 ROM 代码 除了 boot CPU 正常执行外 其它 的 secondary CPUs 都等待在一个地方 例如使用 WFE 指令 直到 boot CPU 启动完成后 再发消息通知其它 CPU 执行
FT-1500-A-16 平台 SylixOS 运行效果
FT-1500-A-16 平台 SylixOS 运行效果
谢谢 坚若磐石 万无一失