我第一次听说树莓派时,并没有对它产生任何兴趣,因为对我来说这并不是一款新产品。在更早之前,我玩过 arm11 的开发板(S3C6410 系列),虽然和树莓派还是有区别的,比如体积更大、没有 HDMI 接口、自带触摸屏、价钱比树莓派稍贵等等,但我当时认为没有本质的不同,甚至性能和性价比上也不相上下。更重要的是,因为用户体验差和工作的原因,我的那块开发板在最初折腾几天后我就很少再用了,并且在两年前卖掉了。因此我对 arm 开发板的印象并不好,所以在之后的时间,我也没有关注树莓派的更新换代。
我的那个 arm 开发板长这样,另外上边有块触摸屏。
几年之后,我又突然对树莓派感兴趣。我慢慢发现我当时的想法错了,因为那个错误的想法,我一直和本可以吸引我兴趣的树莓派失之交臂。
树莓派的定位并不是一块用来做嵌入式开发的开发板,而是一个廉价并且高性价比的可以在一定程度取代 PC 并且硬件接口更丰富的软件开发和使用平台。有人可能会问,树莓派有 GPIO 接口,可以接很多硬件,怎么会是一个软件开发平台呢?那么我要问你 PC 有 USB 接口,可以接很多硬件,它是一个硬件开发平台吗?树莓派的 GPIO 接口,和 PC 的 USB 接口,没有本质的区别,都是用来连接硬件的,只是接口更底层一些。
那么这样看,我之前用的 arm11 开发板,是否也是软件开发平台呢?答案是否定的,这要看目标用户。我们可以把目标用户简单分为三类:硬件开发者、软件开发者和使用者。硬件开发者主要是设计、改良硬件和为新老硬件编写驱动程序等等,软件开发者主要是在现有的硬件下开发软件(通常不包括驱动程序),使用者使用现有硬件和软件而不进行开发。
我之前使用的 arm11 开发板,主要的目标用户是硬件开发者和软件开发者(可以不严谨地统称为嵌入式开发者),几乎没有使用者,因为对于没有开发经验的人,用户体验是很差的。而树莓派的主要目标用户是软件开发者(和嵌入式开发者有重叠但并不多)和使用者,用户体验很好,但几乎没有硬件开发者,因为树莓派的硬件相对比较封闭,不销售单独的 SoC 和其他芯片,硬件资料也并不是很完善,在硬件层面很难 DIY(对很底层的软件开发者也存在类似的问题)。
那么目标用户的不同,就导致树莓派虽然看起来很像其他的 arm 开发板,基本也能用和其他的 arm 开发板一样的方式使用,性质却有很大的不同。
这也解释了为什么很多嵌入式行业的软硬件开发者并不喜欢或者看好树莓派,甚至对它很不屑,而很多对嵌入式了解很少的开发者以及使用者会对树莓派趋之若鹜。
那么我为什么会对树莓派感兴趣,而对之前那块 arm 开发板无感呢?最主要的问题并不是用户体验差,而是软件方面的配套环境不完善。最重要的是 Linux 内核版本支持。官方只提供低版本的 Linux 内核(2.6 系列),如果用这个内核来配合最新的发行版使用,几乎是不可能的,会遇到许多问题,一方面是这个内核缺少很多最新发行版使用的特性,另一方面是很多硬件方面的支持不只是替换内核文件和内核模块的事情(比如有些工具也需要移植),替换起来也麻烦。如果想使用更新版本的内核,需要打各种补丁以及自行修改代码,虽然硬件的资料比较齐全,理论上可以实现,但即使是经验丰富的嵌入式开发者也很难搞定,也没有人做好了提供给别人使用。这就导致几乎只能使用官方提高的老旧 Linux 镜像(或者其他古老版本的发行版)。而这个 Linux 环境几乎毫无用户体验可言,最新版本的软件很难安装上(几乎都需要自己编译,而且容易出现编译错误),常见的 USB 外设(比如摄像头、无线网卡、蓝牙)也很难驱动起来(运气好的话,可以从其他地方找来驱动代码,修复很可能出现的编译错误)。
而树莓派的软件环境是很好的,基本可以使用最新的 Linux 内核和发行版(比如 Archlinux),并且有很多人为这个平台开发软件,用户体验有质的提升。即使是对嵌入式开发一窍不通的开发者或者使用者,也可以用树莓派做他们想做的事情。
另外我发现一个有趣的事情,折腾树莓派的人群(至少在国内),和(曾经的) Linux 桌面用户群体很相似(我曾经混迹于 Linux 桌面用户社区,很多人折腾桌面美化、系统配置、工具优化、写小脚本等等,玩 Linux 而不是用 Linux),他们主要是使用者,可能稍微会一些脚本或者其他编程语言,但并没有独立开发完整应用程序的能力和意向。这和嵌入式开发者人群是很不同的。
综上,树莓派和其他 arm 开发板的本质区别在于目标用户不同。树莓派的目标用户主要是软件开发者和使用者,而其他 arm 开发板的主要用户是硬件开发者和软件开发者。这也是树莓派能够吸引更多用户的一个重要原因。