树莓派的初探

树莓派

树莓派(Raspberry Pi),是一款基于 Linux 的单板机电脑。它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件促进学校的基本计算机科学教育。

它使用的是基于 ARM 架构的博通芯片,和现在大多数智能路由器选用的硬件大体相当,不过最新款的树莓派3 Model B 则使用了 ARM 64 位的处理器,性能上已经能够超越路由器好多了。

购入

其实当时考虑的是想给我们家的梯子提个速,顺带看看有没有什么其他能玩的小东西,反正也不贵,所以就去马云家选购了一套 Respberry 3 Model B。

回来简单拼了一下,感觉还挺好看的,满满的极客塑料感……

由于树莓派的硬盘实际上就是个 MicroSD 卡,考虑到性能原因,官方推荐使用 Class 10 的卡,所以我又在奶茶东购入了一张 32G 的卡,如果说单纯装一个 Linux 的话,32G 足够了。

前前后后算下来,这一套机器花了300软妹币左右吧,综合考虑下来,性价比还是挺高的。

ROM

官方推荐的是一个名为 Respbian 的 Linux 系统,这还算是个挺完备的系统,有图形化界面,各项功能驱动都挺齐全。不过对于我这种压根就没有想把它当电脑用的人来说,图形化界面有点多余。看了下其他支持 ARM 的 OS,还有 Ubuntu 和 CentOS。我对 Ubuntu 向来就没有什么感觉,可能就是因为 apt-getyum 敲起来麻烦。所以只剩下 CentOS 了。

PS:其实支持树莓派的系统还有一些,甚至 Windows 10 的物联网版也是支持的,不过我真想不出来用 Windows 除了玩游戏还能干啥?

装系统

到 CentOS 的官网,扒到一篇 wiki,还专门介绍如何在树莓派上装 CentOS。不过……貌似只有32位的系统,64位那里写着我们熟悉的 Coming Soon

唉,无所谓了,按照它的 Quick Start,我们找到它的 32bit image 下载地址,下载下来。

接下来,如果按照 wiki 上描述的步骤,看起来需要用到 XZ Utils 来搞,通过 wiki 上提供的命令将 CentOS 的镜像写入到卡上,还挺简单:

1
$ dd if=CentOS-Userland-7-armv7hl-Minimal-RaspberryPi3.img of=/dev/mmcblk0 bs=8192; sync

如果你没有 Linux 系统,可以到 Windows 上下载一个名为 Win32DiskImager 的软件(看来有时候 Windows 还是能做一些有用的事情的)。先解压下载的压缩包,然后通过图形化界面把 CentOS 的镜像写入到卡上。

尽管官方介绍说,1.2A 的电源就可以,但是为了正常稳定使用,还是建议使用 2.5A 的电源,因为一旦火力全开,挂上各种传感器,整个电力需求还是蛮大的。

把写好的卡插进机器,连接上有线网络(因为一开始 Wi-Fi 还没有安装驱动),链接上电源启动机器,大概 5s 就会启动好了,完后可能就需要去路由器里面看分配的 IP 多少,通过 IP 登录到机器上(Windows 下需要个软件,其他系统直接以 root 用户 SSH 就好了,密码就是 centos)。

另外有网友提到,内存卡写入系统后被重新分区,导致很大一部分空闲分区浪费,需要输入如下命令将空闲分区重新分配:

1
2
$ touch /.rootfs-repartition
$ systemctl reboot

另外需要提一点,因为 CentOS 默认没有安装 Wi-Fi 的相关模块,如果说想要使用 Wi-Fi 功能的话,需要执行以下两行命令:

1
curl --location https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.bin > /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin
1
curl --location https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.txt > /usr/lib/firmware/brcm/brcmfmac43430-sdio.txt

完成后重启系统。

看下系统信息

登录上来后,第一件事就想看看硬件信息以确定我买的是不是正品(多年以来和 JS 斗争养成的习惯)。

首先看看 CPU:

1
$ lscpu

结果出乎我的意料:

1
2
3
4
5
6
7
8
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
座: 1
型号名称: ARMv7 Processor rev 4 (v7l)

大哥,说好的 ARM64 呢?怎么变成 ARMv7l 了?

又看了眼 cpuinfo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
processor : 0
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 1
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 2
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 3
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
Hardware : BCM2835
Revision : a22082
Serial : 00000000a9898d83

奇怪,最后的 Hardware 竟然变成了树莓派一代的 SoC,不过下面的 Revision 则是三代 B 的系列号。

去网上搜搜,看到一个网友提到了这样一段话。

可能是因为为了兼容旧版本的软件和操作系统,在树莓派3上依然使用了 ARMv7 的32位指令集,即使芯片支持 ARMv8 指令集,但由于考虑到兼容性,现在还没有推出64位的系统和软件来运行,所以固件依然保留32位。

所以说,很有可能是因为 CentOS 目前并没有推出64位的系统,而目前32位的系统则是简单使用了之前的内核。

综合来看,有 Wi-Fi 有蓝牙,系统里面也有树莓派3的各种痕迹,单纯从 CPU 的信息来判定感觉有些太片面。所以就先凑合着吧,记得最初我的第一台笔记本也是用了多年32位的 Windows。

安装一些软件

没了图形化界面,命令行界面必须要好看啊,zsh 和 oh-my-zsh 是必备的,这个简单,直接 yum 加上官方安装方式,几行命令就搞定。

其次,htop,这个漂亮的任务管理器还是平时比较喜欢使用的工具之一,因为有时候通过这个工具能够一眼看到很多进程系统信息。不过目前貌似没有 ARM 版本的二进制直接提供使用,只能尝试通过源码本地编译来安装。可能是因为没有适配的原因吧,在树莓派上使用时不时会崩溃。

kcptun,这个工具是我买树莓派的最初目的,虽说家里智能路由器也是各种性能不错,但是一旦上 kcptun 后,经常就会 CPU 打满,最终被系统杀掉进程。所以最初的打算就是外挂一个树莓派专门跑 kcptun,能够保证性能。最后的结果是,开了4线程来跑,树莓派的系统负荷依然很低。现在就先不细说了,过段时间可以单独说一下这个工具。

未来的使用计划

买完这家伙后,工作上就开始各种忙了,紧接着就是过年,过完年后又忙着杂七杂八的事情,一直到这段时间才有空过来看看这个被遗忘的家伙。

因为单一跑个 kcptun 实在是有点浪费,本来打算搭建个服务,上几个传感器为我监控家里面的温度湿度空气质量啥的,后来发现小米的米家里面都有,还比自己买便宜,而且有个米家的 app 也省得自己搭建服务了,索性就放弃了这个想法。这段时间又看到可以利用树莓派把米家的设备桥接到 iOS 里面的 HomeKit 上,所以准备抽空把这个捣鼓下。

当然了,如果性能还充足,我准备用 Rails 建个服务,跑一些自动化任务或者简单的家庭网络管理后台,这样配合 DDNS 就能在外面掌控家里的情况了,虽说 Ruby 可能会有一些性能上的问题,但是这点小的任务加上对树莓派硬件的大致了解来看,问题应该不大。