HP Prime G2等计算器大揭秘:运行Linux、Windows的潜力与实践!

HP Prime G2等计算器大揭秘:运行Linux、Windows的潜力与实践!

作者最喜欢的计算器之一是 HP 16C,这是面向计算机程序员的逆波兰表达式(RPN)计算器,支持十六进制、二进制、八进制和十进制,还有位运算、掩码、循环移位等实用功能。作者自己没 HP 16C,而是有台 Swiss Micro 的 DM16L,它是 HP 16C 的高品质复刻版,改进之处是采用了两行显示屏。此外,限量版的 HP 16C 收藏版 也即将推出。不过,这些计算器都不能运行 Linux。

但下面这台可以:

计算器上的 xcalc
真正的计算器上运行 xcalc

控制台
控制台截图,部分显示 `fbv` 图像查看器

Doom 在 Prime G2 上运行
当然,它能运行 Doom

HP-16C
作者一直以来的最爱,HP-16C

以下将用至少一千字介绍 HP Prime G2 以及其他能运行 Linux 的图形计算器。要是你只想了解作者为 Prime G2 更新的 Linux 移植版本,可跳过这部分内容。

HP Prime G2

HP Prime 是 2013 年上市的图形计算器,2018 年进行了硬件升级(G2 型号)。它配了触摸屏,据作者了解,多数人 对它很满意,觉得它 功能强大 且运算速度快。这里 有该计算器拆解后的图片,这里 有更多相关下载资源。

作者对计算器本身的功能不太感兴趣,因为日常嵌入式编程工作中,HP-16C 更适合做大多数计算。作者关注这款设备,是因网上有人说它能运行 Linux,甚至还有 Windows 10 移植版。

我是 root,向我臣服

作者曾在较旧的 HP 设备上运行过 Linux,且希望对自己拥有的所有设备都有完全的控制权。作者曾写道:

对于自己拥有的设备,我有一条尽量遵守的规则:它们必须允许进行 root 或管理员操作。我二手购买的任天堂 Switch 年代够久,可以进行越狱;我拥有的两台苹果设备(第一代 iPad Air 和第一代 iPhone SE)存在漏洞,让我能获得 root 权限;我购买的所有安卓手机,都是因为其 bootloader 可以解锁。一旦我购买了设备,它就归我所有,由我决定如何使用,而不是由制造商决定。否则,它从工厂出厂的那一刻就成了电子垃圾。

对我来说,能够在设备上开发软件几乎是必备条件。只要能在设备上进行开发,并且愿意投入足够的时间和金钱,就可以重新编写那些缺失的功能,也就是制造商认为无利可图而未提供的功能。

不过,对计算器而言,这不是大问题,因为作者不把它们当通用计算设备。尽管德州仪器(Texas Instruments)后来移除并限制了其设备最初具备的一些功能,像 在计算器上运行汇编代码,Numworks 也 对其计算器进行了限制。这些都与作弊和考试模式有关,所以作者能理解。要是设备不允许用于官方考试,就没人用或买。而 HP Prime 从未支持过汇编(只有一种类似 Basic 的自定义语言 PPL),所以不存在被移除相关功能的问题。有一位 HP 员工 表示

“目前它没有被锁定,仅用于验证。不过要注意,我们确实有能力对系统进行完全加密和锁定,因为新芯片具备这一功能,并且我们已经测试通过。如果有需要,我们会启用该功能。这是一项公司安全规定(在固件被植入鼠标、键盘或打印机以入侵网络的事件曝光后制定),我们曾争取到豁免权。任何人都别在考试模式上捣乱。”

计算器的硬件规格?

作者觉得,Prime G2 作为计算器,性能强大得离谱。它搭载了 i.MX 6 Ultralite ARM Cortex A7 CPU,配 256 MB DDR3 内存和 512 MB 内部存储。这哪像传统计算器,更像带计算器键盘的小型嵌入式 Linux 机器。

之前的 G1 型号就已配了 400MHz 的 ARM CPU 和 32MB 内存,而 G2 堪比几年前的安卓手机。

作者日常工作接触的咖啡机硬件,用的 i.MX6 模块规格与之类似,它基于 Yocto 系统运行专门的 C++ 和 Qt 应用程序。HP Prime G2 运行的是 FreeRTOS,而 G1 运行的是自定义实时操作系统 Besta OS

作者仍对这款计算器的规格感到震惊!日常使用中,它响应迅速,和其他计算器比,计算和绘图速度都快得多,而且通过触摸屏能对图形进行缩放,几乎是即时响应。至少,这些强大的硬件规格得到了充分利用。

其他计算器的硬件规格

下面看看其他竞争对手的计算器在规格和 Linux 支持方面的情况。作者尝试查找了荷兰市场上几款计算器的规格。

  • TI 84+ CE 配了 48 MHz 的 eZ80 处理器,无法运行 Linux。
  • Numworks Graphing Calculator N0110 搭载 216 MHz 的 ARM Cortex-M7 CPU,有 8 MB 存储空间和 256 KB SRAM。作者认为对计算器来说,216 MHz 的主频有些过高,但这只是个人看法。后来的 N0120 型号甚至配了高达 550 MHz 的 ARM Cortex-M7 CPU 和 564KB 的内存,这已达微控制器的内存水平,无法运行 Linux。不过,该计算器的 操作系统是开源的,甚至有一些分支版本,但后期的固件版本似乎被锁定了。这对爱好者来说很遗憾,但可能与作弊和考试模式有关。
  • Casio FX-CG50 未公布 CPU 规格,但 这篇文章 称其主频为 118 MHz,这篇文章 指出它采用了定制的 Renesas SH7305 CPU,配备 8 MB 内存和 32 MB ROM,同样无法运行 Linux。不过,也许 这个人 能让它运行起来。
  • 作者发现唯一有 Linux 移植版 的计算器是 TI Nspire CX (II) (CAS)。这篇文章 介绍了如何在其上运行 Arch Linux,这里 有更多相关信息。CX-II 配备 396MHz 的 ARM CPU、64MB 内存和 128MB 闪存,虽不如 HP Prime,但也能运行 Linux。

作者最喜欢的 HP-16C 则是另一回事。它并非竞争对手,因为它没图形功能,也不算现代计算器。NUT CPU 详细说明 (A-1LF5-9002-1 - 7/14/81) 显示,11C/12C 的主频为 200 至 230KHz,41C 的主频为 340 至 380KHzNonpareii 模拟器中的定义 表明 16C 的主频为 215 kHz,Nelson M. Sicuro 在 2003 年的一篇文章 中提到约为 230 kHz,这个页面 则显示为 220 kHz,而且它只有 203 字节的程序存储空间,可惜无法运行 Linux。

作者没大量收藏计算器,也不是计算器专家。高中和后续涉及数学的学习中,作者会用计算器,至今还留着一台当年的 TI-83,以及一台 HP 11C(HP 16C 的非编程普通版)。作者喜欢 HP 11C 的逆波兰表达式(RPN),因为数学计算时,这种方式更合自己的思维习惯。

HP Prime G2 运行 Linux

针对 G2 型号,有个旧的、不再维护的移植版本,用的是 4.14 内核。链接的 Linux 仓库中已没正确的分支,Buildroot 构建失败,设备树文件也有问题,提供的下载文件无法显示控制台登录界面,所以作者无法使用。不过,它提供了足够信息让作者开始着手更新。作者为自己的 HP Prime G2 更新了移植版本,并做了些改进:

  • 优化键盘输入:原版本无法输入数字、竖线、破折号或下划线等字符,作者进行了改进。
  • 支持 USB 串口设备:设备可作为 USB 串口设备显示。
  • 支持更大的镜像文件:可在内存中运行大于 15MB 的镜像文件。
  • 适配新的触摸屏控制器:作者的设备采用了较新的触摸屏控制器 Ilitek ILI211X(因旧的 Goodix GT5688 停产),作者为此编写了内核驱动。
  • 支持控制台登录:可以在控制台进行登录。
  • X11 服务器正常工作:配备了一些基础应用程序。
  • 内置 Doom 游戏:可以流畅运行 Doom 游戏(prboom)。
  • 支持设备上的开发:内置了 C 编译器,可在设备上进行开发。

作者用 Software Heritage 重建仓库后,成功完成构建并让它运行起来。作者仅尝试在内存中运行,因为不想对 NAND 进行刷机操作,以免丢失计算器的原始软件。

HP Prime G2 运行 Linux 的控制台

Linux 系统里,原版本的键盘只能输入橙色标记的字母,无法输入破折号、下划线、数字或竖线等字符。作者最初做了个替代键盘映射,用 loadkeys 在启动时配置,但在 X11 环境中不起作用。于是,作者直接对内核的键盘驱动 (`imx_keypad.c`) 打补丁,让它能发送正确的按键信号。该补丁会拦截按键码,若按下 ALT 键,就发送不同的按键码,具体映射可参考 `input-event-codes.h` 文件。

用 Alpha 键(ALT)能输入数字和其他一些特殊字符。但按下 ALT 键与 COS 或 TAN 键组合时,无法发送按键码,作者没深入研究这问题,而是用其他按键替代,这可能和键盘 矩阵 有关。

原版本的 `uuu` 脚本只能在内存中启动最大 15MB 的 Linux 镜像。作者通过修改内核配置、`uuu` 脚本和 U-Boot 中的偏移量,现在能在内存中运行最大 130MB 的镜像。

原版本启动后没登录屏幕,作者通过在初始化脚本中配置 `getty` 解决了这问题。

原版本和一些俄语文章(这里这里这里)中用 Goodix 内核驱动实现了触摸屏功能,但在作者的构建中无法工作。它显示触摸屏位于 I2C 总线 1 的地址 `0x14`,但 `i2cdetect` 未检测到该地址,却在 `0x26` 地址发现了个未知设备。调试时发现,触摸屏幕时,该设备的数据结构会变化。

大量调试和查看原始 I2C 消息后,作者发现该设备和 `Illitek ILI211X` 设备类似。较新的内核 有对应的驱动,`ILI211X_DATA_SIZE` 与作者在 I2C 上观察到的 43 字节数据包、`0x5a` 起始字节以及 `0x26` 地址相匹配,另一个使用该驱动的 imx6 设备树 也证实了这点。

HP 恢复屏幕显示触摸屏固件版本为 `ilitek-03`,这也是个线索。旧内核没针对该型号的驱动,只有针对旧协议的驱动。作者基于较新内核的驱动编写了内核驱动,并去除了所有非必要功能,如多点触摸和手指压力检测。此外,作者还做了个校准工具 `fbtouch_test`,因为屏幕右下角有显示问题。后来,作者在 一个法国论坛帖子 中发现,因 Goodix 触摸屏停产,HP 换了屏幕。

HP Prime 触摸屏
触摸屏正常工作

调试中,作者发现用 `modprobe` 加载 USB 串口支持的内核模块会让设备死机。于是,作者把该模块编译进内核,解决了崩溃问题,现在能通过串口连到计算器。

因触摸屏功能正常,作者还集成了 X11 和一些程序。登录控制台后,输入 `startx` 就能启动 `twm` 窗口管理器,同时启动 `xeyes`、`xclock` 和 `xcalc` 等程序。鼠标和键盘输入正常,长按屏幕会被识别为右键单击。在计算器上运行 `xcalc` 是不是很有趣呢?

为增加趣味性,作者还加了 `tcc`(Tiny C 编译器)。毕竟,如果不能在计算器上编译自己的代码,那还算什么好计算器呢?在 `/root` 目录下有个简单的 `hello.c` 示例文件,你能自行编译(`tcc hello.c -o hello`)并运行(`./hello`)。

源代码可在作者的 GitHub 上获取:

为方便用户,作者还提供了 预构建的下载文件,不用编译整个项目就能直接运行。Buildroot 和 Linux 的编译过程耗时久,而且随时间推移可能出问题。用预构建的下载文件,你能马上开始体验。

在 HP Prime G2 上运行 Linux 的步骤

注意:你得打开计算器,这可能导致设备损坏且无法恢复,无法再启动 HP 原厂软件。请谨慎操作。

  1. 这里 下载预构建的软件包,并解压到一个文件夹。
  2. 这里 下载 `uuu` 工具。
  3. 打开计算器(拧下背部的 4 颗螺丝,用小撬棒或吉他拨片打开外壳),通过 USB 连到电脑,在短路照片中标记的两个焊盘的同时按下 RESET 按钮:
  4. HP Prime G2 复位焊盘
  5. 作者用了 iFixit 镊子来短路这两个微小的焊盘。
  6. 用 `uuu` 脚本在内存中启动 Linux:
  7. uuu ./run_linux_in_ram.uu
  8. 几秒后,你该能看到登录提示。可以用 `root` 用户无密码登录。输入 `startx` 启动图形界面,输入 `sh ./doom.sh` 启动 Doom 游戏。

作者没测试过任何 NAND 刷机脚本,使用时请自行承担风险。配备 Goodix 触摸屏的设备应该还能正常工作,但作者没法测试。如果你有这样的设备,请测试并反馈结果。

HP Prime G1 运行 Linux

关于 Prime G1,这里 有个论坛主题和截图,这个移植版本 有实际的源代码和现代的 6.x 内核。因作者没 G1 硬件,无法测试这个版本。该移植版本不提供可下载的镜像,你得自己构建,构建说明在页面上,但有些复杂。注意,这是专门针对 G1 硬件版本的。作者曾尝试自己构建这个版本,看是否有代码老化或链接失效的问题,令人惊讶的是,整个过程仍比较顺利。

构建步骤
  1. 克隆所有 4 个仓库:
  2. mkdir prime-linux
  3. cd prime-linux
  4. git clone https://github.com/Repeerc/Linux-For-HPPrime-V2
  5. git clone https://github.com/Repeerc/hpprimev2_linux_loader
  6. git clone https://github.com/Repeerc/Kernel-6.1.35-HP-Prime-V2_G1
  7. git clone https://github.com/Repeerc/buildroot_hpprimev2
  8. 构建加载器:
  9. cd hpprimev2_linux_loader
  10. mkdir build
  11. cd build
  12. cmake ..
  13. make
  14. cp BOOT1.ROM ../../
  15. 要是遇到 `error: unknown type name 'caddr_t'` 这样的错误,把代码中的 `caddr_t` 类型替换为 `void`,因为现代编译器不再支持该类型。
  16. 构建内核:
  17. cd ../../
  18. cd Kernel-6.1.35-HP-Prime-V2_G1
  19. make ARCH=arm CROSS_COMPILE=arm-none-eabi- hpprimev2_defconfig
  20. make ARCH=arm CROSS_COMPILE=arm-none-eabi- zImage -j8
  21. cp arch/arm/boot/zImage ../../
  22. 构建 `buildroot`:
  23. cd ../../
  24. cd buildroot_hpprimev2
  25. make hpprimev2_defconfig
  26. make
  27. cp output/images/rootfs.jffs2 ../../
  28. 打包所有文件:
  29. cd ../../
  30. cp BOOT1.ROM Linux-For-HPPrime-V2/
  31. cp zImage Linux-For-HPPrime-V2/
  32. cp rootfs.jffs2 Linux-For-HPPrime-V2/
  33. cd Linux-For-HPPrime-V2/
  34. bash ./mkimg.sh
  35. 将 `BOOT1.ROM` 和 `LINUX.DAT` 刷入计算器:
  36. 用 `usbtool.exe`,将计算器置于恢复模式(`RESET + Symb`),选择自动更新,然后点击更新。

在线文档 显示,该操作可能无法在 USB3 端口上完成。

以下是作者在网上找到的一些截图:

2017 年论坛主题中的 Prime G1 截图:

Prime G1 截图

Prime G1 运行 X 会话:

Prime G1 X11

Prime G1 也有 Doom 移植版:

Prime G1 Doom

运行 Windows?

要是你有这方面需求,有人 为 Windows 10 移植了 UEFI源代码)。看看这张最具元意味的图片,真正的计算器上运行 Windows 的 `calc.exe`:

calc.exe

作者没找到可下载的镜像,博客文章中的一些 Twitter 链接已失效,所以无法亲自测试这个版本。以下是更多截图:

启动加载器失败:

Windows 启动加载器

启动屏幕:

Windows 启动屏幕

打印对话框:

Windows 打印对话框

记事本:

Windows 记事本

标签: arm , articles , calculator , casio , doom , electronics , embedded , hardware , hp , kernel , linux , prime , rpn , swissmicros , texas-instruments , windows

主页 | 关于 | 所有页面 | 集群状态 | 网站统计 | 由 ingsoc 生成。

内容概要:本文围绕考虑隐私保护的分布式联邦学习在电力负荷预测中的应用展开研究,并提供了完整的Python代码实现。该方法采用联邦学习的分布式架构,允许多个数据持有方在不共享原始敏感数据的前提下协同训练高精度的负荷预测模型,有效解决了数据孤岛用户隐私泄露之间的矛盾。研究详细阐述了联邦学习的核心机制,包括本地模型训练、加密参数上传、全局模型聚合等关键流程,并基于真实电力负荷数据进行了实验验证,结果表明该方法在保障数据隐私安全的同时,仍能保持优异的预测性能模型泛化能力。; 适合人群:具备一定机器学习基础和电力系统背景的研究人员,以及从事负荷预测、数据隐私保护、联邦学习算法开发的研究生和技术人员。; 使用场景及目标:①应用于居民区、工业园区等多主体参的电力负荷预测场景,解决跨机构数据协作中的隐私合规问题;②为构建安全可信的智能电网数据共享分析平台提供关键技术支撑;③推动联邦学习在能源互联网、需求响应、虚拟电厂等领域的工程化落地。; 阅读建议:建议读者结合所提供的Python代码进行动手实践,深入理解联邦学习的通信协议、梯度聚合机制隐私保护策略,可在复现实验的基础上尝试引入差分隐私、同态加密等增强手段,或优化模型结构以提升预测效率精度。
内容概要:本文提出了一种基于压缩感知中密钥控制测量矩阵的新型图像压缩加密混合算法,深度融合压缩感知理论现代密码学机制,实现图像在高效压缩的同时完成高强度的安全加密。该算法通过引入密钥动态生成或调控测量矩阵,确保仅有持有正确密钥的授权方能够准确重构原始图像,从而显著提升系统的抗攻击能力和保密性。文中系统阐述了算法的设计原理、密钥控制机制、测量矩阵构造方法以及信号重构流程,并基于Matlab平台进行了完整的代码实现仿真实验,验证了该算法在压缩效率、重构图像质量(如PSNR、SSIM指标)以及抵抗常见攻击(如噪声、剪切、统计分析)等方面的优异性能。; 适合人群:具备信号处理、信息安全或数字图像处理基础知识,正在从事相关领域研究的研究生、科研人员及工程技术开发者。; 使用场景及目标:①适用于军事通信、医疗影像安全传输、云端敏感图像存储等需兼顾压缩效率数据安全的场景;②为探索压缩感知信息安全交叉领域的研究人员提供可复现的算法设计范例仿真代码参考;③推动图像数据在传输存储过程中实现高效性安全性的有机统一。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点分析密钥控制测量矩阵的生成逻辑及其对重构性能的影响,同时可在不同类型的图像数据集上进行测试,以全面评估算法的鲁棒性泛化能力。
内容概要:本文研究了一种面向间歇性拒绝服务(DoS)攻击的混合动态事件触发微电网多目标二次均衡控制策略,旨在保障孤岛微电网在遭受网络安全威胁时仍能实现电压频率的稳定恢复有功无功功率的精确均分。通过构建非奇异终端滑模面,结合基于强化学习的RBF神经网络扰动观测器,有效提升了系统对未知扰动和攻击导致通信中断的鲁棒性;同时引入混合动态事件触发机制,显著降低了控制器间的通信频率,节约了通信资源。该方法在Simulink平台上建立了完整的微电网仿真模型,验证了所提控制框架在复杂攻击场景下的有效性优越性,实现了安全性、稳定性资源效率的协同优化。; 适合人群:具备电力系统自动化、现代控制理论基础及MATLAB/Simulink仿真能力的研究生、科研人员,以及从事微电网控制系统设计安全防护的工程技术人员。; 使用场景及目标:① 提升高危网络环境下微电网的抗攻击能力运行可靠性;② 实现二次控制中多目标(电压、频率、功率分配)的协同优化调控;③ 在保证动态响应性能的前提下减少通信开销,适用于资源受限的分布式能源系统实际部署场景。; 阅读建议:建议读者结合提供的Simulink仿真模型深入理解控制器的设计流程稳定性分析方法,重点关注滑模面构造、RBF神经网络补偿机制及事件触发阈值设定等关键技术环节,并可根据具体应用场景调整参数以实现定制化优化。
内容概要:本文针对高渗透率新能源接入背景下电力系统稳定运行的挑战,研究了可切换构网型(GFM)跟网型(GFL)逆变器之间的双向平滑切换控制策略。传统GFL逆变器依赖电网锁相运行,在弱电网或孤岛工况下易失稳;而GFM逆变器虽具备自主建压能力,但在并网时缺乏同步调节机制,难以实现无缝切换。为此,文章提出一种基于共用硬件平台和统一内环控制架构的双向切换策略,重点设计了切换判据、切换时序及过渡过程中的平滑抑制方法,有效避免切换过程中出现功率冲击、电压畸变和频率波动等问题。研究建立了GFLVSG型GFM逆变器的完整控制模型,并通过Simulink仿真实验验证了该策略在不同工况下的有效性,结果表明系统在模式切换过程中能够保持良好的动态响应和平滑过渡性能。; 适合人群:从事电力电子、新能源并网控制、微电网智能配电网研究的科研人员及工程技术人员,具备一定电力系统控制理论基础的研究生及以上学历人员。; 使用场景及目标:①应用于分布式光伏、储能系统等新能源并网设备,提升其在复杂电网环境下的适应性稳定性;②实现逆变器在并网孤岛模式间的无缝切换,增强微电网的自治运行能力;③为构网型跟网型控制技术的融合应用提供理论支持工程参考。; 阅读建议:建议结合文中提供的Simulink仿真模型进行实践操作,重点关注切换判据设置过渡控制策略的实现细节,同时可进一步拓展至多机并联系统中的协同切换研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值