1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4119字,需瀏覽 9分鐘

         ·

        2021-01-28 14:16

        更多奇技淫巧歡迎訂閱博客:https://www.cxyquan.com/

        前言

        近日,國(guó)外一名 16 歲的開(kāi)發(fā)者發(fā)布了一則視頻,展示自己為一臺(tái)已經(jīng)無(wú)法正常使用的 iPhone 7 成功移植了 Ubuntu 20.04,并將其作為服務(wù)器來(lái)使用。

        發(fā)布視頻的開(kāi)發(fā)者網(wǎng)名為 Daniel Rodriguez[1],是一名在校高中生。據(jù) Daniel 介紹,他使用的 iPhone7 來(lái)自他的外婆,這臺(tái)手機(jī)的屏幕、電源等硬件設(shè)備基本上保存完好,但由于 NVMe NAND 已經(jīng)完全無(wú)法訪問(wèn),這意味著這臺(tái)手機(jī)將永遠(yuǎn)無(wú)法再運(yùn)行 iOS 系統(tǒng),基本上已經(jīng)相當(dāng)于一塊磚頭。于是他拿到這臺(tái)手機(jī),萌生了改造它的想法。

        Daniel[2] 參考并使用了 checkra1n[3],linux-sandcastle[4],projectsandcastle[5] 等開(kāi)源項(xiàng)目,同時(shí)自己編寫(xiě)了網(wǎng)橋設(shè)置 script/udev 規(guī)則[6]來(lái)實(shí)現(xiàn)這一復(fù)雜的工作。最終成功在這臺(tái)壞掉的 iPhone7 上運(yùn)行了 Ubuntu 20.04 。

        來(lái)觀摩下他的改造步驟。

        準(zhǔn)備工作

        • NFS 服務(wù)、dhcp 服務(wù)
        • 越獄工具 checkra1n 0.10.2-beta[7]
        • Kernel fork for h9x/A10[8]
        • projectsandcastle 工具[9]。projectsandcastle 是一款針對(duì) iPhone 的 Android/Linux 支持工具,該工具可以給廣大研究人員提供很多實(shí)用工具。
        • 你還需要一個(gè)運(yùn)行在 arm64 平臺(tái)中的 Ubuntu 系統(tǒng)來(lái)進(jìn)行編譯,或者你也可以使用交叉編譯器,當(dāng)然最方便的是使用 ??docker buildx。
        • 網(wǎng)橋設(shè)置 script/udev 規(guī)則[10]

        1. 構(gòu)建 Rootfs

        debootstrap 是 Ubuntu 提供的用于建立精簡(jiǎn) Ubuntu 系統(tǒng)的方案,可以在指定的目錄下安裝一個(gè)精簡(jiǎn)的 Ubuntu 系統(tǒng),除了一些配置以外,其內(nèi)容與使用 Ubuntu 安裝鏡像第一階段安裝的內(nèi)容基本相同。首先要在 arm64 架構(gòu)的 Ubuntu 中安裝 debootstrap:

        $?sudo?apt-get?install?debootstrap?-y

        假設(shè)你的 nfs 服務(wù)提供的文件目錄為 /mnt/nfsrootarm64。然后執(zhí)行以下命令:

        $?sudo?debootstrap?focal?/mnt/nfsrootarm64

        #?chroot?進(jìn)入新系統(tǒng)
        $?chroot?/mnt/nfsrootarm64

        #?安裝必要工具
        $?apt?install?vim?network-manager?openssh-server
        #?修復(fù) LC_ALL 錯(cuò)誤,選擇 en_US.utf-8 作為默認(rèn)值。
        $?dpkg-reconfigure?locales
        #?修復(fù)時(shí)區(qū)
        $?dpkg-reconfigure?tzdata
        #?添加用戶
        $?adduser?
        $?adduser??sudo
        #?添加?focal-updates,?focal-backports?和?focal-security
        $?vim?/etc/apt/sources.list

        2. 編譯內(nèi)核

        克隆 Sandcastle 內(nèi)核項(xiàng)目[11],執(zhí)行以下命令生成配置文件:

        $?make?hx_h9p_defconfig

        然后修改 .config 文件,改動(dòng)部分如下:

        • 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 地址,不替換也無(wú)所謂
          • 替換 NFS Server 的地址
        • CONFIG_ROOT_NFS=y
        • CONFIG_CMDLINE_FORCE=y
        • CONFIG_DEBUG_INFO=n // 可以大大加快編譯速度

        直接編譯:

        $?make?-j?4?Image

        編譯完成后,執(zhí)行以下命令生成設(shè)備樹(shù),后面 PongoOS 會(huì)用到:

        $?./dtbpack.sh

        最后生成 PongoOS 啟動(dòng)鏡像:

        $?lzma?-z?--stdout?arch/arm64/boot/Image?>?../Image.lzma

        3. 通過(guò) pongoOS 加載內(nèi)核和設(shè)備樹(shù)

        克隆 projectsandcastle 項(xiàng)目:

        $?git?clone?https://github.com/corellium/projectsandcastle

        然后進(jìn)入 loader 目錄,直接運(yùn)行以下命令進(jìn)行編譯:

        $?cc?-O2?-Wall?load-linux.c?-lusb-1.0?-o?load-linux

        4. 設(shè)置網(wǎng)絡(luò)

        克隆作者的項(xiàng)目:

        $?git?clone?https://github.com/newperson1746/iphone7-linux-nfsroot

        你可以編輯 ethbridge.sh 來(lái)修改網(wǎng)卡名,使其可以作為 udev 接受的參數(shù),不過(guò)我比較懶,就不改了。

        編輯 70-iphone7.rules,將 MAC 地址修改為步驟 2 中設(shè)置的 MAC 地址。然后將 70-iphone7.rules 移動(dòng)到 /etc/udev/rules.d 目錄中,執(zhí)行以下命令:

        $?sudo?udevadm?control?--reload

        5. 最后的大招

        • 首先重啟 iPhone 7 進(jìn)入恢復(fù)模式:
        1. 將 iPhone 用數(shù)據(jù)線和電腦上的 iTunes 連接;

        2. 將 iPhone 關(guān)機(jī);

        3. 同時(shí)按下電源鍵“音量 -”鍵,看到蘋(píng)果 Logo 也不要松開(kāi),直到看到下面這個(gè)界面;

        4. 此時(shí)手機(jī)已進(jìn)入恢復(fù)模式。

        • 然后啟動(dòng)越獄工具 checkra1n,不加任何參數(shù)。
        • 點(diǎn)擊 start,然后根據(jù)提示進(jìn)入 DFU 模式。一但進(jìn)入了 DFU 模式,在手機(jī)嘗試啟動(dòng)進(jìn)入 iOS 系統(tǒng)之前立即按下 CTRL-C 鍵。
        • 執(zhí)行命令 checkra1n -cpE 進(jìn)入 PongoOS 的命令行模式。
        • 執(zhí)行命令 load-linux 進(jìn)入 Ubuntu 系統(tǒng)。

        接下來(lái)你就會(huì)在屏幕上看到 Ubuntu 會(huì)自動(dòng)配置 DHCP,掛載 rootfs,然后啟動(dòng) systemd,進(jìn)入登錄提示!

        你可以通過(guò) DHCP 服務(wù)器來(lái)查看它的 IP 地址,最后通過(guò) ssh 連接到 iPhone!

        以上就是在 iPhone 7 中安裝 Ubuntu 20.04(不帶桌面)的所有步驟,如果你想安裝桌面版,可以參考作者的改進(jìn)版[13]。

        總結(jié)

        盡管有網(wǎng)友夸贊其為天才少年,但 Daniel 本人仍然十分謙遜。他表示這些工作都要?dú)w功于 Corellium 和 checkra1n 項(xiàng)目的開(kāi)發(fā)人員,Linus Torvalds 以及 Linux 內(nèi)核的所有貢獻(xiàn)者,Ubuntu 和 Debian 維護(hù)者等等?!八麄兪菫檫@個(gè)項(xiàng)目制作所有作品的真正英雄,而我只是恰好在 iPhone 上很好地組裝了這些前輩們留下的拼圖。”Daniel 說(shuō)。

        參考資料

        [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)橋設(shè)置 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)橋設(shè)置 script/udev 規(guī)則: https://github.com/newperson1746/iphone7-linux-nfsroot

        [11]

        Sandcastle 內(nèi)核項(xiàng)目: https://github.com/corellium/linux-sandcastle

        [12]

        <: https://172.16.13.1

        [13]

        作者的改進(jìn)版: https://www.reddit.com/r/linux/comments/kvmsfd/success_iphone_7_booting_ubuntu_2004_to_full/


        你可能還喜歡


        長(zhǎng)按進(jìn)入小程序,進(jìn)行打卡簽到

        新一期打卡簽到,獎(jiǎng)品超多


        (更多精彩值得期待……)

        最近熱文:
        Python獲得TIOBE年度編程語(yǔ)言,附上學(xué)習(xí)資料!
        再見(jiàn)了,收費(fèi)的Navicat
        假如計(jì)算機(jī)是中國(guó)人發(fā)明的,那代碼應(yīng)該這么寫(xiě)!
        Netflix創(chuàng)始人:我不要求996,一樣市值1萬(wàn)億
        一個(gè)月薪 12000 的北京程序員的真實(shí)生活 !
        LeetCode1-160題匯總,希望對(duì)你有點(diǎn)幫助!

        2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語(yǔ),等等。在公眾號(hào)內(nèi)回復(fù)「資源」,即可免費(fèi)獲取!回復(fù)「社群」,可以邀請(qǐng)你加入讀者群!


        ??給個(gè)「在看」,是對(duì)我最大的支持??
        瀏覽 46
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            散兵被啪到深处喷水漫画 | 最新中文字幕第一页 | 色小说香蕉 | 999久久久久 | 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 把护士日出水120分钟视频 | 色伊人 | av资源首页| 青娱乐乱伦 | 动漫3D精品一区二区三区乱码 |