25 June 2012

2.29 号下单的 RaspBerry PI (以下简称 RPI) 终于在 5.30 号到了,何等漫长的等待阿… 闲话少说,使用了快一个月,列举一下 RPI 的数宗罪

外壳

RPI 只提供裸版,各路豪杰都在给 RPI DIY 外壳,但是这个外壳确实不是一件容易的事情,Dell 的服务器部门有超过一半的科研经费花在机箱内部布局以及供电和散热上。RPI 的供电和散热都没有,而供电和散热,却又是 RPI 最严重的问题,后面会抱怨更多跟供电和散热有关的问题。由于没有外壳,在给 RPI 拔插设备的时候,就很难下手,只能按住接地的部分操作,而且上面突出的针脚又很多,稍不小心就会碰到某些阵脚,导致重启/死机/无法启动等问题。回去买一桶乐高积木,搭一个外壳出来试试。

Bootloader

RPI 由于没有集成存储芯片(节约成本),所以靠 SD 卡引导,但是支持众多型号的 SD 卡不是一件容易的事情。芯片中只提供了几百字节的 GPU 代码空间,用于从 SD 卡中加载 bootloader,所以就有一些型号的 SD 卡无法使用。但这还不是最严重的问题,当 RPI 无法启动的时候,就不得不排查很多问题,供电,SD卡,显示。普通的硬件产品,例如家用电脑,路由器,手机,都是有内部存储的,系统从内部存储引导,引导出错会给出出错信息用于排查错误。RPI 直接从外设引导,出问题排查时会有些麻烦,要尝试各种不同的电源,各种不同型号的 SD 卡,刷写不同的系统到 SD 卡上。

CPU

RPI 的 CPU 标称 700 MHz ARM11,没有接触过 ARM 的可能不知道这个是什么概念,我们做一个简单的对比:

  • 2003 年主流配置,赛扬 1.7G,256MB 内存,编译内核:5~10 分钟

  • RPI,700 MHz ARM11,256MB 内存,编译内核:6 小时

RPI 刚出来的几天,众多 Geek 的 RPI 都在忙于编译内核,直到有人研究出来如何 CrossCompile,才把 RPI 从编译内核的苦海中解救出来

RTC

RTC (Real-time clock) 是所有桌面/手持设备必备的部件,用于在系统启动的时候告诉系统当前时间。缺少 RTC 的系统在启动后无法获取当前时间,关机重启后系统时间就清零,给使用带来众多不便,虽然能够通过 NTP 启动后自动获取时间,但是没有网络的环境就悲剧了 (Model A 是不带以太网口的)。时间是系统中很重要的部分,很多服务都依赖时间,比如 802.1X,WPA2-enterprise,HTTPS,总之,需要使用证书认证的部分都将无法工作。RPI 不包含 RTC 的主要原因就是其成本太高了,需要 RTC 芯片以及一块在断电后仍能供电的电池,大概需要 3~5 刀 (RPI Model A $25)。

USB

RPI 的 USB 是问题最严重的部分了,为了配合 RPI 的低功耗,板载的两个 USB 端口的输出功率被限制在 140mA 以下,就是说几乎全部的读卡器/外接硬盘/无线网卡都将无法使用。即使你的电源再牛逼,也无法把功率送到 USB 口。当然,没有 Geek 解决不了的问题,各路神仙都出现,自己 mod USB 供电电路。最简单的方法就是 直接短接 USB 电流限制部分 。不过还有新问题,USB 是支持 HotPlug 的,当插入一个新 USB 设备的时候,会有很大的瞬间电流,而 RPI 的供电电路只有一个电容做缓冲,一旦这个电流超过此电容整流能力,会导致核心电压下降,结果就是导致重启。于是又有 Geek mod 了给一个 USB 供电的电容。道路真是坎坷阿,估计下个版本这些问题都会修正。

温度感应器

现在基本所有的家用 PC 内部都有数个温度感应器,分布在 CPU/GPU/电源/硬盘等重要部位。Intel CPU 内部的温度感应器甚至可以控制 CPU 运行频率,在温度低的时候如果有突发任务,可以短时间超频处理,超频幅度达到 3~4 倍(看我20倍界王拳,迷)。RPI 虽然功率很小,但是其芯片也非常小,热量有可能散发不出去,右边是某人给 CPU 和 Ethernet 芯片加了散热器。没有温度感应器,在芯片过热的情况下,可能会直接导致死机。RPI 论坛上已经有不少人在抱怨 RPI 无故死机的问题。

结论

RPI 终归是个 Geek 的玩具,在 RPI 上面你会碰到各种各样没有遇到过的硬件问题,RPI 离产品化距离相当遥远。不过 RPI 的出现,应该能够推动低功耗,低成本家用设备的普及。StackOverflow 竟然开了 RPI 专版 ,我被雷到了。虽然 RPI 有这么多的缺点,但是 $35 买个玩具还是很值的。