Pocket C.H.I.P. in 2022

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)。

ssh截的一张neofetch

自带的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= 一行。

PocketHome

Xfce4

所以可以做些啥?

当初入这玩意还真不是拿来玩游戏的;其实本意是想发掘一下这玩意的潜能然后拿来做半个学习机。

电子书?

装的是KOReader. 坑点还不少,研究了几天才安装成功:

  1. 如果系统更新到了stretch或更高,可能会出现:

    1
    2
    3
    ffi.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;一般情况下直接卸载这两个包即可。

  2. 如果发现窗口尺寸远大于屏幕,需要使用 wmctrl + xdotool 手动调整窗口大小。这里送上我的launcher script:

    1
    2
    3
    4
    5
    #!/bin/bash
    koreader &
    sleep 3
    id=$(xdotool search --any --name koreader | head -n 1)
    wmctrl -ir $id -e 0,0,0,480,272

    此法也可以推广到其他窗口溢出屏幕的软件上,但对有些窗口大小固定的软件就无能为力,比如gelemental

  3. 比较新的KOReader版本会报glibc错误(比如2021.12);一个亲测可用的版本是2019.12.

词典?

词典一直以来都是用的 Aard2(其实就是馋那些丰富的.slob格式的词典);但是发现 aard2-web 无法在CHIP上(用surf)正常浏览,可能还是全志R8的性能太垃圾了吧。itkach 给的另一个轻量前端 slobby 也无法正常运行,只能寻求别的方案。误打误撞发现了 DICT 这个远古协议和 dictd,先凑合用一用。

关于这玩意的资料比较少,只有这么一篇07年的史前教程,而且可供选择的词典也很少(甚至没有英汉),还行的也就只有 GCIDE 和 WordNet 了 (包名分别叫 dict-gcidedict-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。其中有几点特别坑:

  1. 对于 ARM 架构,直接编译则 ion/src/simulator/shared/collect_registers_x86_64.o会报错。参考 这个issue 里的解决方案:

    1. 将下面这个代码复制到(或者用来替换)ion/src/simulator/shared/collect_registers.cpp

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      #include <ion.h>
      #include <setjmp.h>

      namespace Ion {
      __attribute__((noinline))uintptr_t collectRegisters(jmp_buf buf) {
      setjmp(buf);
      int dummy;
      return (uintptr_t)&dummy;
      }
      }
      1. ion/src/simulator/linux/Makefile里删除 collect_registers_x86_64.s一行。

    此法的副作用是不能正常使用内建(Micro)Python功能,运行脚本可能会 segfault。不过既然可以直接用 Linux 下的 Python,要什么自行车呢?

  2. 如果出现:

    1
    2
    3
    RASTER  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开头的那两行)。

  3. 除了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玩玩还是挺好的。