真工程师:20块钱做了张「名片」,可以跑Linux和Python
itomcoil 2025-01-03 16:30 17 浏览
机器之心报道
参与:思源、杜伟、泽南
对于一个工程师来说,如何在一张名片上宣告自己的实力?在上面制造一台完整的计算机说不定是个好主意。
最近,美国一名嵌入式系统工程师 George Hilliard 的名片引发了众人的关注。他以自己的名片为「主板」,在小小的空间里打印了计算机系统所需的所有元器件,使其可以成为了一台可以运行 Linux 的电脑。上面还有一个简化版的 Python 解释器。
这一颇具极客风的创意引来了社交网络上人们的广泛推崇,他的文章在 HackerNews 上出现还不到一天,点赞量就超过了 2000。
制作这样一张名片,除了需要有足够的理论知识以外,所需的零件可以在淘宝上买到(是的,这位美国小哥就是这么做的),一张名片的成本大约 20 元人民币。
让我们看看他是如何做到的。
作为一名嵌入式系统工程师,George Hilliard 一直在追寻完美的设计,其中之一就是最简洁的 Linux 系统计算机。他一直在海量处理器型号中寻找最优解,最终发现了新的大陆。他对自己说:「这些处理器便宜得就像白送。」很快产生了用它们来制作可以运行 Linux 的名片的想法。
此前,不少极客先驱曾经在名片上发挥了自己的创意,其中包括 U 盘名片、带闪光灯的名片,甚至带无线电首发功能的名片。不过还从来没有可以运行 Linux 系统的名片。
所以 George 自己动手做了一个:
成品看起来是这个样子的,它是一台完整的 ARM 架构计算机,运行由 Buildroot 构建的定制 Linux 固件。
所以如何让它跑起来呢?名片的左下角是一个 USB 接口,如果你把它插入一台计算机,它将在 6 秒钟启动,显示为 USB 闪存,以及虚拟串行端口,你可以使用卡片的 shell 登陆。闪存驱动器里有一个 README 文件、个人简历的副本以及一些照片。而 shell 上有很多游戏,比如 Unix 上经典的 fortune and rogue、2048 以及一个小型的 MicroPython 解释器。
所有这些都是在一个容量仅有 8MB 的闪存卡上实现的。Bootloader 的大小为 256KB,内核为 1.6MB,整个根文件系统用掉了 2.4MB。所以装一个系统绰绰有余。它还包含了一个可写入的主目录,以备有人想在上面存入什么东西。
最后,一张名片的成本被控制在人民币 20 元左右,对于一台电脑来说,这显得足够便宜。
名片设计是件「技术活」
George Hilliard 自己设计并制作了整张名片,这虽然是作者的本职工作,但要找到足够便宜的元件还是非常麻烦的。
处理器的选择是最重要的部分,它会控制成本并确定整个项目是可行的。在一系列调研后,George 选择了 F1C100s,它是 Allwinner 出品的一块贼便宜的芯片,它在成本优化上下足了功夫。这块芯片集成了 RAM 与 CPU,在功能上至少已经满足要求了。
没想到的是,George 小哥哥竟然是在淘宝上买的 F1C100s,其它元器件都是在 LCSC 上买的。
George 使用 JLC 制作了 PCB 板子,大概只需要 56 块钱就能做 10 份。George 表示他对 JCL 制作的板材印象深刻,它们虽然不像 OSHPark 制作的那么好,但是质量也还不错,重点是价格实惠。第一次做出来的电路板是哑光的黑色,它带有一点指纹的磁感。
在第一次制作电路板时还遇到了一点麻烦:首先,USB 端口不够长,因此很难与更多的 USB 接口连接;其次,flash footprint 是错误的,George 通过手动把针脚压到元件后面。
在我们验证了各个部分后,再制作一次板材就能得到文章上面的实力。因为线路板尺寸很小,George 决定立即使用一个便宜的回流焊回流所有的部件。因为他能使用激光切割机,所以可以用激光切割压模机压制的焊锡模板。模板的效果非常好,芯片的 0.2 毫米针脚需要特别注意才能保持光洁:激光功率与焦距是非常重要的。
其它空白的 PCB 板是非常好的夹具,用来固定板材以处理针脚,固定可以通过透明胶完成。George 使用焊锡手动焊接元器件,他确保板材和元器件的处理都是无铅、无害的,因此用来作为名片也是没什么问题的。
上面这张图展示的处理结果有点偏离,但焊锡其实还是挺容易使用的,而且组装起来也非常容易。每一个元器件大概需要 10 秒钟装配,所以作者尽量减少元器件的数量。
这样的名片多少钱?
前面 George 已经尽可能降低成本了,他认为现在已经足够便宜,即使将名片发给别人也不会心疼。当然,也只有重要的结识对象才会收到这样的名片,毕竟所有元件都要你一个个装配。下面所有的成本都没有考虑装配时间,动手能力强的读者们可以考虑自己做一个。
当然,作者也表明还有很多成本并不能量化,例如运费和试错等等。但 20 块 RMB 已经非常低了,尤其是对于一块能运行 Linux 系统的板子。这其实也体现了企业制作端设备的成本,元器件成本要比我们想象中的低很多。
名片的性能怎么样
嗯,它在 6 秒内就启动了一个超级简化的 Linux 系统。因为格式和成本等因素,该名片是没有 I/O、联网模块,以及其它占资源比较大的程序。不过不管怎么样,George 还是将一些有趣的应用拷进了固件镜像文件。
USB
我们能通过 USB 做很多有意思的事,但作者特意令名片保持非常精简的状态,我们可以在电脑上做一些尝试。Linux 可以让我们像设备一样使用一些小工具,作者将该芯片之前的一些开发工作也传到了名片内,所以能有 USB 小工具框架的完整功能。George 决定模拟一个预生成的闪存驱动器,并通过虚拟串行端口提供 shell 服务。
Shell
在登录为 root 用户后,我们可以运行所有模拟串行控制台:
- rogue:经典的 Unix 游戏《地牢爬虫》;
- 2048:控制台版的 2048 游戏;
- fortune:各种名人名言,为了给其它应用节约空间,其并不包含完整的数据库;
- micropython:一个非常轻量的 Python 解释器。
模拟闪存驱动
在编译的过程中,构建工具可以生成一个很小的 FAT32 镜像,并将其加到 UBI 分区中。正如之前描述的,Linux 小工具子系统会将其作为一个储存设备提供给 PC。如果你希望看看闪存驱动到底发生了什么,那么最简单的就是看看源代码,它里面有作者的一些简历与介绍。
闪驱源码地址:https://github.com/thirtythreeforty/businesscard-linux/tree/master/package/businesscard-flashdrive/files
制作这种名片需要哪些资源?
在制作电路板名片的过程中,George 使用了 F1C100s 芯片,并在上面运行主流的 Linux 5.2 版本。此外,他还提供了一些有关 F1C100s 芯片的文档,供读者借鉴。
源代码
George 已经在 GitHub 上开源了 Buildroot tree,读者可以自行查看。Buildroot tree 包含生成 NOR flash 镜像的代码,然后通过处理器的 USB 下载模式进行安装。此外,Buildroot tree 还包含游戏和其他好用的软件包,比如为 Buildroot 添加 fortune 软件。
如果你想在项目中使用 F1C100s 芯片,则是一个很好的开始(如有问题,请随时联系)。
Buildroot tree 项目地址:https://github.com/thirtythreeforty/businesscard-linux
此外,George 重定了 Icenowy 发布的 F1C100s 开发工作,其可以运行 Linux 4.9 版本。George 的名片在接近主流的 5.2 版本上运行,其中对补丁进行了修补和调试。
- Icenowy/linux 项目地址:https://github.com/Icenowy/linux/tree/f1c100s
- thirtythreeforty/linux 项目地址:https://github.com/thirtythreeforty/linux/tree/f1c100s-v5.2.4
对于 F1C100s 芯片,George 相信自己拥有目前最好的 U-Boot 配置编译端口,这些再次基于 Icenowy 的部分工作。
U-Boo 项目地址:https://github.com/thirtythreeforty/u-boot/tree/f1c100s-v2019.04
F1C100s 文档
George 找到了以下一些关于 F1C100s 的文档:
- Allwinner F1C100s Datasheet (提供插脚引线和一般信息):https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf;
- Allwinner F1C600 Reference Manual(提供 F1C600 的寄存器定义,它是 F1C100s 重贴商标后的改进版,支持 Linux):https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf;
- schematic for Sipeed's Lichee Nano(这是 George 使其软件顺利运行所使用的开发板):http://dl.sipeed.com/LICHEE/Nano/。
最后,如下图所示,George 上传了制作电路板名片的原理图。
电路板名片原理图。
有网友评论道:「对我来说令人难以置信的是,这样一块成本 1.42 美元(约合人民币 10 元)的芯片几乎包含了带动 Linux 的所有必要硬件:500MHz 的 CPU、32MB SDRAM、2D GPU、SD/MMC 支持以及 USB 控制器。他们都封装在一块 10mm×10mm 的微小芯片里。这让我不由得想入坑嵌入式开发。」
项目感悟
George 表示自己从这个名片项目中学到了很多,这是他首次使用回流焊来回流元器件的项目。此外,对于一些缺少文档的元器件,George 还必须学习找到必需的资源。
在项目开展过程中,George 借鉴了其有关嵌入式 Linux 和设计 PCB 的经验。项目并非完全没有瑕疵,但体现了他的能力。此外,George 表示他正致力于如何从零开始为电路板名片等小型、廉价的 Linux 系统构建硬件和软件。
相关推荐
- Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)
-
在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...
- Connect 2.0来了,还有Nuke和Maya新集成
-
ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...
- Magicgui:不会GUI编程也能轻松构建Python GUI应用
-
什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...
- Python入坑系列:桌面GUI开发之Pyside6
-
阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...
- Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI
-
通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...
- pyside2的基础界面(pyside2显示图片)
-
今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...
- Python GUI开发:打包PySide2应用(python 打包pyc)
-
之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...
- 使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂
-
PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...
- pycharm中conda解释器无法配置(pycharm安装的解释器不能用)
-
之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...
- Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建
-
Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...
- Python操作系统资源管理与监控(python调用资源管理器)
-
在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...
- 本地部署开源版Manus+DeepSeek创建自己的AI智能体
-
1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...
- 一文教会你,搭建AI模型训练与微调环境,包学会的!
-
一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...
- 使用scikit-learn为PyTorch 模型进行超参数网格搜索
-
scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...
- 如何Keras自动编码器给极端罕见事件分类
-
全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...
- 一周热门
- 最近发表
-
- Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)
- Connect 2.0来了,还有Nuke和Maya新集成
- Magicgui:不会GUI编程也能轻松构建Python GUI应用
- Python入坑系列:桌面GUI开发之Pyside6
- Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI
- pyside2的基础界面(pyside2显示图片)
- Python GUI开发:打包PySide2应用(python 打包pyc)
- 使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂
- pycharm中conda解释器无法配置(pycharm安装的解释器不能用)
- Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)