android设备刷入原生Linux——postmarketOS配置与体验
一、查找设备Linux支持情况
通常较旧的设备例如骁龙625/骁龙820/骁龙410等设备或是使用mtk处理器的chromebook有较好的PostmarketOS官方支持,可以通过查询postmarketOS Wiki-Devices网站查看是否有自己的设备支持。此外,被官方支持的设备(例如红米2和红米note4x)大多数有第三方开发者移植自己的Ubuntu或是debian,更多预编译Linux内核与Rootfs可以在互联网上搜索,当然有想法折腾的也可以自己克隆源代码编译。
需要注意的是,大多数设备都不能完美的支持Linux,即刷入Linux系统后手机的部分甚至是大部分设备例如摄像头和扬声器甚至GPU都是无法工作的,仅仅可以完成特定工作,或者只是为了好玩,否则Linux绝对没有android系统更适合你的设备。
为什么Andorid设备可以启动Linux?甚至是Windows?
通常,Android设备的引导程序是基于U-Boot或Bootloader等其他专有的引导加载程序,这与我们熟知的计算机有所不同。为了让Linux系统能够顺利启动,首先需要通过修改引导过程,使用像lk2nd这样的工具进行引导。lk2nd是一个轻量级的引导加载程序,bootloader引导lk2nd,lk2nd再去引导完整的linux内核,骁龙845设备利用UEFI启动Windows也是类似原理,但不是利用lk2nd。
这里我使用的android设备是红米note4x,其采用骁龙625处理器,性能不高但好在功耗够低,并且二手机价格足够便宜,非常适合折腾刷机,可以看到官方对该型号的支持较好,网上还有许多大佬制作的其他Linux发行版,但是硬件驱动确实PostmarketOS做的最好,甚至电话短信都是正常的。
二、刷入
1. 下载或构建rom
对于PostmarketOS官方支持的设备,可前往official images下载预构建Rom,非官方支持的型号可使用pmbootstrap软件自行构建,这里暂不讨论。
在official images中,edge为滚动发行版本,软件为最新版。
其中phosh
图形界面与kde mobile
使用体验较好,可以自行选择体验。
2. fastboot刷机
下载下来的镜像通常会有3个,分别对应lk2nd
、boot
与rootfs
,解压出img镜像后进行操作。
首先将设备进入fastboot模式,刷入lk2nd
1 |
|
等重启后会进入lk2nd界面,在此界面会显示设备相关信息,继续使用fastboot命令分别刷入boot和rootfs到boot分区和userdata分区。
1 |
|
再次重启后,即可引导开机。
三、启动
由于我选择内置phosh图形界面,启动成功会进入phosh的锁屏界面,默认账户密码为147147,输入成功即可解锁,第一次开机会出现欢迎界面。使用图形界面正常的连接wifi后,记下IP地址,还需要打开Settings->System->Secure Shell
才可以愉快的使用ssh连接。
不过可能是bug,我尝试在图形界面中启用ssh并不生效,只能在终端中手动使用命令启用了。
1 |
|
使用sudo执行命令时,发现sudo自动被替换成了
doas
,据说会比sudo更安全。
执行完成后,本以为可以远程ssh访问了,事情似乎没那么简单,出现了下面的错误,在我尝试几次仍然无法连接之后,又重试几次,登陆成功了。非常奇怪。
1 |
|
四、配置系统
1. 更换软件源
上手一个全新的Linux第一步当然是更换软件源加速软件包下载,我直接使用ustc和tuna镜像源,直接将下面的配置内容放入/etc/apk/repositories
即可。当然也可以使用其他镜像源。
postmarketOS默认是不安装vim
的,但是支持vi
。
1 |
|
2. 软件包管理
postmarketOS基于alpine linux构建,使用apk管理软件包,常用操作如下:
1 |
|
3. Shell
默认的ash
通常没有fish
或配置过的zsh
好用,为了简便,我直接选择了fish
作为我的shell,但不作为默认shell,避免出现某些配置错误,在需要时输入fish
即可。
1 |
|
4. 新建账户
系统内置账户user
,密码为147147
,但我们仍然可以创建新账户,同时保留原来的账户,旧账户用来图形界面登陆即可。
1 |
|
进行这些操作之后,新账户已经可以正常使用,并具有sudo权限,然后可以重新使用ssh登陆新账户。
5. 启用swap
刷入的postmarketos默认是启用zram的,由于我将rootfs刷入userdata
分区,system
分区可以格式化作为swap
来使用,当然也可以作为其他分区使用。
命令如下:
1 |
|
这两条命令即可临时启用system
分区作为swap,但不会开机应用,要想开机自动挂载需要将以下内容添加进入``文件末尾:
1 |
|
使用system
作为swap之前:
1 |
|
挂载成功后:
1 |
|