在手机里装一整台 PC——bochs 模拟器上手体验

系统工具 ·约 7 分钟 ·記筆記的貓:團子

bochs 是什么

bochs 是一款能在安卓手机上完整模拟 x86 架构 PC 的工具。它不是那种只跑几个 DOS 小游戏的轻量模拟器——CPU、内存、显卡、PCI 总线、甚至 BIOS 都是实打实模拟的,你可以给它插磁盘镜像、装操作系统、编译内核、调断点,做的事情和在桌面上用 Bochs 完全一样。

对折腾党来说这意义不小:坐地铁的时候掏出手机,就能在掌心里调试自己写的 Bootloader,或者重温一把 Windows 95 的开机画面。bochs官网 开发商 Lyubomyr Lisen 把桌面版 Bochs 的核心移植到了安卓上,包名 net.sourceforge.bochs,当前版本 2.6.11,安装包只有 12.79M,装完加上资源文件顶天几十兆,对手机存储压力不大。

安装

bochs下载 的安卓版 APK 安装本身很简单:下载后允许「未知来源」安装就行,和普通 APK 没区别。但装完打开只是完成了一半——bochs 本身是个空壳,它不自带任何 BIOS 镜像和磁盘镜像,这些资源你得自己准备好。

首次启动 bochs 会弹出一个配置向导,核心就三件事:指定 BIOS 文件、指定磁盘镜像、分配内存。BIOS 用 Bochs 官方的 BIOS-bochs-latest(128KB 那个)就行,放在手机存储的 bochs 目录下,配置里选它。磁盘镜像的话,如果你只是想跑个现成的 Windows XP 镜像直接选下载好的 .img 文件;想从头装系统就得先创建一个空磁盘镜像,再用 ISO 安装。内存分配建议给个 512MB 起步,跑 Windows XP 至少要这个数,不然卡到怀疑人生。

有个坑值得提一下:资源文件路径里别出现中文或空格,bochs 在安卓上处理路径偶尔会抽风,报找不到文件。老老实实放在 /sdcard/bochs/ 这种纯英文路径下最稳。

打开第一眼界面

装好配好之后点「Start」启动——说实话我没抱太大期待,以为会看到个简陋的命令行或者模拟器画面。结果出来的是一个完整的 PC 启动流程:先是 BIOS 自检界面闪过几行白字,然后读引导扇区,接着就是操作系统的启动画面。我手上用的是一个从网上找来的 Windows XP SP3 精简镜像,启动到桌面大概花了四十秒,和桌面版 Bochs 跑同一份镜像的速度差不多。

主界面其实很朴素:屏幕中心是模拟出来的 PC 画面,底下一排按钮分别是软键盘、鼠标模式切换、音量键映射、电源键。默认触控模式下,单指滑动相当于鼠标移动,双击是左键点击,长按是右键——这个交互逻辑我一开始没摸透,右键菜单死活调不出来,后来才发现要长按半秒以上。软键盘按钮点开就是个完整的 PC 键盘布局,Fn 键、Ctrl、Alt 都有,输命令行够用了。

在 bochs 里跑 Windows XP 的实际画面

实际用下来

我装完之后折腾了三天,主要干了三件事:跑老软件、写 Bootloader 调断点、试着装一下 FreeDOS。三件事里最让我惊喜的是调断点——bochs 安卓版竟然带完整的调试器,和桌面版 bochsdbg 功能几乎一样。

之前在桌面上学 OS 开发的时候,最经典的第一条命令就是 pb 0x7c00 在 Bootloader 入口下物理断点。我用 bochs 安卓版试了一下,debug 控制台里敲 pb 0x7c00 然后 c,BIOS 刚跳过来就停住了,info registers 能看到 CS=0x0000、EIP=0x000000007c00,和桌面版 Bochs 的输出一模一样。这个功能对于想在碎片时间练 OS 开发的人来说太香了——地铁上掏出手机就能调内核,不用背着笔记本到处跑。

跑老软件方面,Windows XP 镜像里装了几个经典软件:Winamp 2.x、UltraEdit、Flash Player 9,都能正常启动。但有个硬伤是没有网络——bochs 安卓版不支持 NE2000 或 e1000 网卡,也就意味着模拟器里的系统上不了网,下载不了东西,只能用之前拷进磁盘镜像里的文件。这个限制对很多场景来说是致命的。

FreeDOS 的体验就比较流畅了,启动只要几秒钟,命令行操作响应很快。bochs 在安卓上模拟 DOS 环境的效率比跑 GUI 系统高不少,毕竟 x86 模拟 DOS 本来就是 Bochs 的强项。如果你只是想跑一些 DOS 下的老工具,bochs 完全够用。

几个不得不说的槽点

第一是性能。跑 Windows XP 桌面还算能接受,但打开资源管理器或者切换窗口的时候明显能感觉到延迟,不是卡顿那种,是有点"拖"的感觉。我拿骁龙 8 Gen 2 的手机测的,如果是老点的手机可能就不是"拖"而是"卡"了。

第二是没有声音。bochs 安卓版不模拟 ES1370 或 SB16 声卡,跑起来全程静音。对不需要声音的场景无所谓,但想在里面玩个老游戏或者听个老版本的 Winamp 就别想了。

第三是触控交互的局限。虽然长按能出右键菜单,但很多 PC 软件的交互逻辑还是围绕鼠标键盘设计的,光靠触控完成不了。比如在命令行里选中一段文本复制粘贴,就得先切到软键盘、再切鼠标模式、再按 Ctrl+C、再长按出粘贴菜单——整个过程比在桌面上直接 Ctrl+C Ctrl+V 繁琐太多。

bochs 跑 FreeDOS 的命令行界面

适合谁

bochs 安卓版是一款定位非常清晰的工具,它的受众也很明确。适合两类人:一是正在学习 OS 开发的人,尤其是想在碎片时间调 Bootloader、看分页、查断点的,bochs 完整的调试器加上手机便携性几乎是刚需级的组合;二是喜欢折腾老软件、老系统的复古爱好者,在手机里装个 Windows 95 或者 FreeDOS,重温一下童年的软件环境,比在桌面版 Bochs 里折腾更有仪式感。

不适合的也有两类:想在手机上"当电脑用"的,别指望 bochs 能替代云电脑或者远程桌面,性能、网络、声音三个硬伤摆在那儿;完全不懂 x86 架构、只想装个 APK 点开就用的普通用户,bochs 需要自己准备 BIOS、磁盘镜像、配置文件,门槛比一般模拟器高好几个量级。

我自己的结论是——bochs 安卓版做的事情桌面版 Bochs 早就能做,但它的价值恰恰在于把 PC 模拟器的能力压缩进了手机这个便携形态里,让原本只能在桌面完成的调试、学习、折腾,变成了可以随时随地掏出来干的事。如果你恰好有这个需求,那它就是一款很实在的工具。

本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。

團子還試過這些