前言 Link to heading

最近想要买一个实体物理密钥,关注到了Yubikey,发现已经贵的离谱了(参考它之前促销的价格),而且中国大陆地区还无法直接收到(即使海外,也要10美金),转运+运费+售价,已经是天价了,国内淘宝平台卖的更贵。

所以就在Google上搜索有没有平替。就搜索到了这篇文章 但由于过了一年多,项目发生了一些变化。原项目因为作者想要商业化圈钱,故发售了许可证,30欧元/设备,这个价格和去购买成品Yubikey几乎没有什么区别了。甚至这只是一个许可证。

如果想要实现fido2+openpgp的,原作者支持此功能的的pico-fido2不提供代码并且需要付费licence,但是开源社区有一个亲测可用的Fork,因此本教程都是基于此Fork所进行。


硬件选择 Link to heading

在2026年的今天,目前有且仅有推荐RP2350


准备工作 Link to heading

  • 硬件:RP2350 树莓派开发版
  • 系统:最好使用Windows 11/Linux
  • 网络:能够正常访问 GitHub。

第一阶段:安装与配置 WSL (Windows 本地 Linux 子系统) 若使用Linux跳转至此 Link to heading

由于嵌入式编译在 Linux 环境下最为稳定和友好,我们将使用微软官方的 WSL 工具,在 Windows 中直接无缝运行一个 Ubuntu Linux 系统。

  1. 右键点击 Windows 的“开始”按钮,选择 Windows PowerShell (管理员)终端 (管理员)
  2. 在弹出的蓝色或黑色窗口中,输入以下命令并回车:
    1
    
    wsl --install
    
  3. 系统会自动下载并安装 WSL 核心组件以及默认的 Ubuntu 发行版。
  4. 安装完成后,重启你的电脑
  5. 重启后,系统通常会自动弹出一个名为 “Ubuntu” 的命令行窗口。如果没有自动弹出,请在 Windows 开始菜单中搜索 “Ubuntu” 并打开它。
  6. 首次启动需要等待一两分钟解压文件。
  7. 随后,系统会提示你创建一个 Linux 用户名 (Enter new UNIX username) 和密码 (New password)。
  8. 看到绿色的命令提示符(例如 username@hostname:~$),说明你的 Linux 环境已经搭建完毕

第二阶段:搭建底层编译环境 Link to heading

接下来的所有命令,都请在刚刚打开的 Ubuntu 终端 中执行。我们将安装交叉编译工具链和官方开发包。

1. 安装基础编译工具 Link to heading

先更新系统缓存,然后安装必需的编译器和构建工具:

1
2
3
4
5
# 更新软件包列表(切勿跳过)
sudo apt update && sudo apt upgrade -y

# 安装交叉编译器、C标准库、CMake及其他依赖包
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential git python3 -y

2. 获取树莓派官方 Pico SDK Link to heading

Pico SDK 包含了操作底层硬件的必须代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 确保在用户主目录
cd ~

# 克隆官方 SDK 仓库
git clone https://github.com/raspberrypi/pico-sdk.git

# 进入 SDK 目录并拉取必需的底层子模块(如 tinyusb, mbedtls 等)
# ⚠️ 这一步极易漏掉,漏掉必报错!
cd pico-sdk
git submodule update --init

3. 配置永久环境变量 Link to heading

CMake 需要知道你的 SDK 放在了哪里。我们将路径永久写入配置文件:

1
2
3
4
5
6
7
8
# 将环境变量写入 bash 配置
echo 'export PICO_SDK_PATH=~/pico-sdk' >> ~/.bashrc

# 刷新配置使其立即生效
source ~/.bashrc

# 验证是否成功(如果终端输出了你的 sdk 路径即为成功)
echo $PICO_SDK_PATH

第三阶段:获取源码与编译固件 Link to heading

环境搭建完毕后,就可以开始获取 FIDO2 的核心代码并进行编译了。

1. 克隆 FIDO2 项目源码 Link to heading

这里我们使用Fork了付费以前仓库的 librekeys 分支。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 回到主目录
cd ~

# 克隆仓库
git clone https://github.com/librekeys/pico-fido2.git

# 进入项目目录
cd pico-fido2

# ⚠️ 初始化并更新项目本身的子模块(包含关键的密码学组件)
git submodule update --init --recursive

2. 执行 CMake 配置 (针对 Pico 2 优化) Link to heading

为了保持代码目录整洁,我们需要创建一个独立的 build 文件夹,并显式声明 Pico 2 的硬件架构。

1
2
3
4
5
6
7
# 创建并进入构建目录
mkdir build
cd build

# 执行 CMake 预编译配置
# 参数解释:指定主板为 pico2,平台架构为 rp2350-arm-s
cmake .. -DPICO_BOARD=pico2 -DPICO_PLATFORM=rp2350-arm-s

3. 开始多线程编译 Link to heading

调用电脑的所有 CPU 核心火力全开,加速编译过程:

1
make -j$(nproc)

耐心等待终端进度条跑到 [100%] Built target。编译成功后,当前的 build 目录下会生成一个名为 pico_fido2.uf2 的固件文件。


第四阶段:提取与烧录 Link to heading

固件现在躺在 Linux 虚拟机里,我们需要用一键命令把它调出来,并刷入 Pico 2。

1. 从 WSL 提取固件 Link to heading

在刚才完成编译的 build 目录路径下,输入以下命令:

1
explorer.exe .

(注意:explorer.exe. 之间有一个空格)

此时 Windows 系统会自动弹出一个文件资源管理器窗口,里面正是 WSL 的 build 文件夹。找到 pico_fido2.uf2 文件并将其拖到你的 Windows 桌面上备用。

刷入教程,尽请期待