本教程面向小白,大部分工作都借助如codex,opencode等 AI Agent 工具完成操作。
利用现成的 Debian 刷机包,只替换 rootfs,得到更轻量的 Alpine 系统。应该适用于所有有可用 Debian 包的 骁龙410 随身 WiFi 设备。
操作流程
1. Fork 仓库并克隆到本地
Fork kinsamanka/OpenStick-Builder 到自己的 GitHub 账号。
注意:Fork 时取消勾选「仅复制 main 分支」,我们需要 alpine 分支。
Fork 完成后把 alpine 分支克隆到本地(建议将 Fork 后的仓库地址告诉 Agent,由 Agent 完成克隆,避免分支选错等问题)。
1
|
克隆 https://github.com/kinsamanka/OpenStick-Builder 的 alpine 分支到本地,先不要改代码,阅读这个项目结构,说明主要目录、使用方式
|
这里的项目地址需要替换为你 Fork 后的仓库地址
2. 准备工作区
在工作区放两个文件夹:
1
2
3
|
工作区/
├── OpenStick-Builder/ ← 克隆的项目(alpine 分支)
└── 刷机包/ ← 你的设备的完整 Debian 刷机包(含 boot.img、rootfs.img等)
|
刷机包就是你设备当前能用的那个 Debian 刷机包。
3. 复制提示词,发送给 Agent
打开你的 AI Agent,把工作区两个文件夹都加进去,然后复制发送下面的提示词(系统配置按需修改):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
请先不要改代码,先阅读 OpenStick-Builder 项目代码,理解项目结构。
背景:
- 刷机包文件夹里是一个可用的 Debian 一键刷机包(MSM8916 平台)
- 项目代码里已经有完整的构建脚本(alpine 分支)
- 我需要你帮我把这套构建适配到我的设备
你要做的事:
1. 从刷机包的 rootfs.img 里提取内核模块(/lib/modules/ 整个目录)和WiFi 固件(/lib/firmware/ 下的 wcnss.b00-b11、wcnss.mdt、wlan/prima/WCNSS_qcom_wlan_nv.bin、mba.mbn、qcom/a300_*.fw、qcom/venus-1.8/),放到项目的 prebuilt/<设备名>/ 对应目录。
2. 从刷机包复制底层固件(aboot.bin、gpt_both0.bin、hyp.mbn、rpm.mbn、sbl1.mbn、tz.mbn 等)到 prebuilt/<设备名>/,供 extract_fw.sh 使用。如果刷机包里没有这些文件,可以从工作流中去掉 extract_fw.sh 步骤。
3. 修改构建脚本(alpine_rootfs.sh、extract_fw.sh),把里面的路径改为 prebuilt/<设备名>/
4. 内核模块的目标目录名必须和内核版本字符串完全一致(从 /lib/modules/ 下的目录名获取)
5. 修改主机名、root 密码为我指定的值
6. 修改 .github/workflows/build.yml 里的 artifact 名称为我的设备名
核心规则(违反会导致设备变砖):
- 绝对不要修改、重新打包、或重新生成 boot.img
- boot.img 直接使用刷机包里的原始文件
- 我们只构建 rootfs.img,boot.img 由刷机包提供
系统配置:
- 主机名:OpenStick
- root 密码:password
- SSH:PermitRootLogin yes,host keys 在宿主机用 ssh-keygen 预生成
- USB 网络:NCM gadget,VID=0x1D6B PID=0x0104,IP 192.168.5.1/24 shared
- WiFi 热点:SSID Openstick,密码 12345678,IP 192.168.4.1/24 shared
- WiFi 模块自动加载:/etc/modules-load.d/wcnss.conf 写入 qcom_wcnss_pil
- 首次启动自动扩容:/etc/local.d/resize-rootfs.start,
用 awk '$2 == "/" {print $1}' /proc/mounts 获取根设备,resize2fs 扩容
- 不需要 ModemManager(不插 SIM 卡)
- 频率由内核 schedutil 动态管理,不需要额外配置
- 需要安装 e2fsprogs-extra(提供 resize2fs)
- rc-update add local default(否则 local.d 脚本不执行)
构建环境:GitHub Actions ubuntu-latest,qemu-aarch64-static 交叉构建。
Alpine v3.24,postmarketos 仓库 v25.12(msm-firmware-loader、rmtfs)。
rootfs 镜像:512MB ext4,分区标签 rootfs,img2simg 转 sparse。
完成后请检查所有改动是否完整一致,给我总结完成情况。
|
4. Agent 完成后,推送到仓库
Agent 改完代码后,把改动提交并推送到你 Fork 仓库的 alpine 分支。
也可以直接让 Agent 完成提交和推送。
1
|
提交代码至 Github 仓库的 alpine 分支,并根据当前 git diff,生成一条清晰的 commit message。
|
5. 触发 GitHub Actions 构建
打开你 Fork 的仓库页面 → Actions(操作) → 对应的工作流 → Run workflow(运行工作流程) → 选 alpine 分支 → 点绿色按钮。
等构建完成(大约 2 分钟),刷新页面,底部会多出一个 Artifact(附件)。下载附件到本地,里面有构建出的 rootfs.img。
如果报错就带着日志发给 Agent ,让他修复后重新推送和触发构建。
6. 处理产物
把下载的附件解压,将 rootfs 复制到刷机包文件夹里,替换原来的 rootfs 。
注意与刷机包的 rootfs 后缀保持一致,如附件中的 rootfs 为 .bin 格式,但是实际刷机包中为 .img 格式,就需要将附件中的 rootfs 修改为 .img 格式。
7. 刷机
运行刷机包原有的脚本刷入即可。
刷入完毕后,Windows 设备管理器里出现「Linux Foundation NCM」网卡即说明启动成功。然后 ssh root@192.168.5.1 登录。
验证是否成功
- 设备管理器出现 PID:0104 → 正常
- 设备管理器出现 PID:9006 → 内核未启动,检查 boot.img 是否为刷机包原始文件
- 能 ping 通 192.168.5.1 → USB 网络正常
出问题怎么办
- 设备变砖:进入 9008 模式擦除 boot 分区,设备即可自动进入 fastboot 模式
- SSH 连不上但设备管理器有 NCM 网卡:等 30 秒再试,首次启动要生成熵和扩容