编译固件
把固件源码下载到树莓派上,直接在上面编译。
- 120 分钟
- 在树莓派上
固件直接在树莓派上编译。这样钱包上运行的程序,从来没有以成品的形式经过其他机器。
DIY 版本改了什么
源码来自 OneKey 的 Classic 1S 固件,加上一小组为了在树莓派上运行而做的改动。这些改动很重要,因为这个固件能在普通电脑上运行的版本,原本是给开发者测试用的,不是用来存钱的:
- 随机数来自芯片。 未修改的版本在每台电脑上生成的助记词都一样,因为它的随机数来自一个固定公式。DIY 版本直接读取树莓派芯片里的硬件随机数发生器,它采集的是电路里的电子噪声。每个字节都要经过 NIST SP 800-90B 规定的启动检测和持续健康检测,再把用量四倍的原始字节用 SHA-256 压缩成一份输出。发生器不存在或任何一项检测不通过,钱包就停下来,不会生成助记词。
- 不接受外部连接。 未修改的版本接受整个网络的连接,DIY 版本只接受树莓派本机程序的连接。
- 关闭调试接口。 调试接口可以读出助记词。下面的编译命令会把它关掉。
- 屏幕和按键。 在 1.3 寸屏幕上显示、读取摇杆,而不是在桌面上开一个窗口。
- 存储和这块板子绑定。 存下来的钱包用一个和这块树莓派序列号有关的密钥加密。
相对 OneKey 原始代码的所有改动都在同一个页面上,可以完整查看:GitHub 上的 DIY 改动。
安装编译工具
sudo apt update
sudo apt install -y git build-essential python3-venv protobuf-compiler libprotobuf-dev下载源码
大约要下载 600 MB。
git clone --depth 1 --branch diy https://github.com/rayston92/firmware-classic1s.git ~/wallet
cd ~/wallet
git submodule update --init --recursive --depth 1确认拿到的正是这份教程对应的代码:
git log -1 --format=%H应该显示 287341b8338d00c16da8700258944ac97e44114f。如果显示的是别的,说明这份教程核对之后分支有了变化。继续之前,先看看改了什么。
准备 Python 环境
编译时要用几个 Python 工具生成代码。把它们放在单独的文件夹里:
python3 -m venv ~/wallet-venv
. ~/wallet-venv/bin/activate
pip install "nanopb==0.4.*" protobuf mako munch click requests typing_extensions编译
cd ~/wallet/legacy
EMULATOR=1 DIY_HAT=1 DEBUG_LINK=0 BITCOIN_ONLY=1 ./script/cibuildBITCOIN_ONLY=1 会去掉比特币以外的所有币种,这是你在我的配置里选的。
在树莓派 Zero 2 W 上要花一段时间,估计一到两个小时(还没在真机上计过时)。编译时会不断滚动以 CC 开头的行。出现警告是正常的,提示符重新出现就说明编译完了。在这之前别让电脑休眠:SSH 窗口一断,编译就会停下。重新登录后再运行同一条命令,它会接着往下编译。
如果之后重新登录,再次编译前先运行 . ~/wallet-venv/bin/activate。
检查点
ls -lh firmware/onekey_emu.elf应该能看到一个文件,大小约 5 MB7 MB。这就是你的钱包固件。