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

发布时间 2023-08-20 16:01:58作者: OrzMiku

声明

手机需要有第三方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卡分区路径

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