第二起跑线(一)——中英对照:一个 ubuntu 用户的愤怒

本文讲述的是一块主板在富士康和 Linux 用户之间引发的恩怨。这段故事在简体中文世界流传并不广泛,故作此“第二起跑线”专题,跟大家讲述一些在鲜为人知的角落发生的鲜为人知的事实。




A possible bug in Foxconn boards BIOS affects Linux ACPI
富士康主板的疑似问题 BIOS 影响了 Linux ACPI 功能

Update: I just got off the phone with Foxconn, they called me from China (1 AM in Indiana, heh) and were asking if I would test an improved version of their BIOS based partially on the modifications I've made to mine, hopefully this all blows over, and regardless of who's fault it is or isn't, we can just go back to using our computers with full functionality.
进展:我刚刚接了富士康从中国打来的电话(印第安纳州当地时间凌晨 1 点,呵呵)。他们问我是否愿意测试一下改进版的 BIOS(部分根据我的修改而来)。希望这次事件就此平息,不管是与不是谁的责任,我们终于能够全功能地享受自己的电脑了。

Thanks to the community for helping me get the message to Foxconn.
感谢社区(译注:应该指的是英文 ubuntu 社区),帮我将信息传递给富士康。

Edit: Please tell Foxconn what you think of their behavior:


You need to put in an email, and then it will bring up a form, choose Complain/Suggest.
需要输入 email 地址,然后你会收到一份表格,选投诉/建议。



Edit: Welcome Digg, Reddit, and Slashdot.
更新:欢迎到 Digg,Reddit 和 Slashdot 上来讨论此事。


Who is Foxconn and why must we get the message to them?

I've heard a lot of people ask, "Who the hell is Foxconn", if you use a PC, there's a good chance you have one of their boards, even if it's branded as MSI or some other brand, if you use a Nintendo Wii, XBOX 360, or Playstation 3, Foxconn made that motherboard, this isn't some little dodgy hardware maker with no name that we can afford to be quiet about.
很多人问我“富士康是 TM 谁呀”,如果你有 PC,那么很有可能你的主板就是富士康产的,无论这块主板贴的是微星还是其他什么牌子。如果你有任天堂 Wii,有 XBOX 360 或者 Playstation 3,那么它们的主板也是富士康产的。这不是个我们可以忽略不计的虾米山寨厂。
I have disassembled my BIOS to have a look around, and while I won't post all the results here, I'll tell you what I did find.
我反编译我的 BIOS 看了看,不全把结果贴在这,我也能告诉你我发现了什么。

They have several different tables, a group for Windws XP and Vista, a group for 2000, a group for NT, Me, 95, 98, etc. that just errors out, and one for LINUX.
他们有不同的(译注:DSDT)表,一套是给 Windows XP 和 Vista 准备的,一套给 2000,一套给 NT、Me、95、98 等,以及唯一有问题的一套,给 Linux 的。

The one for Linux points to a badly written table that does not correspond to the board's ACPI implementation, causing weird kernel errors, strange system freezing, no suspend or hibernate, and other problems, using my modifications below, I've gotten it down to just crashing on the next reboot after having suspended, the horrible thing about disassembling any program is that you have no commenting, so it's hard to tell which does what, but I'll be damned if I'm going to buy a copy of Vista just to get the crashing caused by Foxconn's BIOS to stop, I am not going to be terrorized.
这套给 Linux 的烂表不符合主板的 ACPI 实现,导致了诡异的内核错误,奇怪的系统死锁,无法挂起(suspend)或休眠(hibernate)和其他问题。通过下面的修改,我已经解决了挂起之后重启崩溃的问题。反编译任何程序的恐怖之处在于得不到任何注释,所以很难分辨哪段代码具体是什么作用。但是富士康的烂 BIOS 不能逼我去买套 Vista 来解决问题,这吓不倒我。
How to fix:

Edit: Complained to the Federal Trade Commission


458 E. Lambert Road Fullerton
Fullerton, CA


Company sold me a computer motherboard, model G33M-S, claiming that it was compliant with ACPI versions 1.0, 2.0, and 3.0.
富士康公司出售给我的型号为 G33M-S 的电脑主板,声称兼容 ACPI 1.0、2.0 和 3.0。

Linux and FreeBSD do not work with this motherboard due to it's ACPI configuration, using a disassembler program, I have found that it detects Linux specifically and points it to bad DSDT tables, thereby corrupting it's hardware support, changing this and setting the system to override the BIOS ACPI DSDT tables with a customized version that passes the Windows versions to Linux gives Linux ACPI support stated on the box, I am complaining because I feel this violates an anti-trust provision in the Microsoft settlement, I further believe that Microsoft is giving Foxconn incentives to cripple their motherboards if you try to boot to a non-Windows OS.
Linux 和 FreeBSD 因其 ACPI 配置而无法工作。通过使用反编译工具,我发现它会特别侦测 Linux,将其指向一套有问题的 DSDT 表,并因此使其硬件支持失效。如果稍加修改,设置系统使用修改后的版本,让 Linux 获得跟 Windows 同样的 BIOS ACPI DSDT 表,Linux 的 ACPI 支持问题全无。我认为这触犯了微软和解协议(译注:关于 Microsoft settlement,笔者认为指的是 2002 年微软公司与美国司法部和九个州就反垄断案达成的和解协议)中的反拖拉斯条款。我更有理由相信,为了让主板在非 Windows 平台上出现问题,微软对富士康进行了奖励。

We have received your complaint.

Thank you for contacting the FTC. Your complaint has been entered into Consumer Sentinel, a secure online database available to thousands of civil and criminal law enforcement agencies worldwide. Your reference number is:
感谢致函公平交易委员会。您的投诉已经被录入 Consumer Sentinel,一套向全世界人民和执法机构公开的安全的在线数据库系统。您的投诉编号为:

Edit: Full correspondence with Foxconn
(译注:后文中 Me、Ryan 都指原作者,Foxconn 指富士康,因多次出现,后文不再一一对译)


ACPI issues, cannot reboot after having used suspend
ACPI 问题,挂起(suspend)之后无法重启。

Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 70, should be 69 [20070126]

I get these messages in my system log at boot, I also fail to reboot after having used suspend in a session, it hangs and plays a continued beep on the PC speaker.
启动时系统日志如上。一次冷启动(译注:此为笔者理解的 session)之中挂起之后也无法重启,机器死锁,扬声器长鸣。


Dear Ryan:

Do you get the same beep codes if you were to remove all RAM out and then turn the system ON again?


No, because then I wouldn't be able to boot into Linux, suspend to RAM, to get the ACPI failure, have syslogd pollute my /var/log/messages file with it, or read about it in my system log.
呃,挂起到内存(suspend to RAM)的话,拆掉内存条就无法启动到 Linux 了啊,syslogd 也没机会写 /var/log/messages,更不用说读到 ACPI 错误以及其他任何系统日志。

In particular, the number of quirks that the kernel has to use, and this invalid checksum are what has me nervous.

If you need me to attach the full contents of /var/log/messages, I can do so.
如果需要完整的 /var/log/messages,我可以奉上。


Dear Ryan:

This board was never certified for Linux. It is only certified for Vista. See URL below. So please test under Vista. Does this issue also occured under Vista or Winxp?
本主板仅通过 Vista 认证而非 Linux 认证(链接如下)。所以请使用 Vista 进行测试。问题是否同样存在于 Vista 或者 WinXP?



Well, this is a replacement for a dead Intel board (a 945g that fully supported ACPI), Vista was never really up for consideration, and I'm not about to go buy a copy to find out.
好吧,买这板子是因为之前一块 Intel 板子(带完整 ACPI 支持的 945G)坏了,Vista 从来不在考虑之列,我也不准备买一套来试试。

The ACPI specs are there for a reason, and broken BIOS's like what is in this motherboard are the reason standard ACPI does not work, I've taken the liberty of filing the report in kernel.org, Red Hat, and Canonical's Ubuntu bug tracking systems, and posting the contents of my kernel error log on my blog, which is in the first several results if you Google search "Foxconn G33M" or "Foxconn G33M-s", "Foxconn Linux", etc, as well as prominently in other search formats, so hopefully this will save other people from a bad purchase, and hopefully kernel.org can work around your broken BIOS in 2.6.26, as I understand that kernel is more forgiving of poorly written BIOSes built for Windows.
符合 ACPI 规范是我购买此主板的原因,但是貌似 BIOS 有问题导致标准 ACPI 失效。恕我已向 kernel.org、Red Hat 和 Canonical 的 Ubuntu 报告了此问题,并将内核日志贴在了博客上,这些页面在用 Google 搜“Foxconn G33M”、“Foxconn G33M-s”、“Foxconn Linux”以及其他可能的关键字组合的时候都排在前几项。但愿这样能够提醒那些持币待购的人。也但愿 kernel.org 能够在 2.6.26 版内核避开你们的问题 BIOS。据我所知,对于仅对 Windows 写的烂 BIOS,内核还是很宽容的。

I've already gotten several dozen hits on those pages, so you guys are only hurting yourselves in the long run, by using bad BIOS ROMs, as people like me are quite vocal when dealing with a bad product.
这些页面已经吸引了一定点击量。所以,对于你们来说,长远来看,提供有问题的 BIOS 只是在伤害自己。因为像我这样的人面对烂产品的时候嘴从来不闲着。


Dear Ryan,

Making idle treats is not going to solve anything.

As already stated this model has not been certified under Linux nor supported.
如前所述,此型号主板既不支持,也未经过任何 Linux 认证。

As you are unhappy with the product- using a non-support operating system nor certified, please contact your reseller for a refund.


Yeah, well, I allege that you guys thoroughly suck.

Learn how to write a BIOS before you go selling hardware with falsified specs.
好好学学怎么写 BIOS 吧,不要净卖一些假装符合规范的硬件。


I've been debugging your AMI BIOS, and the ACPI support on it is far from within compliance with the standards, I've dumped out the debugging data into Canonical's Launchpad bug tracking system so that we may be able to support some sort of a workaround for the bad ACPI tables in your BIOS, I would hope that you will be part of the solution instead of the problem, alienating customers and telling them to go buy a copy of Windows Vista is not service, your product claims to be ACPI compliant and is not, therefore you are falsely advertising it with features it isn't capable of.
我在调试你们的 AMI BIOS,其中 ACPI 支持部分距离遵守标准还远着呢。我已经将调试数据提交到 Canonical 的 Launchpad Bug跟踪系统,以便于人们能想办法避开你们 BIOS 里面那些有问题的 ACPI 表。我很希望你们能够参与到其中来,提供解决办法而不是问题本身。疏远客户,告诉他们去买套 Windows Vista 不是服务。你们的产品声称 ACPI 兼容但实际上不是,因此你们已经涉嫌虚假广告。

I would ask that you issue an update that doesn't make it dependent upon Windows Hardware Error Architecture, but that decision is up to you.
我希望您发布一个不依赖于 Windows 硬件错误体系(译注:WHEA,详见此处)的(译注:BIOS)更新版本出来。但是决定权在您手上。

Please find all relevant data here:

Bug #251338 in Ubuntu: “Bad ACPI support on Foxconn G33M/G33M-S motherboards with AMI BIOS”

I appreciate your consideration in this matter.



Dear Ryan,

You are incorrect in that the motherboard is not ACPI complaint. If it were not, then it would not have received Microsoft Certification for WHQL.
您认为这块主板不兼容 ACPI 是不对的。如果它不兼容 ACPI,那么它不会通过微软的 WHQL 认证。

Refer to:

As already stated, this model has not been certified under Linux nor supported.
如前所述,此型号主板既不支持,也未通过任何 Linux 认证。

It has been marketed as a Microsoft Certified Motherboard for their operating systems.


I've found separate DSDT tables that the BIOS hands to Linux specifically, changing it to point to the DSDT tables Vista gets fixes all Linux issues with this board.
我找到了你们 BIOS 里面特别指定给 Linux 的 DSDT 表。把这个表改成特别指定给 Vista 的就能解决之前 Linux 下的所有问题。

So while I accept that you've gotten some kind of Microsoft Certification (doesn't surprise me), that does not make your board ACPI capable, just that Windows is better at coping with glitches custom tailored to it, for this purpose.
所以,尽管我同意(也不诧异)你们取得了某种微软认证,但是这并不能说明你们的主板兼容 ACPI,而只是 Windows 更长于应对那些微软量身认证的诡异之处而已。


Dear Ryan,

Stop sending us these!!!


Your BIOS is actually pretty shoddy, I've taken the liberty of posting everything that's wrong with the DSDT lookup tables and how to fix some of it so the community that has already purchased your filth can make do with it, also, it's now pretty much impossible to google Foxconn and Linux in the same sentence without getting hit by the truth, that your boards aren't good enough to handle it.
你们的 BIOS 确实非常次。恕我已将所有 DSDT 查询表的谬误以及一些补救办法公开,这样已经购买了你们产品的人才不至于束手无策。而且,现在同时搜 Foxconn 和 Linux 的话,不看到这些真相已经很难很难——你们的主板不够行。

Have a very nice day.


Dear Ryan,

Surely this is the way to ask for us to attempt to fix something that is not supported in the first place.


Would it be so difficult? I mean really? I suppose you've never heard of building a happy customer base vs. just angering everyone that deals with your products to the point they make sure others don't make the mistake of buying them.

You know, I have several computers, and they all support any OS I want to put there, as well they should, if you can't fix the damaged BIOS you put there intentionally, can you at least put a big thing on the site that says no LInux support so people won't make the mistake of buying your stuff?
要知道,我有好几台电脑。它们全都支持、且应该支持任何我想要的操作系统。如果你不能修复你刻意制造的问题 BIOS,你能否至少能在网站上写清楚“不支持 Linux”几个大字,这样人们就不会再因类似错误而买你们的东西?

Your DSDT table looks like it was written by a first year computer science student, it is scary, I will not just shut up and go away until I feel like I've been done right, this can end up on Digg, Slashdot, filed with the FTC that you are passing bad ACPI data on to Linux specifically.
你们的 DSDT 表看上去就像个一年级计算机本科生的作品。这太恐怖了。只要我认为我做的没错,我不会就这样安静的走开,这件事会出现在 Digg 上,Slashdot 上,以及公平交易委员会(FTC)的投诉里——你们在刻意给 Linux 传递有问题的 ACPI 数据。

I saw you targeting Linux with an intentionally broken ACPI table, you also have one for NT and ME, a separate one for newer NT variants like 2000, XP, Vista, and 2003/2008 Server, I'm sure that if you actually wrote to Intel ACPI specs instead of whatever quirks you can get away with for 8 versions of Windows and then go to the trouble of giving a botched table to Linux (How much *is* Microsoft paying you?) it would end up working a lot better, but I have this idea you don't want it to.
我知道,你们给 Linux 故意准备了一套有问题的 ACPI 表。你们同时另有一套给 NT 和 ME,一套给更新一点的 NT 家族,像 2000、XP、Vista 以及 2003/2008 Server。我敢肯定,如果你们真的按照 Intel ACPI 规范写代码,而不是什么乱七八糟手段都用上来迎合 8 个不同版本的 Windows 却丢给 Linux 一个烂表(微软了你多少钱?),结果会好很多很多。但是我感觉到你们不想这么做。

Last edited by TheAlmightyCthulhu; July 26th, 2008 at 12:55 PM.

(译注:这篇帖子在 ubuntu 英文论坛上得到了413 位用户的感谢,ubuntu 论坛的这个感谢系统挺有创意)