16 歲高中生成功在 iPhone 7 上安裝 Ubuntu 20.04 桌面!

近日,國外一名 16 歲的開發(fā)者發(fā)布了一則視頻,展示自己為一臺已經(jīng)無法正常使用的 iPhone 7 成功移植了 Ubuntu 20.04,并將其作為服務器來使用。
發(fā)布視頻的開發(fā)者網(wǎng)名為?Daniel Rodriguez[1],是一名在校高中生。據(jù) Daniel 介紹,他使用的 iPhone7 來自他的外婆,這臺手機的屏幕、電源等硬件設備基本上保存完好,但由于 NVMe NAND 已經(jīng)完全無法訪問,這意味著這臺手機將永遠無法再運行 iOS 系統(tǒng),基本上已經(jīng)相當于一塊磚頭。于是他拿到這臺手機,萌生了改造它的想法。
Daniel[2] 參考并使用了?checkra1n[3],linux-sandcastle[4],projectsandcastle[5] 等開源項目,同時自己編寫了網(wǎng)橋設置 script/udev 規(guī)則[6]來實現(xiàn)這一復雜的工作。最終成功在這臺壞掉的 iPhone7 上運行了 Ubuntu 20.04 。
來觀摩下他的改造步驟。
準備工作
NFS 服務、dhcp 服務 越獄工具?checkra1n 0.10.2-beta[7] Kernel fork for h9x/A10[8] projectsandcastle 工具[9]。projectsandcastle 是一款針對 iPhone 的 Android/Linux 支持工具,該工具可以給廣大研究人員提供很多實用工具。 你還需要一個運行在 arm64 平臺中的 Ubuntu 系統(tǒng)來進行編譯,或者你也可以使用交叉編譯器,當然最方便的是使用docker buildx。 網(wǎng)橋設置 script/udev 規(guī)則[10]
1. 構(gòu)建 Rootfs
debootstrap?是 Ubuntu 提供的用于建立精簡 Ubuntu 系統(tǒng)的方案,可以在指定的目錄下安裝一個精簡的 Ubuntu 系統(tǒng),除了一些配置以外,其內(nèi)容與使用 Ubuntu 安裝鏡像第一階段安裝的內(nèi)容基本相同。首先要在?arm64?架構(gòu)的 Ubuntu 中安裝 debootstrap:
$?sudo?apt-get?install?debootstrap?-y
假設你的 nfs 服務提供的文件目錄為?/mnt/nfsrootarm64。然后執(zhí)行以下命令:
$?sudo?debootstrap?focal?/mnt/nfsrootarm64
#?chroot?進入新系統(tǒng)
$?chroot?/mnt/nfsrootarm64
#?安裝必要工具
$?apt?install?vim?network-manager?openssh-server
#?修復 LC_ALL 錯誤,選擇 en_US.utf-8 作為默認值。
$?dpkg-reconfigure?locales
#?修復時區(qū)
$?dpkg-reconfigure?tzdata
#?添加用戶
$?adduser?
$?adduser??sudo
#?添加?focal-updates,?focal-backports?和?focal-security
$?vim?/etc/apt/sources.list
2. 編譯內(nèi)核
克隆?Sandcastle 內(nèi)核項目[11],執(zhí)行以下命令生成配置文件:
$?make?hx_h9p_defconfig
然后修改?.config?文件,改動部分如下:
CONFIG_USB_ETH=y
CONFIG_NFS_FS=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_BLK_DEV_INITRD=n // (none needed, otherwise it'll complain about wanting one)
CONFIG_CMDLINE="earlycon=hx_uart,0x20a0c0000 console=tty0 root=/dev/nfs rw nfsroot=
:/nfsrootarm64,vers=4,tcp init=/usr/bin/systemd rootwait ip=dhcp g_ether.host_addr=12:a5:cf:42:92:fd g_ether.dev_addr=5e:bc:ca:27:92:b1 g_ether.idVendor=1317 g_ether.idProduct=42146 mitigations=off" 可以替換其中的 MAC 地址,不替換也無所謂 替換 NFS Server 的地址 CONFIG_ROOT_NFS=y
CONFIG_CMDLINE_FORCE=y
CONFIG_DEBUG_INFO=n // 可以大大加快編譯速度
直接編譯:
$?make?-j?4?Image
編譯完成后,執(zhí)行以下命令生成設備樹,后面 PongoOS 會用到:
$?./dtbpack.sh
最后生成 PongoOS 啟動鏡像:
$?lzma?-z?--stdout?arch/arm64/boot/Image?>?../Image.lzma
3. 通過 pongoOS 加載內(nèi)核和設備樹
克隆 projectsandcastle 項目:
$?git?clone?https://github.com/corellium/projectsandcastle
然后進入 loader 目錄,直接運行以下命令進行編譯:
$?cc?-O2?-Wall?load-linux.c?-lusb-1.0?-o?load-linux
4. 設置網(wǎng)絡
克隆作者的項目:
$?git?clone?https://github.com/newperson1746/iphone7-linux-nfsroot
你可以編輯?ethbridge.sh?來修改網(wǎng)卡名,使其可以作為 udev 接受的參數(shù),不過我比較懶,就不改了。
編輯?70-iphone7.rules,將 MAC 地址修改為步驟 2 中設置的 MAC 地址。然后將?70-iphone7.rules?移動到?/etc/udev/rules.d?目錄中,執(zhí)行以下命令:
$?sudo?udevadm?control?--reload
5. 最后的大招
首先重啟 iPhone 7 進入恢復模式:
將 iPhone 用數(shù)據(jù)線和電腦上的 iTunes 連接;
將 iPhone 關(guān)機;
同時按下電源鍵和**“音量 -”**鍵,看到蘋果 Logo 也不要松開,直到看到下面這個界面;

此時手機已進入恢復模式。
然后啟動越獄工具? checkra1n,不加任何參數(shù)。點擊 start,然后根據(jù)提示進入 DFU 模式。一但進入了 DFU 模式,在手機嘗試啟動進入 iOS 系統(tǒng)之前立即按下? CTRL-C?鍵。執(zhí)行命令? checkra1n -cpE?進入 PongoOS 的命令行模式。執(zhí)行命令? load-linux?進入 Ubuntu 系統(tǒng)。
接下來你就會在屏幕上看到 Ubuntu 會自動配置 DHCP,掛載 rootfs,然后啟動 systemd,進入登錄提示!
你可以通過 DHCP 服務器來查看它的 IP 地址,最后通過 ssh 連接到 iPhone!
以上就是在 iPhone 7 中安裝 Ubuntu 20.04(不帶桌面)的所有步驟,如果你想安裝桌面版,可以參考作者的改進版[13]。
總結(jié)
盡管有網(wǎng)友夸贊其為天才少年,但 Daniel 本人仍然十分謙遜。他表示這些工作都要歸功于 Corellium 和 checkra1n 項目的開發(fā)人員,Linus Torvalds 以及 Linux 內(nèi)核的所有貢獻者,Ubuntu 和 Debian 維護者等等。“他們是為這個項目制作所有作品的真正英雄,而我只是恰好在 iPhone 上很好地組裝了這些前輩們留下的拼圖。”Daniel 說。
參考資料
[1]Daniel Rodriguez:?https://www.youtube.com/channel/UCQrHIS1NFfD06-yE5tdbBUw
[2]Daniel:?https://www.youtube.com/channel/UCQrHIS1NFfD06-yE5tdbBUw
[3]checkra1n:?https://checkra.in/releases/0.10.2-beta#all-downloads
[4]linux-sandcastle:?https://github.com/corellium/linux-sandcastle
[5]projectsandcastle:?https://github.com/corellium/projectsandcastle.git
[6]網(wǎng)橋設置 script/udev 規(guī)則:?https://github.com/newperson1746/iphone7-linux-nfsroot
[7]checkra1n 0.10.2-beta:?https://checkra.in/releases/0.10.2-beta#all-downloads
[8]Kernel fork for h9x/A10:?https://github.com/corellium/linux-sandcastle
[9]projectsandcastle 工具:?https://github.com/corellium/projectsandcastle.git
[10]網(wǎng)橋設置 script/udev 規(guī)則:?https://github.com/newperson1746/iphone7-linux-nfsroot
[11]Sandcastle 內(nèi)核項目:?https://github.com/corellium/linux-sandcastle
[12]<:?https://172.16.13.1
[13]作者的改進版:?https://www.reddit.com/r/linux/comments/kvmsfd/success_iphone_7_booting_ubuntu_2004_to_full/
來源:https://mp.weixin.qq.com/s/u5MmNcKdM37JhGuyPTIZLQ
版權(quán)申明:內(nèi)容來源網(wǎng)絡,版權(quán)歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!

