2012年8月5日星期日

树莓派Raspberry Pi上手报告


背景
关于树莓派的背景介绍在网上已经很多了,在树莓派的官方网站上也有一个长篇大论。这里只是简单的列一下:
1、厄普顿(Eben Epton)在2006年已经意识到要为儿童提供一种廉价的计算机,因为他觉得从2000年之后,报读计算机系的优等生无论从数量上还是技术水平上都一年不如一年(the year-on-year decline in the numbers and skills levels of the A Level students applying to read Computer Science in each academic year,貌似这段是请中国人写的,因为除了中国人之外,想不出哪里的人会用read Computer Science来写报读计算机专业)。而90年代的学生大部分都是有经验的编程爱好者(experienced hobbyist programmers)。
2、厄普顿觉得这样的原因在于:家庭PC机过于昂贵,所以父母不肯给小孩在上面进行一些实验。所以他想做一个廉价的,可以和老式计算机一样,一启动就进入编程环境的计算机。(其实我觉得不是过于昂贵,当年的Apple II和中华学习机也是要几千块一台的,真正原因是PC从极客用品变成了一种日常消费品,父母同样不会让你拿家里的冰箱微波炉拆开做实验的)
后来的故事大家也知道了,由于他成立了树莓派基金运作这个事情,宣称要做一个只有25美金的家用电脑,而且体积和信用卡一样大,可以接电视,可以播高清视频,所以一下子吸引了眼球,以至于订购的人刷爆了他的网站。
订购
淘宝上很早就有了,但是有点贵,我也不想断了人家的财路,也不想在这里帮别人做广告,反正最后我是以35美金加中国的17%的增值税加较高的运费(从上海到广州要40块钱)买到的,到手的价格还算合理。订购后2个星期内到货。
开箱
整块板卡的做工不错,拿在手上确实觉得很小,SD卡的插槽有点粗糙,见照片。
可能为了节省体积,电路板上没有任何可以用来固定的螺丝孔,所以一定要等有人做出专门的外壳或者专门的架子才能固定,树莓派基金承诺今年夏天会推出外壳。电源接口是microUSB而不是miniUSB,和我的C8500的接口一样,个人感觉如果是miniUSB会通用一点。由于只有两个USB口,但是正常使用除了接键盘鼠标外,大部分人还是需要接多一个USB硬盘的,所以需要配合一个USB HUB来使用,而且这种板卡的USB口的驱动能力不会很强的,所以还必须是有源的USB HUB才能接大点的硬盘。
加电
没有插SD卡,加电时除了电源灯之外,不会有任何的反应,HDMI没有任何输出,树莓派的说明书中提到可以通过串口输入命令,但是它的串口是通过那两排GPIO的脚的其中三个脚印引出的,而且是TTL电平的,必须通过驱动芯片才能和PC机的串口连接。
准备SD卡
树莓派的官网提供了三个版本的镜像文件,还有无数第三方的镜像,由于是初次接触,还是用官网的Raspbian版本,因为是基于Debian的,所以Debian的一些命令和配置方法可以用得上。还要下载Win32DiskImager工具,用于在Windows下将下载的IMG文件写入到SD卡中。至于为什么把镜像文件直接拷贝到SD卡中是无效的,一言难尽,就和刻录光碟的ISO镜像要用专门刻录镜像的功能,而不能直接把ISO文件刻录到光碟上的道理是一样的。
在这里下载文件,然后把读卡器和SD卡插入计算机,运行Win32DiskImager,选择镜像文件和合适的盘符,如果原来机器上插有其他的USB硬盘或者SD卡,建议在做这件事之前全部拔掉,避免发生选错盘符,把整个USB硬盘资料全部洗掉的情况。
写入完成后,就可以把SD卡插到树莓派上,把HDMI线、鼠标、键盘、网线全部插上。
首次启动
加电后,如果电源灯旁边的绿色的灯(OK)会闪动,就说明SD卡是可用的。这时如果HDMI连接好电视了,电视上就会开始出现启动画面了。
接着是熟悉的Linux启动界面,企鹅被替换成了树莓:
首次启动将出现系统初始配置的界面,这个界面在也可以在之后的终端窗口中通过sudo raspi-config激活。
由于在初始配置的界面上没有看到有网络配置的选项,所以建议在网络环境中一定要有DHCP,也就是能自动获取IP的网络环境。因为Raspbian的各种软件的安装是需要网络连接支持的。需要用到的功能说明如下:
expand_rootfs - 将根分区扩展到整张SD卡,因为整个Image才400多兆,但是现在的SD卡基本都是几个G的,除非SD卡有其他用途,一般建议选择这项,这样可以有足够多的空间来安装各种程序。
overscan - 可以扩充或者缩小屏幕的设置,除非一启动就发现显示的内容能刚好填满整个电视的画面。大部分情况下是不能填满或者超过,如果这样就要enable这个,然后在系统启动之后,更改config.txt中的overscan_left、overscan_right、overscan_top和overscan_bottom的内容,如果显示内容超出屏幕的范围(显示不全),就要设置这些值为正值,如果是1080p,一般设置为48。如果显示的内容不能填满屏幕,则设置这些值为负值,如果是1080p,一般设置为-48。具体可以更加显示的结果,以16为步长进行调整。
configure_keyboard  - 这个很重要,前面的屏幕选默认值:Generic 105-key (Intl) PC,但在Keyboard layout:时,显示出来的都是English(UK)的,要选择Other,然后在里面选择English(US),否则会出现键盘的一些符号不对或者对调,比如引号”和@符号对调,#号变成英镑符号等等。之后的两个屏幕都选择默认值就可以了,到了:Use Control+Alt+Backspace to terminate the X server? 时,选择Yes,表示用这个可以终止X Server,当整个X-Window死掉的时候可以用。
change_pass - 默认的用户名是pi,密码是raspberry,一般登录时不需要输入,但是用ssh远程连接时要用到这个用户名和密码,这里可以更改密码。
change_locale - 更改语言设置。在Locales to be generated: 中,选择en_US.UTF-8和zh_CN.UTF-8。在Default locale for the system environment:中,选择en_US.UTF-8(等启动完机器,装完中文字体,再改回zh_CN.UTF-8,否则第一次启动会出现方块)。
change_timezone - 更改时区,这个很重要,因为树莓派没有内部时钟,是通过网络获取的时间,如果设错时区,那么时间就不正确了,选择Asia - Shanghai,没错是Shanghai,木有
Beijing,这是Unix的传统。缩写是CST,不知道是China Shanghai Time还是China Standard Time。
memory_split - 按照网上的说法,这个功能有Bug,会导致/boot/start.elf损坏使系统无法启动,所以不要使用这个功能。可以通过拷贝/boot/下的arm128_start.elf、arm192_start.elf、arm224_start.elf覆盖start.elf来实现显存和内存的划分。为了能播放高清1080p的视频,至少要分配64M显存给GPU。所以arm224就不能播放1080p高清视频。
ssh - 是否激活sshd服务,应该选择激活,这是当界面死掉后唯一进入机器的通道(如果Kernel没死的话),可以找另外一部机器,用putty或者其他ssh的工具连接到这部机器上,用pi这个用户登录,至少可以实现安全重启。
boot_behaviour - 设置启动时启动图形界面,正常肯定是Yes。
设置完成后,选择Finish,会提示是否重启,选择Yes。
重启后,将进入LXDE的X-Window环境,反正都是有桌面图标和开始菜单,应该比较容易掌握使用。
让Raspbian支持中文
一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把Locale改成了中文的话,系统是不会自动安装中文字体的,直接的效果是系统的很多信息都用中文显示,但是由于没有安装字体,所以全部变成了方块,所以完全不知道信息的内容是什么, 这个作为系统安装工具我认为是有问题的,因为这样会直接造成系统不可用,基于Debian的Raspbian也有同样的问题。所以如果你在初始设置时,不小心把系统的Locale设置成了zh_CN.UTF-8,当你进入Raspbian的图像界面时,会马上傻眼了,不知道图标、菜单的内容是什么,因为全部是方块。所以建议初始设置时,locale尽量用en_US.UTF-8或者en_GB.UTF-8。启动后,双击桌面那个计算机显示器图标,出现提示符时打入:
sudo apt-get install ttf-wqy-zenhei。
将安装文泉驿的开源中文字体,在这里向文泉驿表示致敬,貌似它是唯一一个开源的中文字体库。郭嘉有钱建孔子学院,但是从来不会有钱搞一套比较完整的开源中文字库出来的。
中文是可以显示啦,输入呢?Linux下早就有啦,叫SCIM(Smart Common Input Method ),所以只要输入:
sudo apt-get install scim-pinyin
就会安装拼音输入法,安装完成后,可以直接打入scim激活,下次启动是会自动启动的。快捷键也是Ctrl+空格。或者直接点击右下角图标选择。
接着运行:
sudo raspi-config
然后选择change_locale,在Default locale for the system environment:中选择zh_CN.UTF-8。然后重启机器,就发现整个环境变成中文的了。
视频播放
标准Raspbian版本中支持树莓派的GPU的播放器好像只有omxplayer,是个命令行程序,没有界面的,也不能拖动。它有很多参数,最常用的是-o,选项有local和hdmi,表示声音输出到audio out还是hdmi,omxplayer后面跟着要播放的文件名称,不支持wmv,不支持外置字幕。打开终端窗口,出现提示符后输入:
omxplayer -o hdmi 文件名
也可以先用cd命令,将当前路径改变到文件所在的目录,文件名就不需要绝对路径了。其实大家会觉得命令行输入非常麻烦,但只要用Tab键进行命令补齐,用ls列出当前目录的文件,再配合鼠标选择文字,然后按中键(就是按下滚轮)进行连动的复制粘贴,即使没有资源管理器也会发现目录操作可以很快速的。
由于一般媒体文件都是放置在外置的硬盘中,所以这时需要将硬盘接入到USB口上,系统默认会在/media目录下创建和硬盘卷标一样的目录,并将USB硬盘挂接上去,之后就可以访问了。
测试的结果大部分用X.264编码的1080p视频都可以正常流畅播放。唯一一部无法播放的是:[魔术师和兔子].Pixar.Short.Presto.1080p.BluRay.x264.mkv。
这是《变形金刚3》的播放效果:
omxplayer的快捷键如下:

Key
Action
1
加速
2
减速
j
上一条音轨
k
下一条音轨
i
上一节
o
下一节
n
上一条字幕轨
m
下一条字幕轨
s
显示/不显示字幕
q
退出
空格或 p
暂停/继续
-
减小音量
+
增加音量
 后退30
前进30
后退600
前进600
浏览器
鬼佬在测试他们的浏览器时,经常都是打开几个英文网站,然后就观察一下载入网页的速度、内存占用情况,然后马上就宣称他们的浏览器在什么平台上运行非常平滑,内存占用有特别少,等等,我们先来看一下几个浏览器是怎么说他们自己的:
  1. Midori(日语“绿”的意思)- Midori is a web browser that aims to be lightweight and fast.(浏览器“绿”的目标是轻量级和速度快)
  2. NetSurf - Small as a mouse, fast as a cheetah and available for free.(象老鼠一样小,象猎豹一样快速,免费)。
  3. Uzbl - web interface tools which adhere to the unix philosophy(坚持unix哲学的万维网界面工具)。
他们没有想到在神秘的东方,有一些不可思议的网站在等着他们。如:新浪新闻的首页。我曾经拿iPhone4和高端的安卓机去访问,基本都是会卡死在那里。实际测试流量的结果,打开整个新浪首页耗费的流量大约在1MByte到2Mbyte,这还是当年Flash视频没那么流行的时候。反正上面的这几个浏览器,在树莓派上,打开新浪新闻首页,肯定整个界面就会卡死一段时间,等全部页面下完了,拉动起来也非常吃力。
我突然想到了Chrome,搜索了一下,发现Chrome的开源版本Chromium也给port到了Raspbian上了,安装的方法如下:
打开终端窗口,出现提示符后,打入:
wget http://goo.gl/go5yx -O install.sh
成功后,打入:
chmod a+x install.sh
然后,输入(注意一定要加上前面的”点斜杆”):
./install.sh
就开始下载和安装一些必要的包,还有下载整个Chrome并安装,整个过程速度飞快,难道功夫网对Linux格外开恩?安装完成后,直接打入(&让它在背景运行):
chrome -disable-ipv6 &
就可以看到熟悉的Chrome界面了:
在进行魔鬼测试前,我先做了一点点优化,不像其他浏览器,Chrome是一定要有磁盘缓存的,不能关闭的,在正常情况下,这不是什么大问题,因为磁盘的速度远高于网速,但是现在我们用的是SD卡,例如我的class 6的卡,读取速度就是6Mbps,比很多ADSL都慢,所以缓存在这种情况下成为瓶颈,但是它的内部设计有是必须有缓存的,网上有些说法是把缓存的size改成1K,相当于disable掉它。但是缓存对提升速度还是有帮助的,我的做法是用USB硬盘做缓存,启动时打入下列的命令:
chrome -disable-ipv6 --disk-cache-dir=USB硬盘的某个目录 &
好,魔鬼测试开始,开新浪新闻:
整个载入时间花了可能接近一分钟,但是载入的过程中是可以拉动网页的,载入后也可以上下拉动,其他浏览器是几乎死掉了。网页下载的过程中,CPU的占用一直是满的,但是下载完后,CPU的占用就基本很小了。
我还是太傻太天真了,以为新浪新闻就是魔鬼测试了,哪知道还有个更大的魔鬼在后面,那就是新浪微博:
注意右下角的CPU占有率,微博在下载完页面后,还是保持基满的CPU占用率。这时整个浏览器拉动起来很费劲了,而且任何一个操作,比如点开图片都要等很久。用224的内存分配,情况好一点,但是基本没办法做到可用。原因应该是新浪微博用了大量的Javascript。
但是整体上来说,Chrome还是表现最佳。如果有人能用专业的测试工具测一下这几个浏览器的表现,看看瓶颈在哪里就好了。
接下来玩什么
1、超频(overclocking)
玩家型的CPU都是支持超频的,通过更改/boog/config.txt中的下列参数可以实现超频:

Option
Description
arm_freq
frequency of ARM in MHz. Default 700.
gpu_freq
Sets core_freq, h264_freq, isp_freq, v3d_freq together.
core_freq
frequency of GPU processor core in MHz. It have an impact on ARM performance since it drives L2 cache. Default 250.
h264_freq
frequency of hardware video block in MHz. Default 250.
isp_freq
frequency of image sensor pipeline block in MHz. Default 250.
v3d_freq
frequency of 3D block in MHz. Default 250.
sdram_freq
frequency of SDRAM in MHz. Default 400.
over_voltage
ARM/GPU core voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram
Sets over_voltage_sdram_c, over_voltage_sdram_i, over_voltage_sdram_p together
over_voltage_sdram_c
SDRAM controller voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram_i
SDRAM I/O voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]
over_voltage_sdram_p
SDRAM phy voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]
如何组合参照下表(注意:如果设置了over_voltage,质保就会失效,但是SD卡在你手上它怎么知道你设了?)

arm_freq
gpu_freq
core_freq
h264_freq
isp_freq
v3d_freq
sdram_freq
over_voltage
over_voltage_sdram
750
255
450
900
250
500
900
275
500
900
450
450
930
350
500
1000
500
450
6
1000
500
500
6
但是本人没有玩过,会不会发生冒烟、地震、火山爆发或61年一遇的洪水等情况,就不得而知了。
2、Razdroid
实际上就是 Android 4.0  (Ice Cream Sandwich) for Raspberry Pi。根据这个帖子,安卓4.0已经在树莓派上跑起来了,很快就会发布了。这是我非常期待的一个东西,之后就有大量的应用程序可以用了,但是我还是对性能上的表现十分担心,毕竟现在很多手机都是1G以上的CPU和1G内存了。
3、XBian
XBMC是Linux的媒体中心版,XBian就是XBMC和Raspbian结合的产物,作为播放器应用,这个也应该更加方便,支持的文件格式应该更多,尤其是能支持外置字幕。等我新买的SD卡到货后,就会马上刷这个试试。
4、外壳
现在网上已经有很多外壳的3D模型,用3D打印应该就可以打出来了,但是价格会非常昂贵,我询问了一下大概一个外壳要300块左右,如果有人能开模做出个低价的外壳出来就好了。
总结
很好玩的一块板,作为家庭的播放器和下载机应该是没什么问题的,普通的上网浏览也是可以胜任的,如果opera能port到上面来,用服务器端进行渲染,应该访问复杂的页面也是可以的。由于所有的系统文件和虚拟内存(SWAP)全部都是在SD卡上,所以SD卡的速度对性能可能会有很大影响,等换一块高速卡对比一下再看。我觉得在上面做应用应该采用专门系统的方式,很难一个系统解决所有问题,比如做一个系统是专门打游戏的、一个专门优化后进行上网的、一个进行视频播放的,一个专门拿来做编程学习的,然后通过换不同SD卡的方式实现不同的功能,和以前的红白机一样。
可以在新浪微博上关注我 @googol4u二世 ,我会不定期发布一些其他的测试结果。