Alpha架构常见问题(FAQ)

From Gentoo Wiki
< Alpha
Jump to:navigation Jump to:search
This page is a translated version of the page Alpha/FAQ and the translation is 100% complete.
Other languages:
English • ‎italiano • ‎polski • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어


本文试图回答与 Gentoo/Alpha 和 Linux/Alpha 相关的一般性常见问题。

简介

本文涵盖了关于 Gentoo/Alpha 和 Alpha/Linux 相关的最经常遇到的相关问题。本文的目标受众包括新手和具有经验的用户。

关于 Gentoo/Alpha 项目

Gentoo/Alpha 是什么?

Gentoo/Alpha 项目负责保持 Alpha 平台上 Gentoo 发行版的更新。该项目主要包括系统关键包、可移植软件,并制作全新的发行版。Gentoo/Alpha 项目同时为桌面系统和服务器提供可用环境。

Alpha 体系架构

Alpha 架构已死?

从某种意义上而言,答案是肯定的。 HP公司自从2007年4月27日起停止采购新的Alpha系统,并于2008年4月25日起停止了Alpha机型的销售和升级服务。可以参考如下链接获得更多细节:planning page

我能在Alpha平台上运行 32位应用程序吗?

不行。所有的 Alpha 系统使用纯64位内核以及纯64位的用户区。即使你使用-m32 编译器标识强制 gcc 输出32位代码,也做不到这一点。

Alpha 系统使用高位优先编码还是低位优先编码体系?

Alpha系统使用低位优先编码体系。在一些巨型机克雷系统上的Alpha系统使用高位优先编码,但是 Linux 从未支持过它。

能在 Alpha 系统上运行Linux/x86 应用程序吗?

不行。除非你使用某种 x86 模拟器,比如 qemu。过去某个时期 DEC/Compaq/HP 曾经提供过一个称作 em86 的程序,允许 Linux/x86 应用程序运行在 Linux/Alpha 系统上。 但是,该程序是封闭源代码的,并且不再提供更新。因此现在已经没有可用的em86 二进制文件与 gcc-3 的二进制接口兼容。

那我们在 Alpha 上安装 Gentoo 有何意义?

不可否认,您可以找到更快的64位系统,比如说 amd64。但是这并不意味着 Alpha 系统就毫无用处了。下面列出了你可能希望在某些 Alpha 硬件上安装 Linux 系统的一些理由:

  • 你可能想发掘某些旧计算机的用处。旧的 Alpha 系统可以充当很棒的路由器和服务器。他们的桌面系统的性能也不见得非常差。
  • 你可能想学习那些不常见的计算机硬件。
  • 这件事情非常酷。有多少人敢说他们曾经在 Alpha 机器上运行过 Linux?

哪儿能买到 Alpha 硬件?

一般情况下在市面上已经找不到 Alpha 架构的硬件。如果运费不太高的话,eBay 是个不错的选择。通过 Google 也可以找到不少二手设备经销商,当然一般情况下大多数都相对比较昂贵。

硬件

打开 AlphaServer 机箱之后,它不能启动,该怎么办?

请确保机箱的顶部面板打开并在正确的位置上。机箱顶部面板的中间有个朝下的小金属片。当顶部面板放在了合适位置时,该金属片会把一个开关压住。如果这个开关没有压住,系统就不会启动。

Alpha 系统特定的编译器标记

推荐使用 Alpha 系统特定的编译器标记吗?

就像使用其他编译器优化一样,应该遵循适度把握的原则。小心而正确的使用这些编译器标记,可以实现稳定的系统、提高系统速度;但是鲁莽而不加辨别地使用这些编译器标记,则很有可能造成系统崩溃。如果对某个标记心存疑虑,就不要使用。如果想获得这些标记更多的说明,请参考 gcc 的man page。

如何为特定指令集的优化制订规划模型?

可以通过 -mcpu=XXX来制订特定指令集的优化模型,这里 XXX 是指 cpu 型号。合法的 cpu 型号包括 ev4, ev45, ev5, ev56, pca56, ev6ev67。如果不指定 -mcpu=XXX 标记,那么 gcc 将会使用编译它本身时所在机器的 cpu 型号。 -mcpu= 等同于 x86 平台上的 -march= 标记。

Note
AlphaServer 800 用户应该将 cpu 型号设置为 ev5。 一个已知存在的与 Xorg 相关的特定问题是,如果设置成 ev56 ,将会导致整个系统锁死。

在不改变指令集的情况下,如何制订优化模型列表?

可以通过使用 -mtune=XXX 来达成不改变指令集制定优化模型列表的目的,这里 XXX 是你的 cpu 型号。合法的 cpu 型号包括 ev4, ev45, ev5, ev56, pca56, ev6ev67-mcpu= 标记中隐含了 -mtune= 标记,因此如果你设置了 -mcpu= 标记,那么就无需再次设置这个标记。 -mtune= 等同于 x86 平台的 -mcpu= 标记。

如何启用软件协助浮点数据处理功能?

可以通过 -mieee 来启用软件协助浮点数据处理功能。这将启用软件来正确地处理非规范的数字和诸如 not-a-number 和正/负无穷大等 IEEE 规定的异常值。

除非你能够确定自己正在做什么,以上标记都应该在你的全局 CFLAGS 中设置。

如何指定系统的内存延迟?

可以通过指定 -mmemory-latency=XXX 来实现内存延迟,这里 XXX 是(延迟的)时钟周期数。这个标记设置了系统调度程序在引用内存时假定的延迟时间。gcc有个预定义的"typical" 值也可用作设置 -mmemory-latency=XXX,这些值包括: 用于 Dcache 的L1,用于 Scache 的L2,用于Bcache 的 L3,以及用于主内存的 main

这些标记可能不能在全局的 CFLAGS 中设置,因为该值的设置高度依赖于你所编译的程序的内存访问模式。

那些需要放置在小型数据区域(small data area)的静态数据,具体应该如何设置?

可以通过 -msmall-data 标记来设置那些需要放置在小型数据区域(small data area)的静态数据。 这样可以让 gcc 利用 Alpha 架构将频繁使用的数据存储在名为小型数据段中的特性。该段大小限制为 64KiB ,意味着访问存储其中的数据仅需一条指令。

-fPIC 标记能够覆盖 -msmall-data 标记,因此如果你想利用 -msmall-data 所提供特性的话,请使用-fpic 标记替代-fPIC 标记。

-msmall-data 可能不能用在全局的 CFLAGS 中,因为可能有某些对象要求大于 65KiB 的内存,这样将会导致 gp_overflow 错误。

那些需要放在小型代码区域(small text area)的对象代码,具体应该如何设置?

可以通过 -msmall-text 标记进行设置。这将使得 gcc 假定整个程序 (或库)控制在 4MB 之内,并且可以通过一个分支指令就可到达。这样可以将某个功能调用所需的指令数目从 4 降到 1。

这个标记可能不能用在全局的 CFLAGS 段中,因为某些程序(或库)可能大于 4MB,否则将会导致一个 ld 错误。

如果这些编译标记导致某个编译错误、连接错误或者运行时错误,该怎么处理?

请慎重使用这些 CFLAGS 标记。它们可能会导致你的系崩溃。如果遇到了问题,请尝试在 #bugs 之前使用更为保守的 CFLAGS 标记。

Alpha 系统启动和系统引导程序

SRM 是什么?

SRM 基于 Alpha 控制台子系统规格,为 OpenVMS, Tru64 UNIX, 和 Linux 等操作系统提供了操作环境。参考 SRM Howto 获取关于SRM 的更多信息。

ARC 是什么?

ARC 基于高级精简指令集计算机计算规格 (ARC) ,为 Windows NT 提供了操作环境。

如何获知我的 Alpha 使用的固件是 ARC 还是 SRM ?

如果系统基于 SRM,那么开机时会看见屏幕上为蓝底白字。如果系统基于 ARC,那么将会出现图形启动界面。

应该使用哪种引导程序?

如果你的 Alpha 系统支持 SRM,那么应该使用 aboot。如果你的系统对 SRM 和 各类ARCs(ARC, AlphaBIOS, ARCSBIOS)都支持,那你应该按照the SRM Firmware Howto的指导来切换到 SRM,然后使用 aboot。如果你的系统仅仅支持 ARCs (如Ruffian, xl 等等),那么应该选择 milo。

aboot 引导程序能够从 EXT4, XFS, ReiserFS, 或者 JFS 分区启动内核吗?

不行。aboot 仅仅支持从文件系统为 ext2ext3 的分区启动内核。不过你还是可以在 root 分区使用其他文件系统,只需要创建一个使用 ext2 或者 ext3 文件系统的 /boot 分区即可。

对 ext4 的支持已列入计划。实际上,目前已经有部分支持ReiserFS, XFS, 和 ext4 的补丁在网络上流传了。

软件

Gentoo/Alpha 对 Java 的支持怎样?

Compaq/HP 公司曾经提供了名为 compaq-jrecompaq-jdk 的二进制包用于支持 Java。但是他们已经停止了所有支持,而2006年10月11日已经从 Gentoo 移除了这些包。从那时开始,我们就不再支持 Java 了。

将会开展支持 Java 的相关工作吗?

在 Alpha 平台上可能通过 icedtea 实现对 Java 的支持,但是我们没有将其列入计划,主要是因为如此将带来数以百计额外软件包测试工作的巨大维护成本。

Gentoo/Alpha 中对 .NET 的支持怎样?

.NET的两个主要开源成果 monoDotGNU,均不支持 alpha 体系架构。

支持 .NET 需要哪些条件?

将 .NET 引入 Alpha 平台并非易事。这需要对 JIT (即时)编译器的所有相关汇编代码进行重新编码,并对架构特定的功能(比如寄存器分配器等等)进行重新编码。

Alpha Linux 内核

我应该使用哪个内核源代码?

推荐使用 gentoo-sources ,但 vanilla-sources 同样为 Gentoo/Alpha 所支持。 你应该阅读 Gentoo Kernel Guide 来确定哪一个能够更好地满足你的需求。

我的系统使用 kernel-2.6 时崩溃了,能够改用一个 2.4 版本的系统吗?

Gentoo/Alpha 于2008年1月停止了对 2.4 版内核和配置文件的支持。技术上来说,你可以编译一个 2.4 版本的 Gentoo 系统(目录树中还有该版内核),但是你得亲自屏蔽掉所有仅用于 2.6版本的软件包,并且无法获得开发团队的支持。

Gentoo/Alpha 项目组将会仔细审查那些不能正常工作在 2.6 版本系统下的问题报告,尽最大努力解决这些问题。

支持加固的代码吗?

简单的回答是不支持。一段时间前我们支持过,但是我们失去了硬件和维护机制,所以现在不再支持了。如果你有兴趣继续这些基础性工作,请告诉我们。

2.6 版本的内核支持 Alpha SMP 吗?

有一段时间它不稳定。但是,据了解现在的内核版本工作得很好。

支持 Gentoo/Alpha 项目

如何报告 bugs?

如果你发现了某个 bug 或者想发送补丁给我们,那么您应该编制一个 bug 报告。这只需要占用你很少的时间,我们衷心感谢你的帮助。 可以按照Gentoo Bug Reporting Guide 来操作。

我能够如何为 Gentoo/Alpha 项目提供帮助?

用户可以通过以下方式帮助我们:

  • 编制简洁明了的 #bugs 报告。
  • 测试那些还没有 ~alpha 关键字的软件。
  • mailing lists, forum 和 IRC 频道回答问题。
  • 发送补丁
  • 成为一个 AT

是否存在一个 Alpha Arch 测试员 项目?

是的,有一个。请参考 Gentoo Linux Alpha Arch Testers Project 获得详细信息。

故障排除

为何 Xorg 锁住我的 Alpha?

一般情况下是由于不恰当的 -mcpu 设置造成的。例如,AlphaServer 800 就需要采用ev5 进行编译,以保持对 xorg and glibc 的兼容性。如果不这样做,将会导致不希望出现的结果。

更多资源

为何没有 Gentoo on Alpha 论坛?

Gentoo Forums 中有一些特定平台的讨论区,如 Gentoo on PPCGentoo on Sparc。没有专门为 Gentoo on Alpha 设置论坛的原因仅仅是因为没有足够的活动需要批准建立这么一个论坛。所有与 Alpha 相关的帖子,可以在 Gentoo on Alternative Architectures 讨论区找到。

哪里可以获取有关 Gentoo/ Alpha 的更多帮助或信息?

对于本文中不能找到答案的问题,你可以试试以下资源链接Alpha Handbook 或者 our project homepage。你也可以通过 irc.freenode.net 上的 #gentoo-alpha , Gentoo on Alternative Architectures Forum, 以及通过 gentoo-alpha@lists.gentoo.org 邮件列表询问我们 。

何处可以获取有关 Alpha / Linux 的更多帮助或信息?

AlphaLinux.org 是一个关于 Alpha/Linux 的中心知识库。


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Thomas Cort, Brian Evans, nightmorph, Matt Turner
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.