OrzMiku

Dzの窝

山无陵,江水为竭,冬雷震震,夏雨雪,天地合,乃敢与君绝。
github
bilibili
modrinth
email

如何用手机为树莓派烧录系统

陈年旧文警告,这个博文是我高中的时候写的,十分青涩的文章,不过方法应该是可行的

声明#

手机需要有第三方 Recovery(如 TWRP)!!!
本文含有大量个人观点,为实践个人总结,不保证正确性,对应相关操作的理解可能也有失偏颇,如有错误,还望大家及时指出

疫情在家,一直没啥事可以做,整理柜子的时候发现有一台吃灰的树莓派,于是想借他消磨一下时间。没带电脑回家,小区也封了,出不去了,有没有可能用手机给树莓派装上系统呢?

教程#

Step1 材料准备#

已经刷好 twrp 的手机一台,sd 卡一张

如果手机不支持 sd 卡,还需准备一个读卡器,一个 otg 转接口

step2 资料下载#

下载你想要刷入的系统,如果是 img 格式,直接用就行了,如果不是 img 格式,用压缩包形式打开它,把里面 img 格式的文件捞出备用解压出来

本文假设该文件文件名为 sys.img

然后记住改文件的路径

本文假设路径为 /sdcard/Download/sys.img

step3 打开终端,检查分区情况#

手机重启进入 Twrp,进入 “高级 -> 终端”
输入指令检查分区情况

df -h

结果如下(例)

文件系统 容量 已用 可用 已用% 挂载点

/dev/sda1 64G 32G 32G 50 /sdcard

这时插入 sd 卡,再输入指令检查分区情况

df -h

结果如下(例)

文件系统 容量 已用 可用 已用% 挂载点

/dev/sda1 64G 32G 32G 50 /sdcard

/dev/sdg1 32G 1kb 32G 0 /sdcard1

发现多了一行,这一行就是我们的 sd 卡,记住他的文件系统(fileSystem)

本文例子中,sd 卡所在文件系统为 “/dev/sdg1”

Step4 刷入系统#

接着我们开始刷入系统

dd bs=1024000 if=/sdcard/Download/sys.img of=/dev/sdg

注意① 这里会等较长时间,看起来像卡主一样,请耐心等待
注意② if=系统镜像的路径
注意③ **of后面不是sd卡所在文件系统!!这里尤其要注意,本文例子中,sd卡所在文件系统为/dev/sdg1,但是of后面是/dev/sdg,没有1,如果你是“/dev/sdh114514”,那么of后面就要是“/dev/sdh”,没有数字!

命令执行结果出来后,就说明刷入成功了
这时拔出 sd 卡,再重新插入,twrp 首页有一个 “挂载”,进入之后重新挂载一下 sd 卡,再进入 twrp 的文件管理,进入 sd 卡就能看见你刷进去的文件(boot 分区)。

Step5 配置 ssh 和网络(以树莓派官方系统举例,不同系统方法不同)#

进入 twrp 文件管理,在 sd 卡所在目录的根目录创建一个叫做 “ssh” 的文件,这样就开启了 ssh

进入 twrp 文件管理,在 sd 卡所在目录的根目录新建一个叫做 “wpa_supplicant.conf” 的文件,编辑他

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="Wifi名"
    psk="密码"
    key_mgmt=WPA-PSK
    priority=1
}

修改完保存,取出 sd 卡,插上树莓派通电,就基本 OK 了

Step6 ssh 连接树莓派#

树莓派通电后,可以登陆路由器后台看到树莓派的 IP
如果你不能进入路由器后台,或者你正在使用热点给树莓派提供网络,可以用 termux 加 nmap 的方法扫描局域网 ip。

找到树莓派 Ip 后,使用 ssh 连接工具连接即可

树莓派默认账号
用户名:pi
密码:raspberry

常见问题#

AndRoid Shell 中 dd 命令的 bs 参数不支持单位#

bs=1024000 #默认单位为b,1024000就是1M
bs=1M #在Android shell中并不支持这种写法

Termux 可以用 dd 命令,为什么非要用 TWRP 的终端#

我不知道,理论上 termux 是可以的,但是我的 termux 不能正确识别出 sd 卡所在分区,TWRP 可以。后来我在网上查到了相关的教程,虽然不是 termux,但也是用别的 shell 软件,应该是可行的(需要 root 来装 busybox)

待补充#

探索历程#

起初,#

我想通过 termux,运行 linux 版的烧录工具,我在网上搜索了一下,确实有,但是是x86 和 x64 平台的软件,而手机是 arm64的(有些手机是 armhf 的,x86 和 x64 的手机基本没有)
然后我想到模拟 x86 的运行环境,来运行烧录软件,结果是,软件运行起来了,但是sd 卡没法带到模拟环境中去,软件识别不出 sd 卡,这个方案基本就作废了。

Plan B,#

我去 QQ 群里问了一下,一个群友给出了他的思路,使用安卓版的 wine 来运行 Windows 版的烧录软件,我觉得应该可行,去 wine 官网下载了最新版的 Wine For Android。Emmm.... 结果嘛,不支持我的安卓版本,这个方法我也就没试。

然后,#

我基本要放弃了,感觉看不到什么希望(也因为这个操作在网上找不到任何相关的教程,没有人造轮子),就去水群了(bushi。结果群大佬一句话点醒梦中人。Android Shell 是有 dd 命令的,对哦,dd 命令可以用来烧录系统啊。(但是我没深入接触过这个命令,便在网上开始学习)

最后,#

翻阅了很多资料,最后也是掌握了 dd 命令的用法,开始实践。
基本就是格式化 sd 卡所在分区,然后用下面命令烧录系统

dd bs=1024000 if=镜像路径 of=sd卡分区路径

中间遇到了一些小问题,在常见问题中指出

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。