小型卫星上的 Linux

作者:Christopher Huffine

美国国防部 (DoD) 的部队转型办公室 (OFT) 与海军研究实验室 (NRL) 进行了接触,希望建造并发射一颗 100 公斤级的小型卫星,为一系列技术和操作实验提供平台。OFT 向实验室提出的一个关键挑战是在不到一年的时间内建成这种能力。为了实现 TacSat 的第一个愿景,需要发展新的合作伙伴关系和方法,并利用现有的硬件、软件和设施。

Linux on a Small Satellite

图 1. TacSat-1 航天器,太阳能电池阵列已展开,天底(面向地球)侧朝上

Copperfield-2 是作者团队为海军开发的传感器系统,它成为了 TacSat-1 有效载荷基础设施的基石。Copperfield-2 传感器系统(图 2)最初是为无人驾驶飞行器 (UAV) 设计的——非常适合改编为空间任务,因为许多设计要求是相似的。

卫星总线可以被认为是航天器飞行器。它提供物理和电气基础设施以支持有效载荷。卫星有效载荷是总线携带的传感器或实验。TacSat-1 使用的总线最初是为 ORBCOMM 小型通信卫星星座设计的。如果 Copperfield-2 在飞机或无人机上飞行,该平台将充当总线,为有效载荷提供基础设施。

Linux on a Small Satellite

图 2. TacSat-1 Copperfield-2 有效载荷框图

模块化有效载荷硬件设计

Copperfield 有效载荷的第一个硬件版本是从遗留硬件系统设计的,并经过调整,允许原始硬件通过以太网连接的 TCP/IP 接口运行。在设计第二代实验能力之前进行权衡时,考虑了各种总线标准、商用现货 (COTS) 新兴能力和其他因素。我们决定采用 3U CompactPCI 架构,以实现物理外形尺寸的最大灵活性(图 3)。但是,我们决定使用定制的 PCI 母板,以便 CompactPCI 用户定义的 P2 连接器引脚可以用于我们自己的目的。这使得母板上的插槽支持我们定制设计的硬件、支持 COTS 以太网交换机卡的插槽以及可以容纳按照 PXI 标准构建的卡的插槽。由此产生的架构将标准 CompactPCI 与通过 P2 背板提供的以太网连接相结合。

Linux on a Small Satellite

图 3. TacSat-1 Copperfield-2 CompactPCI 卡组和机箱

基于模块化标准的有效载荷架构

很少有卫星项目像 TacSat-1 实验那样具有灵活性或承担风险的能力。TacSat-1 实验允许创新性地利用政府现货 (GOTS) 和 COTS 硬件组件,以及创建有效载荷软件的新颖方法,这些软件提供最大的灵活性和基于标准的操作。风险理念允许使用模块化有效载荷硬件。同样,为 TacSat-1 扩展了模块化软件和通信系统,扩展了基于标准的开源软件的作用,使其提供可重用的软件基础设施,适用于 TacSat-1 有效载荷的灵活命令和控制。

Copperfield-2 有效载荷架构旨在提供尽可能大的灵活性。将无人机有效载荷扩展到空间应用是可能的,这证明了该架构的灵活性。由于有效载荷软件组件不是空间飞行关键的,这意味着航天器的健康和安全不依赖于其可靠性,因此许多软件可以在空中和空间平台之间重复利用。

Linux 内核作为基础

从 Copperfield-2 开发之初,我们就希望利用 Linux 源代码的势头、能力和可用性。随着带有 PowerPC PowerQuicc II 的处理器卡的开发,硬件基础设施已经到位,可以支持强大的嵌入式系统。源代码的可访问性是一个最重要的功能,它使我们能够从遇到的各种情况中恢复,包括电路板布局错误。虽然电路板设计看起来与摩托罗拉参考设计 MPC8620ADS-PCI 相似(该设计不再可用),但一些歧义、硬件限制和其他问题使得内核需要进行更改。

当 TacSat-1 开发开始时,许多经验丰富的资深人士质疑选择 Linux 作为有效载荷控制软件的主机。通常,在 NRL 开发的空间系统中使用了专有的实时操作系统。在架构设计过程中,没有发现硬实时要求,这再次验证了最初为 Copperfield-2 选择 Linux 的决定,因此也适用于 TacSat-1。

除了使 Linux 与我们的硬件正确配合工作所必需的调整之外,只编写了三个设备驱动程序——一个用于支持传感器数据格式;一个用于与 Xilinx SystemAce 接口,这是一个 CompactFlash 接口设备,可用于加载 FPGA,也可用于操作系统存储;另一个在 PowerPC 823 HSI 接口盒上,与 FPGA 通信。由于大型 Xilinx Virtex-II 映射到我们的 PowerPC 处理器的内存空间,因此在 FPGA 设计不断变化的情况下,设备驱动程序开发需要一些创新。Aeronix 的 Don Kremer 开发了一系列实用程序,可以读取 Verilog 源代码文件并创建无数宏、C 代码甚至 HTML 文档,这些文档允许 Verilog 硬件规范基本上编写大部分必要的驱动程序。

COTS 处理器的网络架构

核心 Copperfield-2 有效载荷处理器为任务提供两个关键功能。首先,它是一个传感器系统,接收感测数据、处理数据并与车载通信设备交互,以将结果传输到其他传感器和地面站。其次,它充当通用计算机系统,为存储和数据处理提供基础设施。实际上,多个通用处理器是 Copperfield-2 有效载荷的一部分,每个处理器都通过以太网网络进行通信。COTS 以太网交换机充当星型以太网架构的中心。

表 1. TacSat-1 Copperfield-2 以太网连接的嵌入式系统

组件供应商操作系统处理器
高速接口 (HSI)Bright Star Engineering(定制适配器板)Linux 2.4 定制发行版PowerPC MPC823
IDM UHF 调制解调器Innovative Concepts专有PowerPC 860
Copperfield-2 MR.DIG 卡Aeronix/NRLLinux 2.4 定制发行版 (基于 DENX ELDK)PowerPC PowerQuicc II 8260
射频前端控制器Bright Star Engineering(定制适配器板)Linux 2.4 定制发行版StrongARM SA1110
通往总线遗留设备的网关

为了利用无人机有效载荷的以太网、TCP/IP、基于标准的架构,同时保持与卫星总线遗留 OX.25 接口的兼容性——这些接口提供了一种下行链路科学数据和健康状态遥测的方法——专门设计了一个不同的嵌入式计算机模块来充当桥梁。该模块称为高速接口 (HSI),提供一个 2MB 同步串行总线,连接到航天器通信控制器。HSI 硬件实现为 FPGA 硬件和 BSE ipEngine 通用 PowerPC 823 嵌入式处理器的组合。

在 HSI 中,FPGA 提供满足数据链路定时要求的必要硬件,使处理器与同步数据链路解耦。PowerPC 运行基于 Linux 2.4 的内核,HSI FPGA 接口实现为标准 Linux 设备驱动程序。没有使用特殊的实时扩展,基于 Linux 的应用程序提供了 TCP/IP 网络堆栈(使用标准协议)和设备驱动程序实现之间的接口。HSI 系统允许多个进程和以太网连接的计算机访问发送到航天器的数据流。Copperfield-2 处理器上的 PowerPC 通信控制器可以轻松处理 TacSat-1 上的 HSI 任务。但是,由于硬件的可用性极其有限以及希望增加并行开发机会,因此独立开发了该接口。

使用现有工具快速开发有效载荷软件

在任何卫星项目中,最“定制”的部分通常是有效载荷控制软件。由于许多带有处理器的 Copperfield-2 有效载荷组件运行 Linux,因此有有趣的软件选择可用。许多有效载荷软件都是作为 bash(Bourne again shell)脚本实现的。在有效载荷软件的快速开发过程中,理念是将软件开发分为两个部分:定制软件模块和重用软件模块。这种理念要求将定制代码最小化到具有特定目的的有限功能和程序。有时,我们确实发现现有实用程序不太符合要求,因此对它们进行了修改或编写了替代程序。

这些特定的自定义程序和驱动程序允许通过小型命令行实用程序控制有效载荷元素,这些实用程序可以在其有限的功能中进行完整且轻松的测试。这些程序的开发考虑了 UNIX 命令行功能,以及通过标准输入 (STDIN) 的数据输入和通过标准输出 (STDOUT) 的数据输出。从最早的 UNIX 开发开始,开发具有此类接口的软件实用程序一直是许多遗留操作系统概念的标准。我们打算继续采用该策略并在此基础上进行构建,因为它提供了一种非常灵活的方式,可以使用简单但功能强大的实用程序构建全面的功能。

GNU 和开源实用程序

设计软件架构的第一步是检查开发人员已经可以使用哪些工具——在本例中,是 Linux 发行版的部分以及其他具有明确谱系的 GNU 和开源实用程序,它们提供了所需的功能。一次又一次,当我们开发有效载荷控制软件时,我们对各种命令提供的灵活性和惊人的选项数量感到惊讶。

GNU 压缩实用程序 gzip 就是一个例子。在地面接触事件期间,有效载荷通过一系列软件管道实时传输数据流。它起源于 Flash 文件系统上的一个文件,然后通过各种实用程序(包括压缩阶段)进入卫星总线。我们发现有必要调整 gzip 以选择压缩率/性能曲线,以确保 1MB 下行链路完全填充数据包。插入下行链路流中的 gzip 是一个相对较晚添加的功能,它使我们能够最大限度地利用可用的下行链路带宽。使用 STDIN/STDOUT 接口设计命令行实用程序允许将此类功能透明地集成到数据流中,在我们的计算机系统的性能范围内。

列表 1. 下行链路管道演示 tar、gzip 和 netcat

# Configure the file download pipeline
tar -cf - ${downloadFileList} | gzip -c -l | \
    file_downloader -tqid ${target_qid} -rlp \
                          ${return_link_path} \
                     -dri ${dump_request_id} \
                     -fmt ${dataFormat} | \
    netcat localhost ${!returnLinkService}

有效载荷控制子系统——使用 bash

选择脚本语言是一项艰巨的任务——实际上,在开源社区中,有很多可行的选择。Perl 可能是个不错的选择,但我们对它的安装大小和内存占用不满意。Python 也可能是一个不错的选择,但开发团队没有使用它的经验。功能最强大的 shell 脚本语言似乎是 bash,尽管它在占用空间方面也是最重的。我们最小的嵌入式系统无法处理 bash 的全部占用空间,但 Busybox 轻量级 shell 脚本解释器 ASH 被证明几乎同样能够胜任在那些较小目标上必须监视和控制的任务。

尽管此处的空间不允许对有效载荷控制软件设计进行完整的架构讨论,但其核心软件是一系列 bash 脚本,旨在支持有效载荷的各种功能。该系统旨在利用 POSIX 样式的文件系统安全性。启动时,第一个进程以 root 身份运行,因为系统启动。当有效载荷控制软件开始上线时,它以用户 BOOT 身份启动。系统可以保持在 BOOT 状态,并提供一定数量的关键系统功能,包括提供二进制遥测流、文件传输和直接命令。当传感器任务即将开始时,系统移动到 TRANSITION 状态,所有进一步的数据收集都以 OPS 用户身份进行,OPS 用户具有不同的权限集。在数据收集结束时,命令 OPS 关闭。BOOT 目录的多个冗余副本被设计到系统中,以便在文件系统损坏或其他重大错误的情况下提供备份功能。

bash 脚本启动每个有效载荷控制系统功能。它们创建我们用来跟踪配置、日期和时间以及其他信息的复杂文件名。它们解压缩和解压上传到卫星的命令和文件。命令本身也是 bash 脚本,具有简化的功能。它们调用其他 bash 脚本来执行实际的数据收集或设置更改其他脚本行为的环境变量。

列表 2. 传感器数据处理管道

# Start the data processing pipeline
# (with cpf ignoring SIGINT,SIGTERM)
   eval "cat $dig_data_stream | \
      tee $raw_file | \
      cpf -i -v$cpf_verbosity $cpfparams \
      > $output_file &"
   # Enable the dig channel
   set_hardware 'echo $dig_channel \
     channelEnable ena | mapper 2>&1'

bash 脚本语言、GNU 和开源实用程序以及自定义命令行应用程序的这种组合在卫星项目中是独一无二的。对于 TacSat-1,大多数自定义代码都涉及将数据从 TCP/IP 世界转换为专有的 OX.25 格式以处理传感器数据。

列表 3. 示例数据输出管道,最后一步是在发送数据之前转换为专有数据格式

# Start the pipeline
format_event -severity $severity_level \
             -status $status_code \
     -failcmd $fail_cmd \
                -text "${event_text}"  \
                -debug $debug_level  2>> $logFile \
        | ox25  -tbox  ${tbox}  -tque    ${tque}   \
                -sbox  ${sbox}  -sque    ${sque}   \
                -cflgs ${cflgs} -seq     ${seq}   \
                -func  ${func}  -subfunc ${subfunc} \
                -debug ${debug_level} \
                2>> $logFile  \
        | netcat $ncVerbose localhost ${!returnLinkService} \
                2>> $logFile

分布式开发和协作

TCP/IP 系统的广泛使用和通用的 Linux 操作系统为分布式开发环境提供了独特的机会。在 TacSat-1 的早期,我们的定制 PowerPC 8260 开发硬件的可用性有限。许多有效载荷软件的设计周期从基于 Intel x86 的计算机系统开始,迁移到通用的 PowerPC 嵌入式处理器,最终转移到最终目标。软件设计团队在空间上是分布式的,并通过虚拟专用网络 (VPN) 架构连接在一起。远程电源控制设备允许异地操作的开发人员循环硬件组件的电源。基于 Web 的协作工具允许发布和传播关键的通信和互连控制文档 (ICD)。一些开发人员还使用即时消息技术来保持彼此联系。协作工作环境的最新补充包括使用 E-Log 来维护在线的经验教训数据库。我们还致力于将 Bugzilla 功能集成到系统中,以取代我们相对粗糙的基于消息论坛的问题报告 (PR) 跟踪。

有效载荷数据网络的 TCP/IP 性质允许开发人员在设计过程的每个步骤测试有效载荷元素之间的通信,从在标准 PC 上开发到在插入与总线通信所需的定制硬件之前的最终通信。即使在将有效载荷完全集成到总线中之后,以太网测试端口也允许网络访问卫星,这对于系统的协同调试非常宝贵。测试端口还允许访问大多数有效载荷组件的串行控制台,以及在某些情况下访问 JTAG 或其他硬件调试端口。

有效载荷软件设计团队由经验丰富的卫星和地面站软件专家,以及习惯于 TCP/IP 数据传输和 Web/CGI 应用程序开发的团队成员,以及嵌入式系统专家组成。虽然与典型的卫星软件设计团队截然不同,但这种组合几乎完美地平衡了技能和创新方法,从而最大限度地利用了为飞机应用设计的现有软件。广泛的远程协作、接口测试和网络功能提供了平滑的总线-有效载荷集成。

有效载荷控制软件的核心(包括许多命令和控制脚本)是在不到四个月的时间内完成开发的,从开始到结束。额外的脚本被插入到核心有效载荷控制软件基础设施中,以便在这些传感器可用时启动额外的传感器功能。新的功能和补丁可能会根据需要上传到卫星。

结论

很少有卫星项目像 TacSat-1 计划那样具有赞助商提供的灵活性或承担风险的能力。在这种背景下,TacSat-1 计划允许创新性地利用 GOTS 和 COTS 硬件组件,以及创建有效载荷软件的新颖方法,这些软件提供最大的灵活性和基于标准的操作。Copperfield-2 的模块化特性允许快速的硬件集成,证明了模块化有效载荷的概念,该概念可以从无人机应用扩展到航天器应用,所有这些都使用 Linux 和 GNU 软件作为基础。在撰写本文时,TacSat-1 计划于 2005 年 2 月发射。

致谢

作者感谢 Stuart Nicholson(顾问)以及 SGSS, Inc. 的 Eric Karlin、Mike Steininger 和 Brian Davis 对核心有效载荷控制软件做出的重要贡献。Titan Corp. 的 Brian Micek、Aeronix, Inc. 的 Chris Gembaroski、Don Kremer、Tim Richmeyer 和 Copperfield-2 团队、PTR Group 的 Jeff Angielski 对 Linux 移植、设备驱动程序和传感器支持软件的贡献。此外,还要感谢 Wolfgang Denx 和 Linux PowerPC 社区为使 PowerPC Linux 稳定可靠所做的贡献。

本文的资源: /article/8066

Christopher Huffine 是美国海军研究实验室的电子工程师,为海军空间技术中心工作。自大学以来,他一直在各种平台上使用 Linux,从桌面工作站到嵌入式控制计算机。

加载 Disqus 评论