立创 CPSOe_Terminal:基于F1C100s/F1C200s与机械键盘的便携式Linux终端DIY全记录
立创 CPSOe_Terminal:基于F1C100s/F1C200s与机械键盘的便携式Linux终端DIY全记录
最近看到不少朋友对便携式Linux终端感兴趣,想自己动手做一个既能敲代码又有复古情怀的设备。正好,我之前用全志的F1C100s/F1C200s芯片,搭配一块定制的64键机械键盘,做了一个叫CPSOe_Terminal的小玩意儿。它不仅能跑完整的Debian系统,还能用LVGL做图形界面,算是一个集成度比较高的嵌入式综合项目。
今天,我就把这个项目的完整过程,从硬件设计到软件烧录,掰开揉碎了讲给你听。无论你是想复刻一个,还是想学习如何从零搭建一个嵌入式Linux系统,这篇记录都能给你提供一条清晰的路径。咱们不搞虚的,直接上干货。
1. 项目整体思路与硬件选型
这个项目的核心目标很明确:用一颗性价比高的国产芯片,驱动一块LCD屏幕,再配上一块手感好的键盘,做成一个能揣进口袋的Linux终端。
1.1 为什么选F1C100s/F1C200s?
首先得说说主控芯片。我选择了全志的F1C100s或F1C200s。这两款芯片可以看作是“孪生兄弟”,ARM9内核,主频跑个几百兆赫兹,用来跑一个轻量级的Linux系统(比如Debian)完全够用。最关键的是,它内置了内存(RAM),对于做这种小型设备来说,可以省掉一颗外置的DDR芯片,大大简化了PCB设计和焊接难度,成本也降下来了。对于DIY项目,简化就是王道。
1.2 系统的两大组成部分
整个项目可以清晰地分为两大块:
- 硬件部分:包括承载所有芯片和接口的“主板”,以及负责输入的“机械键盘”。
- 软件部分:就是跑在主板上的那一套系统,包括启动引导程序(U-Boot)、Linux内核、以及最终的Debian操作系统。
硬件是身体,软件是灵魂,两者都得搞定。下面,咱们就先从硬件的“身体”开始看起。
2. 硬件设计与版本迭代
硬件设计不是一蹴而就的,我这个项目也经历了从V1到V2的版本迭代,每一次改动都是为了更好用、更集成。
2.1 主板设计:从V1到V2的进化
V1版本:模块化设计,上手友好最初的思路是求稳、求简单。V1主板采用了模块化设计:
- 核心:直接使用了现成的“荔枝派Nano”核心板。这相当于别人已经把最复杂的芯片和内存部分做好了,我们只需要把它像插积木一样焊在主板上就行,大大降低了焊接门槛。
- Wi-Fi:使用了常见的ESP-12F模块(也就是ESP8266)。
- 电源:外接了一个独立的锂电池充电管理模块。
优点:焊接非常简单,基本上有把烙铁就能搞定,非常适合新手验证想法。缺点:集成度低,体积不好控制,外观上会显得比较“堆叠”。
注意:如果你使用V1方案,需要将荔枝派Nano核心板和ESP-12F模块上自带的Flash存储芯片拆掉,因为我们主板上有自己设计的Flash电路。
V2版本:高度集成,挑战升级有了V1的经验,V2版本的目标就是做“一体化”。
- 核心:不再使用核心板,而是直接把F1C100s/F1C200s芯片、SPI Flash、DDR内存等所有器件都设计在了一块主板上。
- 新增功能:加入了实时时钟(RTC)芯片,这样系统断电后时间也能继续走。
- 电源管理:充电管理电路也集成到了主板上。
优点:集成度高,体积可以做得更小巧、更规整,性能也更稳定。挑战:焊接难度飙升!F1C200s这类QFN封装的芯片,引脚在芯片底部,必须使用热风枪和锡膏进行焊接,对动手能力要求较高。
两个版本共用的关键部件:
- 电池:都使用505573规格的3.7V锂电池。这个型号代表了电池的尺寸(厚度5.0mm,宽度57mm,长度73mm),是比较常见的尺寸,容易购买。
- 外壳:V1和V2的外壳不兼容!因为主板布局和尺寸变了。打印外壳时,建议使用PLA或者ABS这类硬度较高的材料,保证结构强度。
下面是V2版本的组装效果图,可以看到所有芯片都集成在了一块板子上,非常紧凑: (此处原图展示了V2主板正反面的焊接效果,芯片布局规整,焊接点饱满)
2.2 键盘设计:打造专属输入体验
键盘是这台终端的灵魂,手感必须到位。我设计了一块64键的非标准直列(Ortholinear)机械键盘PCB。
- 主控:使用了经典的ATmega32U4-AU芯片。这颗芯片最大的好处是原生支持USB,可以被系统直接识别为USB键盘设备,无需额外驱动。而且它的封装(TQFP)引脚在四周,用烙铁细心点是可以手工焊接的。
- 轴体:支持标准的Cherry MX轴体(或兼容的五脚轴),你可以自由选择青轴、红轴等。
- 一个遗憾:由于PCB空间限制,空格键位没有预留安装“卫星轴”的孔位。卫星轴是用来稳定长按键(如空格、回车)手感,防止它晃动的。没有它,空格键手感可能会有点松垮,算是为了整体尺寸做的一个妥协。
焊接注意事项:
- 二极管方向:每个键位都需要焊接一个二极管来实现“无冲”功能。二极管有正负极(阴极通常用一条色环标记),焊接时方向必须一致,否则键盘无法正常工作。
- 外壳与键帽:项目的附件里提供了外壳和键帽的3D打印文件(.stl格式)。键帽是无刻印的,建议用光固化树脂打印,细节更好。你可以在网上购买键盘贴纸或者定制贴纸贴上去。
3. 软件栈搭建:让硬件“活”过来
硬件组装好只是完成了第一步,接下来要让系统跑起来。这套软件方案对V1和V2主板是通用的。
3.1 键盘固件:让电脑认识你的键盘
新焊接好的键盘PCB,里面的ATmega32U4芯片是“空”的,需要给它刷入固件程序。
1. 生成固件我使用的是开源的QMK固件。你可以访问 Keyboard Firmware Builder 这个在线工具。
- 根据我提供的键盘原理图,在网页上设置好按键矩阵(哪个按键对应哪两个引脚)。
- 配置完成后,工具会为你生成一个
.hex格式的固件文件。我也已经把生成好的cpsoe64keyboard.hex文件上传到了项目附件中,你可以直接使用。
2. 烧录固件你需要用到QMK官方提供的烧录工具qmk_toolbox。
- 下载:可以通过国内的加速网站下载,例如
https://ghproxy.com/https://github.com/qmk/qmk_toolbox/releases/download/0.2.2/qmk_toolbox_install.exe(版本可能更新,请以项目描述为准)。 - 操作:
- 打开QMK Toolbox,在右上角选择芯片型号为
ATmega32U4。 - 点击“Open”按钮,选择刚才下载或生成的
.hex固件文件。 - 用USB线连接你的键盘PCB到电脑。
- 点击 “Auto Flash”,此时工具会等待键盘进入烧录模式。对于全新的ATmega32U4,通常需要短接PCB上的“RESET”测试点(或按复位键)来触发。一旦检测到设备,烧录会自动开始。
- 烧录完成后,拔掉USB线再重新插入,电脑就应该能识别出一个新的键盘设备了。
- 打开QMK Toolbox,在右上角选择芯片型号为
3.2 主板系统:构建完整的Linux
这是最核心的部分,我们需要在TF卡上制作一个可以启动的Linux系统。
准备工作:
- 一张容量≥4G的TF卡。
- 一台Linux操作系统的电脑(可以是虚拟机)。因为很多操作命令在Linux下最方便。
制作步骤:
第一步:分区将TF卡插入电脑,假设它在系统中被识别为/dev/sdx(x是具体的字母,比如a、b,可以用sudo fdisk -l命令查看确认,操作前务必确认设备名,否则可能格式化错硬盘!)。
我们需要创建两个分区:
- 第一个分区:大小32MB,格式化为FAT32文件系统。这个分区用来存放启动文件。
- 第二个分区:用尽剩余空间,格式化为EXT4文件系统。这个分区是系统的根目录,存放所有程序和文件。
你可以使用fdisk或gparted图形工具来完成分区。
第二步:烧写U-BootU-Boot相当于这个嵌入式设备的“BIOS”,负责最基础的硬件初始化和加载内核。
- 进入存放有
u-boot-sunxi-with-spl.bin文件的目录。 - 执行以下命令(再次确认
/dev/sdx是你的TF卡!):
这个命令会将U-Boot程序写入TF卡特定的位置。sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdx bs=1024 seek=8
第三步:复制启动文件将以下文件复制到TF卡的第一个FAT分区(挂载后的目录):
u-boot/boot.scr:U-Boot的启动脚本,告诉它去哪里加载内核。linux-5.7.1/arch/arm/boot/zImage:编译好的Linux内核镜像。linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb:设备树文件,描述硬件的具体配置(比如用了哪些GPIO、屏幕型号等)。虽然项目名叫CPSOe_Terminal,但硬件基础与荔枝派Nano兼容,所以暂时使用它的设备树文件。
第四步:解压根文件系统根文件系统就是Debian系统的“血肉”,包含了从Shell命令到图形界面的所有程序。
- 将
debian_rootfs.tar压缩包,解压到TF卡的第二个EXT4分区(挂载后的目录)。你可以用tar命令解压,注意保留文件权限。
至此,一张可以启动CPSOe_Terminal的系统卡就制作完成了。将TF卡插入主板,上电,你应该就能看到系统启动的日志,并最终进入Linux命令行或者图形界面(如果LVGL已配置好)。
4. 项目心得与后续
这个项目从画第一版原理图到V2版本调试完成,断断续续用了大半年时间。中间踩了不少坑,也学到了很多东西。
关于硬件:如果你刚开始接触嵌入式硬件,强烈建议从V1版本开始。模块化的设计能让你快速搭建起一个可工作的原型,获得正反馈,建立信心。等熟悉了整个系统的工作流程后,再挑战V2的焊接,会更有方向感。
关于软件:嵌入式Linux的学习曲线比较陡峭,但脉络是清晰的:U-Boot -> Linux内核 -> 设备树 -> 根文件系统 -> 应用。这个项目提供了一个完整的实践框架。我附件里提供的U-Boot、内核和文件系统都是调试好的,你可以直接使用。如果想深入学习,可以尝试自己下载源码,根据板子的实际情况修改设备树、编译内核。
项目当前状态:截至最近更新(2024年9月),V2主板已组装完成,基础功能(屏幕、USB、系统启动)已验证。像Wi-Fi(ESP8266)和声卡这类外设的驱动,可能还需要根据你的具体使用情况进行进一步的调试和适配。这正好也是嵌入式开发的常态——永远有可以优化和深挖的地方。
希望这份详细的记录能帮你打开DIY便携式Linux终端的大门。最重要的是动手去做,遇到问题就去查资料、去社区提问。享受从无到有创造出一个能工作的设备的乐趣吧!
