在一加6T (OnePlus 6T, OnePlus Fajita) 设备通过UEFI运行Arch Linux ARM

前言

站内已经有了一篇较为详细的教程(传送门:在骁龙(835 845 855等)设备通过UEFI运行Archlinux - Linux - Renegade Project (renegade-project.tech)来指引你安装Arch Linux,但是这篇教程年代略有些久远,而且现今需要执行的安装步骤和教程有所出入,故进行教程重写。

此教程已经经过了我自己一步步的测试,该教程中现在应该不存在任何错误和疏漏以及不详细的细节,理论应该能保证每个人都能顺利安装,但毕竟人总有马虎大意之时,如有错误和疏漏,请在评论区告诉我!

Installtion Guide : Arch Linux ARM for OnePlus 6T (fajita)

警告!

如果您 继续 跟随此教程,您将有可能遇到 如下情况,包括但不限于:

  • 设备变砖(即无法开机)
  • 设备分区损坏
  • 数据丢失
  • 被爸妈毒打一顿

如果您仍要跟随此教程,则表示您已知晓其中的风险,并且除了您没有人会对您损坏的设备负责教程作者对此不负任何责任,也没有义务帮您恢复设备!

选择权现在在您的手上了!

您已经被警告过了!!!

0. 准备工作

  • 懂得基础的计算机常识和术语
  • 一台有Ubuntu22.04环境的电脑(可以用wsl,本教程编写时就使用的wsl。虚拟机理论也可以,但不建议用虚拟机
  • 正确配置了环境变量的python环境
  • adb工具(最好配置到了环境变量,不然不太方便)
  • 已解锁BootLoader
  • 设备已root
  • 一个termux
  • 一个能使用终端的第三方Recovery (如果您找不到合适且好用的Recovery,可以用这个
  • 有救砖的能力
  • 能根据实际情况更改后续教程中命令里的路径
  • 一颗热爱折腾的心
  • 永不言弃

1. 编译内核

首先打开你的Ubuntu环境,如果您使用wsl,您可能需要设置静态dns来让wsl联网

WSL静态DNS设置方法

编辑 /etc/wsl.conf :

sudo nano /etc/wsl.conf

在文件首部添加这一段:

[network]
generateResolvConf = false

保存并退出(按Ctrl + X,再按Y,回车来保存)

然后打开一个cmd窗口,输入:

wsl --shutdown

重新打开你的wsl,输入:

sudo nano /etc/resolv.conf

然后在里面输入以下内容来添加dns (可以把114.114.114.114换成其他的dns)

nameserver 114.114.114.114

保存并退出,在cmd窗口输入:

wsl --shutdown

重新打开wsl,现在你应该可以联网了。

然后前往这个诱人的为sdm845准备的Linux内核的仓库:

查看所有的分支:

选择一个您喜欢的分支(注:如无特殊需求,默认分支即可,并且您应该选择有“sdm845/xxx”的字样的分支,如:“sdm845/6.10-dev”)

本教程以sdm845/6.10-dev为例

前往您的Ubuntu环境,安装如下的依赖:

sudo apt install build-essential openssl pkg-config libssl-dev libncurses5-dev pkg-config minizip libelf-dev flex bison  libc6-dev libidn11-dev rsync bc liblz4-tool gcc-aarch64-linux-gnu dpkg-dev dpkg git qemu-user-static zstd

创建一个工作环境便于您进行操作:

cd ~
mkdir workspace
cd workspace

克隆仓库:

git clone --depth=1 https://gitlab.com/sdm845-mainline/linux.git -b sdm845/6.10-dev
# 若您使用其他分支,请把 sdm845/6.10-dev 改为您选择的分支

然后耐心等待克隆完成。
ps:如果失败了,可能是由于网络环境差导致的,您应当重新执行克隆。如果有条件,可以通过科学的上网来加速

Cloning into 'linux'...
remote: Enumerating objects: 90070, done.
remote: Counting objects: 100% (90070/90070), done.
remote: Compressing objects: 100% (83704/83704), done.
remote: Total 90070 (delta 9122), reused 45531 (delta 5430), pack-reused 0 (from 0)
Receiving objects: 100% (90070/90070), 247.93 MiB | 7.42 MiB/s, done.
Resolving deltas: 100% (9122/9122), done.
Updating files: 100% (85019/85019), done.

如果出现了上面的提示,说明克隆完成了。
进入刚克隆好的源码目录:

cd linux

生成 .config 并编译内核:

make ARCH=arm64 defconfig sdm845.config
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

然后按几次回车,直到你看见这样的界面了:


然后等待一段时间……

当您编译完成时,您就可以进行下一步了。

ps:请使用5.19以上版本的内核,否则您将需要手动为内核添加音频驱动!
参见:在骁龙(835 845 855等)设备通过UEFI运行Archlinux

2. 制作rootfs

2.1. 进入Arch Linux ARM环境

返回您的工作目录,并下载Arch Linux ARM

cd ~/workspace
wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz

ps:如果觉得速度慢,可以换成这个:

wget https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/os/ArchLinuxARM-aarch64-latest.tar.gz

接着我们就可以开始制作了,输入如下命令:

dd if=/dev/zero of=archlinux.img bs=1G count=15
mkfs.ext4 archlinux.img
mkdir arch
sudo mount archlinux.img arch
cd arch
sudo tar -xpvf ../ArchLinuxARM-aarch64-latest.tar.gz

等待解压完成后,再输入如下命令来进入Arch Linux ARM的环境:

cd ..
sudo mount --bind /dev arch/dev
sudo mount -t devpts devpts arch/dev/pts -o gid=5,mode=620
sudo mount -t proc proc arch/proc
sudo mount -t sysfs sysfs arch/sys
sudo mount -t tmpfs tmpfs arch/run

sudo rm -rf arch/etc/resolv.conf && sudo cp /etc/resolv.conf arch/etc/

sudo chroot arch

2.2. 初始化系统

  1. 输入下面的命令来使pacman拉取最新的keyring:
pacman-key --init
pacman-key --populate archlinuxarm
  1. 换源 (加快国内的访问速度) 并更新系统文件:
    (此处换的是清华源)
nano /etc/pacman.d/mirrorlist
#编辑完成后,按Ctrl + X后,按Y,回车来保存文件

#在文件的最顶端添加以下配置,可以同时注释掉其它所有镜像(可选)
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo
#保存并退出

接着执行以下命令:

pacman -Syyu
pacman -S wget
  1. 开启pacman的彩色显示 (可选,推荐
nano /etc/pacman.conf

找到如下内容:

# Misc options
#UseSyslog
#Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
#ParallelDownloads = 5

去除Color前的注释:

# Misc options
#UseSyslog
Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
#ParallelDownloads = 5

保存并退出。

  1. 添加danctnix源 (可选,不推荐,因为此源在国内速度很慢)
具体步骤

执行如下命令:

nano /etc/pacman.conf
[community]
Include = /etc/pacman.d/mirrorlist

[alarm]
Include = /etc/pacman.d/mirrorlist

[aur]
Include = /etc/pacman.d/mirrorlist

在下面添加:

[danctnix]
Server = https://archmobile.mirror.danctnix.org/$repo/$arch/

保存并退出,然后输入如下命令来添加keyring并更新:

cd ~
wget https://archmobile.mirror.danctnix.org/danctnix/aarch64/danctnix-keyring-2-1-any.pkg.tar.xz
pacman -U danctnix-keyring-2-1-any.pkg.tar.xz

pacman-key --init
pacman-key --populate danctnix

rm danctnix-keyring-2-1-any.pkg.tar.xz
# clean

pacman -Syy
  1. 卸载旧的内核和firmware并返回Ubuntu
pacman -R linux-aarch64 linux-firmware linux-firmware-whence
exit
  1. 安装新的内核与firmware
    回到您工作目录下的linux文件夹中,并执行如下命令:
cd ~/workspace/linux
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  INSTALL_MOD_PATH=~/workspace/arch modules_install
sudo make ARCH=arm64 INSTALL_PATH=~/workspace/arch/boot install

然后回到您的工作目录,下载firmware并放入Arch Linux Arm环境中:

cd ~/workspace

wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/linux_firmware-20240608/linux-firmware-oneplus-sdm845-20240510.b9d2bf23-1-any.pkg.tar.zst
wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/linux_firmware-20240608/linux-firmware-oneplus-sdm845-qcom-20240510.b9d2bf23-1-any.pkg.tar.zst
wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/linux_firmware-20240608/linux-firmware-oneplus-sdm845-sensors-20240510.b9d2bf23-1-any.pkg.tar.zst
wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/linux_firmware-20240608/linux-firmware-oneplus-sdm845-whence-20240510.b9d2bf23-1-any.pkg.tar.zst

mv linux-firmware-oneplus-sdm845-20240510.b9d2bf23-1-any.pkg.tar.zst ./arch/root
mv linux-firmware-oneplus-sdm845-qcom-20240510.b9d2bf23-1-any.pkg.tar.zst ./arch/root
mv linux-firmware-oneplus-sdm845-sensors-20240510.b9d2bf23-1-any.pkg.tar.zst ./arch/root
mv linux-firmware-oneplus-sdm845-whence-20240510.b9d2bf23-1-any.pkg.tar.zst ./arch/root

重新进入Arch Linux Arm环境:

cd ~/workspace
sudo chroot arch

安装firmware:

cd ~
pacman -U linux-firmware-oneplus-sdm845-whence-20240510.b9d2bf23-1-any.pkg.tar.zst
pacman -U linux-firmware-oneplus-sdm845-sensors-20240510.b9d2bf23-1-any.pkg.tar.zst
pacman -U linux-firmware-oneplus-sdm845-qcom-20240510.b9d2bf23-1-any.pkg.tar.zst
pacman -U linux-firmware-oneplus-sdm845-20240510.b9d2bf23-1-any.pkg.tar.zst

启用一加6T的音频:

wget https://mirror.ghproxy.com/https://github.com/J0SH1X/tfa98xx/blob/mainline/tfa98xx.cnt
mv ~/tfa98xx.cnt /usr/lib/firmware/

修改/etc/mkinitcpio.conf:

nano /etc/mkinitcpio.conf

找到

# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image.  This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()

在“BINARIES=()”填入内容,让它变成这样:

BINARIES=(/usr/lib/firmware/qcom/sdm845/oneplus6/a630_zap.mbn /usr/lib/firmware/qcom/sdm845/oneplus6/ipa_fws.mbn)

保存并退出,然后输入如下内容:

ls /usr/lib/modules
#获取内核版本,然后在下面换成你自己克隆到的分支的版本
#你可能需要把这个记下来,因为后面要用!

#下条命令以6.10-dev分支作为例子(6.10.0-rc2-sdm845-g3e9f7c18a3f6)
mkinitcpio --generate /boot/initrd.img-6.10.0-rc2-sdm845-g3e9f7c18a3f6 --kernel 6.10.0-rc2-sdm845-g3e9f7c18a3f6

2.3. 配置系统

  1. 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 设置locale
nano /etc/locale.gen
#找到 en_US.UTF-8 UTF-8,并把前面的“#”去掉
#找到 zh_CN.UTF-8 UTF-8,并把前面的“#”去掉
#保存并退出

locale-gen
  1. 自定义主机名
#当然,你可以把“OnePlus6T”改成别的
echo 'OnePlus6T' > /etc/hostname
  1. alarm(Arch Linux ARM内置非root用户)的配置
    输入下面的命令, 更改 alarm 用户的密码,并添加到 wheel 用户组
passwd alarm
#输入新密码
#确认新密码

usermod -aG wheel alarm

然后输入下面的命令,安装 sudo,设置 sudo 权限

pacman -S sudo
EDITOR=nano visudo

找到下面这样的一行,把前面的“#”去掉:

#%wheel ALL=(ALL:ALL) ALL

(ps:你也可以选择去掉下面这行而不是上面那行的“#”)

#%wheel ALL=(ALL:ALL) NOPASSWD: ALL

(ps:这会使你在使用sudo时不再需要使用密码,对手机来说很方便,但是不是很安全,选择权在你)

  1. 安装必要软件包
pacman -S base base-devel dhcpcd iwd grub efibootmgr networkmanager bluez bluez-utils pulseaudio-bluetooth qrtr rmtfs git wget ntfs-3g usbutils modemmanager

systemctl enable NetworkManager bluetooth qrtr-ns rmtfs ModemManager
  1. 安装 pd-mapper 和 tqftpserv
cd ~

git clone https://mirror.ghproxy.com/https://github.com/andersson/pd-mapper.git
git clone https://mirror.ghproxy.com/https://github.com/andersson/tqftpserv.git -b topic/spdx

cd pd-mapper && make && make install && cd ..
cd tqftpserv && make && make install && cd ..

rm -rf tqftpserv pd-mapper

sudo systemctl enable tqftpserv pd-mapper
  1. USB 网络
wget https://archmobile.mirror.danctnix.org/danctnix/aarch64/danctnix-usb-tethering-0.2-1-aarch64.pkg.tar.xz
wget https://p64.arikawa-hi.me/danctnix/aarch64/danctnix-keyring-2-1-any.pkg.tar.xz

pacman -U danctnix-keyring-2-1-any.pkg.tar.xz

pacman-key --init
pacman-key --populate danctnix

rm danctnix-keyring-2-1-any.pkg.tar.xz

pacman -U danctnix-usb-tethering-0.2-1-aarch64.pkg.tar.xz
systemctl enable usb-tethering.service
  1. 安装其他软件,开启功能

中文字体、桌面环境 (你可以把gnome换成别的,但是启动的就不是gdm服务了,请自行更改为别的) 、网络浏览器 (也可以把chromium换成别的)

pacman -S noto-fonts-cjk gnome chromium
systemctl enable gdm

yay

su alarm
cd ~
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin && makepkg -si
exit

alsa-ucm-conf

wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/alsa-ucm-oneplus-0.5.10/alsa-ucm-oneplus-0.5.12-0-any.pkg.tar.zst
pacman -U alsa-ucm-oneplus-0.5.12-0-any.pkg.tar.zst

确保tfa98xx模块加载

echo 'snd-soc-tfa98xx' > /etc/modules-load.d/snd-soc-tfa98xx.conf

通话音频

wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/q6voice/q6voiced-0_git20240608-0-aarch64.pkg.tar.zst
wget https://mirror.ghproxy.com/https://github.com/silime/ArchLinux-Packages/releases/download/q6voice/tinyalsa-git-2.0.0+58.r595.20240621.7f06b2f-1-aarch64.pkg.tar.zst
pacman -U tinyalsa-git-2.0.0+58.r595.20240621.7f06b2f-1-aarch64.pkg.tar.zst
pacman -U q6voiced-0_git20240608-0-aarch64.pkg.tar.zst
systemctl enable q6voiced

2.4. 打包

清理终端历史记录,删除无用文件以减小包体积

pacman -Scc
#会出现两次询问,都要输入Y并回车

su alarm
rm ~/* -rf
cat /dev/null > ~/.bash_history && history -c && exit

rm ~/* -rf
cat /dev/null > ~/.bash_history && history -c && exit
#上面没有写重复,这是分别给两个用户清楚的

解除挂载其他分区,但保留arch的挂载

cd ~/workspace
sudo umount ~/workspace/arch/run
sudo umount ~/workspace/arch/sys
sudo umount ~/workspace/arch/proc
sudo umount ~/workspace/arch/dev/pts
sudo umount ~/workspace/arch/dev

用tar打包

cd ~/workspace/arch
sudo tar -czvf ~/workspace/arch.tar.gz *

3. 安装到手机

3.1. 重新分区

首先让手机进入到你的Recovery环境
下载此处的parted分区工具,然后把parted传入手机:

adb push "G:\parted" /sbin
#你需要自行更改parted的文件路径,后面的/sbin不要改!

打开parted:

adb shell
#如果你使用adb操作的话

chmod 755 /sbin/parted
umount /data && umount /sdcard
#如果提示umount: /data: Device or resource busy,请在Recovery内手动取消挂载Data,然后执行umount /sdcard

parted /dev/block/sda

输入p查看你的手机的分区情况:

p

会得到一个表:

Model: SAMSUNG KLUEG8U1EA-B0C1 (scsi)
Disk /dev/block/sda: 253GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name         Flags
 1      24.6kB  32.8kB  8192B                ssd
 2      32.8kB  33.6MB  33.6MB  ext4         persist
 3      33.6MB  34.6MB  1049kB               misc
 4      34.6MB  35.7MB  1049kB               param
 5      35.7MB  36.2MB  524kB                keystore
 6      36.2MB  36.7MB  524kB                frp
 7      36.7MB  305MB   268MB   ext4         op2
 8      305MB   316MB   10.5MB               oem_dycnvbk
 9      316MB   326MB   10.5MB               oem_stanvbk
10      326MB   334MB   8290kB               reserve1
11      334MB   351MB   16.6MB               reserve2
12      351MB   352MB   524kB                config
13      352MB   3350MB  2999MB  ext2         system_a
14      3350MB  6349MB  2999MB  ext2         system_b
15      6349MB  6454MB  105MB                odm_a
16      6454MB  6559MB  105MB                odm_b
17      6559MB  253GB   128GB   ext4         userdata

如果你的一加6T不是256GB版本,userdata的大小可能有所出入,但分区情况应当一致。
接下来需要压缩userdata分区来给其他分区腾出位置,如果你知道这一步在做什么,你可以自行按需调整分区分配大小,但不要把userdata完全删除了!!推荐至少留下32G来给Android系统来为分区后重新安装Magisk、Termux和放入rootfs做准备

对于256GB版本,可以这样分区:

压缩userdata分区来给 Arch Linux ARM 和 ESP 腾出空间:

resizepart 17
#手机内部存储的所有内容会在此步全部丢失!请先做好备份!切记!

#输入:135GB

建立分区:

mkpart esp fat32 135GB 136GB
mkpart arch ext4 136GB 253GB
set 18 esp on
对于128GB版本,可以这样分区:

压缩userdata分区来给 Arch Linux ARM 和 ESP 腾出空间:

resizepart 17
#手机内部存储的所有内容会在此步全部丢失!请先做好备份!切记!

#输入:61GB

建立分区:

mkpart esp fat32 61GB 62GB
mkpart arch ext4 62GB 125GB
set 18 esp on

输入q退出parted:

q

然后重新启动到Recovery。

3.2. 初始化分区

adb shell
#如果你使用adb进行操作

mkfs.fat -F32 -s1 /dev/block/by-name/esp
mke2fs -t ext4 /dev/block/by-name/arch
mke2fs -t ext4 /dev/block/by-name/userdata

然后就可以重新启动到Android系统了。

3.3. 获取 UUID

重新安装好Magisk和Termux,备用。
用adb获取UUID,输入:

adb shell

su
#你可能需要在手机上确认给予shell root权限
blkid /dev/block/by-name/arch

记下UUID值,备用。

3.4. 安装 Arch Linux ARM 和 GRUB 引导加载器

将你在 2.4 步骤中打包得到的arch.tar.gz放入手机存储
下载这里的所有文件到电脑,然后解压boot.tar.gz
找到grub.cfg,然后用最熟悉的编辑器打开,找到 UUID ,把它替换成 3.3 步骤中得到的UUID。

UUID一般长的像这样:

a3136376-a245-477a-9222-3a75bc3c9af8

3a12afa8f91aef1d2d2fb693b93d0e13eae37729_2_690x106

再将文件里的内核版本号更改掉,不然你相当于告诉 GRUB 去引导一个压根不存在的文件

把这个内核版本号(5.18.0-sdm845-00109-gf7ad1e5036bb-dirty)替换成你在 2.2.6 步骤中得到的内核版本号:

6.10.0-rc2-sdm845-g3e9f7c18a3f6

(ps:上面这个版本号是以 6.10-dev 分支为例的)
保存grub.cfg,打包回boot.tar.gz,然后把esp.zip和重新打包好的boot.tar.gz也放入手机内部存储

在手机内部存储创建boot文件夹,解压boot.tar.gz里的所有文件到里面
直接解压esp.zip到内部存储

打开Termux,输入:

termux-change-repo
#换源以加快国内的下载速度

#按 ↓ 选择到Single,然后按空格,再按回车

#出现长列表后,找到国内的镜像源更换,以清华源为例:
#按方向键 ↑ 或 ↓ 来选择,找到后面写了Mirror by Tsinghua University的那一项,把光标移动过去,然后按空格选中,按回车确认

#等待更新完成

pkg upgrade
#更新所有包确保不会出现奇怪的问题

pkg install root-repo tsu
#安装必要环境

tsu
#需要授权root权限

cd ~
mkdir esp
mkdir arch

mount /dev/block/by-name/esp esp
mount /dev/block/by-name/arch arch
mkdir esp/EFI

把手机内部存储的esp里的文件复制过来:
5445682c3071772a649be8a6fd425b93ba8e04e6

cd esp/EFI
cp -r /sdcard/esp/* ./
cd ~

然后解压rootfs到arch:

cd arch
tar -xpvf /sdcard/arch.tar.gz

等待执行完成……

完成后,把手机内部存储的boot文件夹里的东西复制到此处的boot文件夹:

cd boot
cp -r /sdcard/boot/* ./

然后把手机暂时放在一边,不要退出Termux!

在电脑上获取并添加dtb文件。你需要去这里,找到最新的非edge版本(教程编写时,v24.06为最新版本,所以此处进入了v24.06文件夹),然后找到oneplus-fajita,进入,再进入phosh文件夹,找到里面标记了latest的文件夹并打开,下载这个boot.img到一台有python环境的电脑


(ps:嫌慢可以通过科学的上网加速,或者去postmarketOS的国内镜像站,比如清华源,但请注意,镜像同步是有延迟的,有可能不是最新,但概率极小)

下载后,找一个目录,把下载的文件解压到这里得到 .img 文件,在目录里打开cmd,安装 extract-dtb,执行dtb获取:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple extract-dtb
#可以换成其他的国内镜像站

extract-dtb 20240710-2234-postmarketOS-v24.06-phosh-22.3-oneplus-fajita-boot.img.xz -o .
#末尾有个“.”,看仔细点!
#你需要把上面的镜像名称(20240710-2234-postmarketOS-v24.06-phosh-22.3-oneplus-fajita-boot.img.xz)改成你自己下到的镜像的名称!!!

这样就得到了dtb,dtb名称应当像这样:

01_dtbdump_,OnePlus_6T.dtb

(ps:或者长的类似于这个的东西,但一定不是“kernel_00”!!)
把它改名为“sdm845-oneplus-fajita.dtb”
然后再复制出一份副本,改名为“sdm845-oneplus-fajita-host.dtb”

把这两个dtb文件放入手机内部存储,在Termux输入:

cp /sdcard/sdm845-oneplus-fajita.dtb ./
cp /sdcard/sdm845-oneplus-fajita-host.dtb ./

(注:你的USB OTG是无法使用的,如果想要使用,请参考这里,不在这里提及的原因是修复OTG会让你在Linux充不了电)

4. Arch Linux ARM,启动!!

重启你的OnePlus 6T到BootLoader。例如,使用adb重启:

adb reboot-bootloader

下载这里的UEFI镜像,然后启动uefi。

对于临时启动
fastboot boot G:\boot-fajita.img
#请自行更改镜像文件实际路径!
对于永久安装

刷入到当前boot分区

fastboot flash boot boot-xxx.img

刷入boot_a

fastboot flash boot_a boot-xxx.img

或boot_b

fastboot flash boot_b boot-xxx.img

可用

fastboot set_active a

fastboot set_active b

切换a/b

按音量 + 或 - 键移动光标到Arch Linux on #17,然后按电源键确认,再按一次电源键启动。
此时你应当进入 GRUB 引导加载器了,同样使用音量键,选择Arch Linux,然后按电源键启动。

恭喜,你已经成功在你的Oneplus 6T上安装了Arch Linux ARM!

6. 注意事项

电源键默认是suspend,但suspend会导致睡死,只能强制重启,推荐你去设置更改电源键行为,并且把自动suspend和息屏关掉。

1 Like

好棒的教程!顶一个!!

开头的链接已修复

您好,我在参考此教程为骁龙410设备编译arch时遇到了一些问题
我按照教程挂载了arch的分区,然后尝试 sudo chroot arch进入chroot环境,但是报错了

no22@DESKTOP-3HL2QBK:~/workspace$ sudo chroot arch
chroot: failed to run command ‘/bin/bash’: Exec format error

于是我查阅资料,修改chroot命令为sudo chroot arch /usr/bin/qemu-aarch64-static /bin/bash
这样的确可以进入chroot环境,但是在里面做不了任何事,比如我输入pacman -V他会提示我bash: /usr/sbin/pacman: cannot execute binary file: Exec format error

我目前所做的:

sudo apt install qemu qemu-user-static binfmt-support
sudo systemctl restart systemd-binfmt
sudo cp /usr/bin/qemu-aarch64-static arch/usr/bin/

同时,我也尝试cat /proc/sys/fs/binfmt_misc/status,返回的结果是enabled
以及,我的系统环境是WSL Ubuntu 24.04

希望您能百忙之中抽空帮我看看,鄙人感激不尽

抱歉 来晚了!
本人目前正处于高三,学业比较忙碌,所以不一定会回!
你这情况我偶然遇到过一次,当时我的情况是依赖没装全。建议再装一次依赖看看有没有漏什么东西!
sudo apt install build-essential openssl pkg-config libssl-dev libncurses5-dev pkg-config minizip libelf-dev flex bison libc6-dev libidn11-dev rsync bc liblz4-tool gcc-aarch64-linux-gnu dpkg-dev dpkg git qemu-user-static zstd