写在前面
到目前为止,我已经花了非常多的时间去学习和了解x86架构和RISC-V架构,对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过,学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢,那是因为总是捧着手机躺在床上刷视频,那离我们确实够近的。所以探究arm架构已经arm Linux是非常有必要的,在这篇文章开始写之前的一年,我已经进行了 解bl锁,刷机,root ,刷模块,改调度等一系列操作。其实Android玩机真的挺有趣的,一旦获取到root权限,可以做很多操作,可以加深对Android系统和Linux内核的理解。但是我认为这样还不够,Android还不够自由,我们完全可以直接在手机上跑Linux.但是我们同时必须要有心理准备 -- 即Linux Phone的软件生态肯定是远远不如Android的,你在Android上能做到的很多很容易的操作,在Linux Phone上会觉得非常困难,并且会缺少很多基础功能,还会出现兼容性问题、内核缺少模块等一系列难以解决的问题,可以说局限性是很大的。最重要的是,它的实用性其实并不是太多,你拿来做移动端桌面确实是不太好用,不过拿来学习Arm和Linux已经很足够了,你也可以拿来当服务器用。就是说你得会折腾以及想折腾,否则这个刷机就不适合你了。
在进行刷机之前,你需要掌握fastbot和adb的基本命令和bootload、recovery的那一套,最好是自己已经刷过了Android系统,这样的话基本上就没什么难度了。如果你不是很清楚刷机流程,可以看一下这个视频。
极客湾刷机教程
把这个视频看完,多看几遍,至少这个解开bl锁是必须学会的。只有解开bl锁你才能对你的手机进行底层操作,这是厂家规定的。
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
在解开BL锁之前,用户是无法自由进行刷机操作和ROOT操作的。部分手机官方为了保证手机的安全,为手机设置了BL锁,在BL锁未解的情况下,用户是不能自行刷机或获取ROOT权限的。
这里温馨提示一下,解开bl锁之后相当于进行了“恢复出厂设置”操作,你的所有数据都会消失。所以在正式刷机之前你必须保存数据,除非你和我一样把它作为备用机,数据无所谓。
同时你需要知道的是,你不能把手机当成是x86平台的电脑,x86平台安装系统非常简单,只要明确UEFI BIOS还是latency BIOS,然后使用ISO制作的启动盘安装就好了。手机其实是属于嵌入式设备,你要把它当成是嵌入式看待,你的内核想要具备哪些功能也不是你自己说了算而是内核上游以及设备树提供了哪些代码。可以说,你的Linux Phone具备哪些能力是在构建的时候就已经大体上确定了,嵌入式都是定制的系统。
1、选择
在这样的前提下,我选择了postmarketOS这个Linux ,因为它对Linux Phone的支持最好,软件生态也做的比较多,其他Linux发行版要么不提供Linux Phone,要么就是软件生态不行,基础功能都没有。并且网络上关于postmarketOS的教程也是颇多的,你可以多了解一下。postmarketOS还提供了多个桌面环境,你可以选择其中的一个,或者全部试一遍,这也是一个好处。
postmarketOS提供了四个桌面环境,我们可以挨个尝试过去,看看哪一个最好。
2、实验用到的环境
本篇文章刷机用到的桌面端系统还是Fedora ,因为在刷机前你需要解bl锁,这是需要adb和fastboot命令的,其实你用什么系统都行,只要提供这两个命令。
你可以用淘汰掉的老手机,我的话就在闲鱼上淘了一个一加6T,不用太贵,越便宜越好,因为Linux Phone的实用性确实不高,一加6T的SoC是骁龙845 ,我会在后面说明为什么选择这一块SoC来刷机。而且它的配置是8+128 ,如果想流畅一点可以选择8GB内存的,不过鉴于它的实用性不高,大家买便宜一点的就行,到时候如果放着吃灰就不会亏太多。
3、刷机前体验
由于我已经刷好postmarketOS并且体验一段时间了,为了增加读者的阅读兴趣,我先在这里放几张截图,大家可以先“脑补”体验一下。
1.GNOME MOBILE
以上是GNOME mobile桌面,和桌面GNOME是很像的,它对移动端的适配还算好,但其实这个桌面环境体验下来还是会觉得有点难受,特别是在打开自动亮度之后,一直调节,晃瞎你的眼。
这里我用我的主力机去拍我的备用机,GNOME mobile桌面是可以截图的,只是截图之后发到我的电脑会比较麻烦,有线也传不了,所以我就用手机拍摄了,大家见谅。
这样体验下来其实比较难受,它完全不如Android ,不过也能看出来,GNOME mobile已经很努力在适配了,很多地方都在向Android看齐。
由于腾讯linuxqq积极适配Linux端,提供了多个架构的版本,因此是可以在这上面跑linuxqq的,就是体验不怎么样。
用ssh连接之后
虽然说桌面体验不怎么样,不过你可以使用ssh去连接,这样就获得了一个体验正常的终端。不过如果仅仅是想获得终端体验的话,其实它还不如Qemu虚拟机来得方便一些。所以说如果你有合适的旧手机拿来刷Linux还是比较合适的;如果你买一个的话,感觉有点亏,除非拿来做服务器。
2. KDE
KDE这边看起来是比GNOME好看一点,但是实际的体验我觉得没有GNOME好,很多地方的输出都会糊掉,让人眼花缭乱的。因为我在KDE没有待多久,我只留下了这两张图片。
一、基础知识
1、刷机相关的知识
其实刷Linux Phone的本质和普通的刷机是一样的,都是在bootloader里使用fastboot命令对系统分区进行刷写,你需要刷的是boot分区和userdata或者system分区,这和一般的嵌入式刷系统是一样的,只不过你不需要拆开手机去点击什么按钮。各厂家都有自己的方式让手机开机的时候停留在bootloader模式。也就是进入fastboot模式,这个步骤在极客湾的刷机视频里说的已经很明确了。
1、adb命令
我们现在还没有正式开始刷机,因此现在的手机上跑的还是Android操作系统,adb是安卓调试桥,你必须掌握一些命令才好玩机。等你刷成了Linux Phone之后你就不需要adb了,但目前还是需要的。
在使用adb之前,你需要先打开你的手机的开发者模式,然后在开发者模式里打开USB调试
连续点击五次版本号,就能打开开发者模式。无论你是哪一个版本的Android,都可以这样去打开。
然后打开USB调试,这样我们才能使用adb命令。
打开之后回到Fedora,安装adb命令,fastboot也在这个包里。
sudo dnf install android-tools
安装好了之后,把你的手机连接到电脑。
2、postmarketOS相关知识
在刷入postmarketOS前我们需要对这个系统进行一定的了解,这样进入系统后我们才知道要做什么。
postmarketOS是一个专门为手机准备的Linux发行版,它的设计初衷就是为手机而生,是基于Alpine Linux开发的。可以说,只要你掌握了Alpine Linux,那么postmarketOS也就会用了。
Alpine Linux概述
这一篇文章写的非常好,其中有几点你需要注意一下:
- 使用apk作为包管理器,这里的apk不是安装的apk安装包而是Alpine Linux的包管理器名
- 以 OpenRC 作为初始化(init)系统,也就是不使用systemd,不存在systemctl命令
- 基于musl libc和BusyBox而不是glibc
从上面几个特点可以看出来,postmarketOS和Alpine Linux都是以简洁、小巧、嵌入式为特点设计的。是能小就小,使用了openRC 和 musl这意味着使用体验和你平时使用的systemd系统完全不同,一定要注意一下。
相信大家也看出来了,为什么我选择了postmarketOS,根本原因就是它专门为手机设计,做了很多移动端的适配,这是一个非常大的优势,是其他Linux发行版不具有的。据说Fedora项目组也已经入局制作移动端适配的Fedora了,但是也不知道何年何月才会发布出来。
postmarketOS并不是任何一台手机都能刷入的,并且不同手机的适配情况也不同,因此postmarketOS官方给出了一张表格,来说明哪些手机的支持好、哪些手机的支持不好、哪些手机可以刷入pmOS。为了简单称呼,在此之后的postmarketOS我都叫做pm.
pm支持的设备
Phones
Device | Codename | Architecture | USB Net | Flashing | Touch | Screen | Wifi | FDE | Battery | 3D | IMU | Audio | Bluetooth | Camera | GPS | Mobile Data | SMS | Calls | USB-OTG | NFC |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BQ Aquaris X5 | bq-paella | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - | |
Fairphone 4 | fairphone-fp4 | AArch64 | Y | Y | Y | Y | Y | Y | N | Y | N | N | Y | N | N | N | Y | P | N | N |
Lenovo A6000 | lenovo-a6000 | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - | - | ||
Lenovo A6010 | lenovo-a6010 | AArch64 | Y | Y | Y | Y | Y | Y | P | Y | Y | Y | Y | Y | Y | Y | P | - | ||
LG Optimus Vu | lg-p895 | ARMv7 | Y | Y | Y | Y | Y | Y | Y | P | Y | Y | Y | P | Y | |||||
Motorola Moto G4 Play | motorola-harpia | AArch64 | Y | Y | Y | Y | Y | Y | P | Y | Y | Y | Y | N | Y | Y | Y | Y | P | |
Nokia N900 | nokia-n900 | ARMv7 | Y | N | Y | Y | Y | Y | Y | N | Y | Y | N | P | Y | Y | Y | P | - | - |
OnePlus 6 | oneplus-enchilada | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | P | Y | Y | P | P | N |
OnePlus 6T | oneplus-fajita | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | P | Y | Y | P | P | N |
PINE64 PinePhone Pro | pine64-pinephonepro | AArch64 | Y | - | Y | Y | Y | Y | P | Y | Y | Y | Y | P | Y | Y | Y | Y | N | - |
Samsung Galaxy A3 (2015) | samsung-a3 | AArch64 | Y | Y | Y | P | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | |
Samsung Galaxy A5 | samsung-a5 | AArch64 | Y | Y | Y | P | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y | Y |
Samsung Galaxy E7 | samsung-e7 | ARMv7 | Y | Y | Y | P | Y | Y | Y | Y | P | Y | Y | N | Y | Y | Y | Y | Y | |
Samsung Galaxy Grand Max | samsung-grandmax | ARMv7 | Y | Y | Y | Y | Y | Y | Y | Y | P | Y | Y | N | Y | Y | Y | Y | - | |
Samsung Galaxy S III | samsung-m0 | ARMv7 | P | Y | Y | Y | Y | Y | Y | Y | Y | P | P | N | N | N | N | |||
Samsung Galaxy S4 Mini Value Edition | samsung-serranove | ARMv7 | Y | Y | Y | P | Y | Y | Y | P | - | Y | Y | N | Y | Y | Y | Y | - | - |
SHIFT SHIFT6mq | shift-axolotl | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | Y | Y | Y | N | N |
Wileyfox Swift | wileyfox-crackling | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | P | - | |
Xiaomi Mi A1 | xiaomi-tissot | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | P | P | Y | P | Y | - |
Xiaomi Mi A2 Lite | xiaomi-daisy | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | P | P | P | Y | P | Y | - |
Xiaomi Mi Note 2 | xiaomi-scorpio | AArch64 | Y | Y | Y | Y | Y | P | P | Y | N | P | Y | P | N | N | P | N | Y | Y |
Xiaomi Pocophone F1 / POCO F1 | xiaomi-beryllium | AArch64 | Y | Y | Y | Y | Y | Y | P | Y | Y | Y | Y | N | P | Y | Y | Y | N | - |
Xiaomi Redmi 2 | xiaomi-wt88047 | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y | - |
Xiaomi Redmi 4 Prime | xiaomi-markw | AArch64 | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y | P | P | P | Y | Y | Y | - |
Xiaomi Redmi 5 Plus | xiaomi-vince | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | P | Y | P | P | P | Y | P | Y | - |
Xiaomi Redmi Note 4 / 4X | xiaomi-mido | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | P | P | P | Y | Y | Y | - |
Xiaomi Redmi S2 / Redmi Y2 | xiaomi-ysl | AArch64 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | P | P | P | Y | Y | Y | - |
实际上能用来刷机的手机是非常少了,也就那么几个,而且很多功能都不支持。
表格中,Y表示完全支持,N表示完全不支持,P表示部分支持。
其中支持程度比较高并且很容易获取到的就是一加6和一加6T.它们的SoC都是骁龙845.这是一块非常特殊的Soc.具体特殊在哪里呢?
这块SoC连Windows11都能刷,那么给刷成Linux也是非常合理的吧。
二、开始刷机
1、使用官方预构建的镜像
使用官方预构建的镜像刷机是非常简单容易的,但是经过我的试验,我是失败的,也就是说我只能通过第二种方法刷入postmarketOS.
2、自己构建
这种方法最稳妥,只要你的手机被postmarketOS支持,那么就是可以刷入的。缺点就是会占用比较大的磁盘空间,你需要有心理准备。