Pocket C.H.I.P. in 2022
Blockcity (@A5dblk) 在他的博客里介绍了 Pocket C.H.I.P. (以及内含的CHIP单板)这个有意思的开源硬件,让我也有了入一台玩玩的想法,于是海鲜市场上以$20的超低价格入了一台。
硬件
配置就不用赘述了,1Ghz armv7l 全志 R8 SoC (就是A13 rebrand) + 512MB RAM + 4GB 存储,跟十余年前的初代 Android 手机差不多。
电池续航其实还可以;这块480*272的触屏LED素质一般,尺寸对我来说还是小了点;键盘的手感确实阴间,不过暂时没另买3D打印前面板。
玩机体验
拿到手后第一件事是刷机。本来想单独开个Ubuntu VM的,后来还是用了这个脚本。
默认系统是Debian jessie。NTC跑路之后他们的apt repo也down了,所以需要用JFPossibilities的第三方源。觉得jessie太老当然可以更新到stretch/buster或更高;我看的是这个教程,一次成功(只更到了stretch,怕更到buster之后搞坏home键,虽然也有写workaround)。
自带的launcher(PocketHome)功能很有限,所以我用了这个fork,支持显示时间(CHIP似乎不带硬件时钟导致只能靠网络NTP同步时间)等信息,自定义壁纸和添加应用图标。
当然肯定不是只能用PocketHome;PocketCHIP实际上自带一个xfce4,然而并不好用,比如很多时候窗口大到直接溢出到屏幕外面(实在受不了可以参考下面写的workaround),调DPI也没用。后来不知怎地把xfce4搞坏了,就装了个i3尝鲜 - 稍微用了用发现还挺喜欢i3这种简洁明了的tiling wm,然而本来tiling在小屏幕上已经够难受,i3繁多的快捷键加上PocketCHIP阴间的键盘…… 两个组合键还好,三个组合键直接去世…… 所以目前主要还是在用PocketHome。
想在PocketHome和其他DE/WM之间切换?用这个。不想直接启动到PocketHome?去禁用 LightDM 的自动登录:在 /etc/lightdm/lightdm.conf
中注释掉 autologin-user=
一行。
所以可以做些啥?
当初入这玩意还真不是拿来玩游戏的;其实本意是想发掘一下这玩意的潜能然后拿来做半个学习机。
电子书?
装的是KOReader. 坑点还不少,研究了几天才安装成功:
如果系统更新到了stretch或更高,可能会出现:
1
2
3ffi.load (warning): /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0: undefined symbol: wl_egl_window_destroy
SDL2 not loaded: ./setupkoenv.lua:27: Not able to load dynamic library: libSDL2-2.0.so.0
./luajit: frontend/device.lua:45: Could not find hardware abstraction for this platform. If you are trying to run the emulator, please ensure SDL is installed.则需要通过
dpkg
安装 jfp 源里的这个包手动降级 SDL2 (libsdl2-2.0
);参考这个 Reddit 帖子。建议顺便sudo apt-mark hold libsdl2-2.0
一下确保这个包不自动更新。需要注意的是这样一来可能会有依赖问题:libsdl2-images 依赖最新 libsdl2,而ahoy (就是充当PocketCHIP新手指南的那个幻灯片程序) 依赖 libsdl2-images;一般情况下直接卸载这两个包即可。
如果发现窗口尺寸远大于屏幕,需要使用
wmctrl + xdotool
手动调整窗口大小。这里送上我的launcher script:1
2
3
4
5
koreader &
sleep 3
id=$(xdotool search --any --name koreader | head -n 1)
wmctrl -ir $id -e 0,0,0,480,272此法也可以推广到其他窗口溢出屏幕的软件上,但对有些窗口大小固定的软件就无能为力,比如
gelemental
。比较新的KOReader版本会报glibc错误(比如2021.12);一个亲测可用的版本是2019.12.
词典?
词典一直以来都是用的 Aard2(其实就是馋那些丰富的.slob格式的词典);但是发现 aard2-web 无法在CHIP上(用surf)正常浏览,可能还是全志R8的性能太垃圾了吧。itkach 给的另一个轻量前端 slobby 也无法正常运行,只能寻求别的方案。误打误撞发现了 DICT 这个远古协议和 dictd,先凑合用一用。
关于这玩意的资料比较少,只有这么一篇07年的史前教程,而且可供选择的词典也很少(甚至没有英汉),还行的也就只有 GCIDE 和 WordNet 了 (包名分别叫 dict-gcide
和 dict-wn
)。尝试用 pyglossary 转码 slob 格式词典到 dict 格式发现 HTML不能正常渲染(直接挂出裸HTML),只能拿这俩先用用了。前端就比较多,既可以用命令行的 dict
, 也可以像我一样用 xfce4-dict
(或者 gnome-dictionary
)。
后来发现KOReader自带词典功能,所以……
图形计算器/CAS?
一直以来心目中最好的桌面端图形计算器应用就是 GeoGebra。在 CHIP 上成功运行Classic 6的那个树莓派版package,体验却很差 - 界面尺寸勉强凑合但巨卡,光是与UI交互就非常费劲。
至于CAS…… Sage 体积太大装不下, Khicas 不知为何没有提供 armhf 架构的 .deb 包(却有armel的),Maxima 能运行但有bug (比如用不了plot2d等命令,似乎没装上帮助文件导致帮助不可用等等)。
只能寻找替代品。之前玩图形计算器时就听说过 NumWorks 这个基于 STM32 的开源玩意,而官方又开源了它的系统Epsilon,就想去装(编译)个这玩意的模拟器(当然Epsilon在v16之后锁bootloader等等的一系列骚操作可以说冲击了图形计算器社区,具体可以看TI-Planet上的这篇文章, 所以我装的实际上是这个fork)。
一开始是编译出了一个js模拟器,但发现CHIP上就没浏览器(firefox用不了)可以正常打开,后来才知道是因为能在CHIP上稳定运行的浏览器基本都是Webkit-based,而Webkit又不支持WASM。之后开始研究编译原生binary,一点点的摸索,从x86到aarch64再到armhf,花了两天时间终于(在CHIP上)编译出了一个armhf 平台的模拟器binary。其中有几点特别坑:
对于 ARM 架构,直接编译则
ion/src/simulator/shared/collect_registers_x86_64.o
会报错。参考 这个issue 里的解决方案:将下面这个代码复制到(或者用来替换)
ion/src/simulator/shared/collect_registers.cpp
:1
2
3
4
5
6
7
8
9
10
namespace Ion {
__attribute__((noinline))uintptr_t collectRegisters(jmp_buf buf) {
setjmp(buf);
int dummy;
return (uintptr_t)&dummy;
}
}- 在
ion/src/simulator/linux/Makefile
里删除collect_registers_x86_64.s
一行。
- 在
此法的副作用是不能正常使用内建(Micro)Python功能,运行脚本可能会 segfault。不过既然可以直接用 Linux 下的 Python,要什么自行车呢?
如果出现:
1
2
3RASTER kandinsky/fonts/SmallFontExtended.cpp
Error: Expecting a packed glyph width of 7 but got 8 instead
kandinsky/Makefile:84: recipe for target 'output/release/simulator/linux/kandinsky/fonts/SmallFontExtended.cpp'需要删掉
kandinsky/font/rasterizer.c
的127和133两行(以ENSURE
开头的那两行)。除了README里提的那些依赖,还需要 libwebp 和 libfreetype 两个包。Debian源里分别叫
libwebp-dev
和libfreetype6-dev
。
尝试给binary(编译时)加上一些第三方应用失败了,导致用不了NumWorks版的Khicas。最后CAS只能暂时用 eigenmath 代替;虽然功能简单到在CAS里就是一个玩具,但目前是够用了。
开源掌机?
上面提到本意不是拿来玩游戏,目前也就玩玩PICO-8。自带的是0.1.9,有人编译了最新的0.2.4。
Blockcity 那篇博文里也提到了可以编译 RetroArch,目前还没试。有人写了一个游戏/模拟器安装器(当然因为NTC的服务器早down了所以目前不可用),里面有Doom(似乎有屏幕的地方就有Doom和Bad Apple),Quake III,DosBox和RetroArch等等的安装脚本,甚至有 Minecraft: Pi Edition 的 port。
什么也不想做?
用 tty-clock
和一支笔,把CHIP支在桌上当一个时钟也不错。当然,前提是得联网,除非塞一个时钟模块进去。
总结
日新月异,沧海桑田,PocketCHIP落后的配置(其实跟Pi Zero似乎差不了多少)甚至已经带不动各类现代网页,而随着NTC的破产倒闭也就变为了限量版的爱好者向开源硬件。当然,也许总有人能发掘出让一切淘汰垃圾硬件发光发热的办法。
2022年了,(Pocket) C.H.I.P. 也许终将被遗忘在历史垃圾堆,但当个portable pure-Linux terminal玩玩还是挺好的。