最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【教程】三星Galaxy a6(exynos7870)開啟KVM內(nèi)核虛擬機(jī)

2022-10-07 02:24 作者:持平之粉TWRP  | 我要投稿


【1-1-1】前言

KVM:既Kernel-based Virtual Machine

你可以叫它linux內(nèi)核虛擬機(jī)

這是一個內(nèi)核功能 你可以在編譯內(nèi)核的時候?qū)⑺_啟 或者作為一個模塊載入內(nèi)核

有了它 你可以讓linux內(nèi)核變成一個hypervisor

配合QEMU運(yùn)行硬件虛擬化加速支持的虛擬機(jī)


安卓內(nèi)核是基于linux

所以 編譯安卓內(nèi)核開啟kvm就可以實現(xiàn)了~嗎

這里就要糾正一下了?不可行~(除極少數(shù)特殊設(shè)備可能具備條件) 就連網(wǎng)上說成功率最高的獵戶座也不行


這里以arm64架構(gòu)進(jìn)行討論(x86不在本次討論范圍)

我們市邊上大部分手機(jī)都是arm64架構(gòu)的

arm64又是一個精簡指令集

果想要讓kvm工作的話 光靠編譯內(nèi)核開啟虛擬化和kvm是不足夠的?

首先排除自身CPU以及CPU的OEM廠商對虛擬化的限制

剩下的就涉及到一個新的概念:arm64異常級別(Exception Level 簡稱為EL)

這里的異常指的是 在精簡指令集(RISC)體系結(jié)構(gòu)中 中斷或打斷程序正常執(zhí)行的事件 //不理解沒關(guān)系


arm64有4個異常級別EL0/1/2/3

arm64異常級別圖

這里就簡單的說明一下吧

ARM64處理器在EL0時執(zhí)行進(jìn)程

在EL1時執(zhí)行內(nèi)核

EL2對應(yīng)的是虛擬機(jī)監(jiān)控器

EL3對應(yīng)的是安全監(jiān)控器

其中arm64架構(gòu)安全擴(kuò)展又分為正常世界和安全世界 通過安全監(jiān)視器EL3(三星的SBOOT貌似是運(yùn)行在此級別上)進(jìn)行切換

我們需要注意的是?這里面有個異常級別二(EL2)對應(yīng)的是虛擬機(jī)監(jiān)控器


∥∥而kvm想要正常工作 必須要運(yùn)行在EL2上? 并且kvm是屬于內(nèi)核空間 因此為了方便切換 讓內(nèi)核運(yùn)行在EL2便是整個安卓kvm成功的關(guān)鍵問題


##############################

這里是后期(2023-3-18日編輯) 現(xiàn)在回過頭來看這篇文章 認(rèn)為讓內(nèi)核直接運(yùn)行在EL2這個說法在本篇文章不行.?armv8 的kvm實現(xiàn)有兩種模式 一種是nvhe(內(nèi)核與hypervisor處于不同異常級別)另一種是vhe(及內(nèi)核與hypervisor處于同一類異常級別下) 經(jīng)查閱資料 我認(rèn)為 galaxy a6 exynos7870 這臺設(shè)備 采用后門 漏洞方式進(jìn)入EL2 并不是整個內(nèi)核全部跑在EL2上 而是通過“后期kvm初始化例程”實現(xiàn)的 而天機(jī)1100的紅米note 10 pro 則是內(nèi)核與hypervisor在同一異常級別下并隨內(nèi)核啟動 因此 修改內(nèi)核的.config就可以實現(xiàn)kvm的啟用


但目前的arm手機(jī)的kvm并不足以啟動woa這一類的操作系統(tǒng) 看不同設(shè)備情況而異


本人小白 說的不對 還望見諒



可是手機(jī)廠商對這個異常級別是不開放的(pixel6系列是個意外)

這個地方往往被手機(jī)廠商用來執(zhí)行一些自定義代碼

如果這個級別被開放 那么它的權(quán)限將高于整個系統(tǒng)

(舉一個例子 我們解鎖了設(shè)備的bootloader 也僅僅是對EL1完全掌控)


但是啊 有一個例外在github與XDA論壇上發(fā)生了


他便是我們今天的主角 三星Galaxy A6


這臺手機(jī)搭載了獵戶座7870 SOC 定位是2018年發(fā)布的中端機(jī)型 但是命運(yùn)就和他交上火了


經(jīng)過xda論壇大佬的努力 這臺手機(jī)目前已經(jīng)可以成功開啟kvm內(nèi)核虛擬機(jī)的支持


其基本原理(僅個人理解)是"三星Trustzone留有一個后門用于在el2加載與執(zhí)行自定義代碼的接口 這個接口(位于init/vmm.c ? vmm_goto_EL2)在三星的內(nèi)核中被用于加載專有RKP管理程序 xda大佬正是利用這個接口 使用漏洞的方式讓其進(jìn)入后門EL2 以支持KVM工作"


不過現(xiàn)在這個設(shè)備上的KVM還是殘血狀態(tài) 還有很多問題沒有解決

因為寄存器捕獲的問題是無法運(yùn)行windows系統(tǒng)的

只能夠運(yùn)行打過補(bǔ)丁的部分linux系統(tǒng)



而UP聽說以后也毫不猶豫的去干了一臺來


接下來以我自己的經(jīng)驗和踩坑為大家分享一下這臺設(shè)備如何開啟kvm支持吧(雖然不能運(yùn)行windows但是畢竟現(xiàn)在arm開kvm的設(shè)備是少的可憐 先把教程做出來吧)


開始之前

你應(yīng)該準(zhǔn)備如下東西

1.x64架構(gòu)的linux電腦一臺(推薦ubuntu)

2.x64架構(gòu)的windows電腦一臺(推薦windows10)

3.Samsung Galaxy A6 手機(jī)一部(國內(nèi)貌似很少人用)

4.UP主為你們整理好的文件

(https://cloud.189.cn/t/UBvMvyNjIJbi(訪問碼:llp9)

你還更應(yīng)該注意以下事項

1.本教程不討論任何有關(guān)于這樣做的意義問題(生命的意義在于折騰)

2.本教程僅適用于安卓9的系統(tǒng) 小人不才 沒有能力給安卓10的內(nèi)核源碼進(jìn)行補(bǔ)丁適配 (怪我沒有好好學(xué)C語言,目前沒有C語言基礎(chǔ)) 如果是安卓8的話請升級到安卓9 oneui 1.0 安卓10的話請試著刷一個第三方的安卓9的包 但是這樣子沒有辦法保證系統(tǒng)bug的問題 三星把版本信息寫到了bootloader的里面 唉 無奈

2.在進(jìn)行教程時你的設(shè)備有任何不適請立即停止

3.在進(jìn)行教程時務(wù)必做好數(shù)據(jù)備份

4.在開始之前最好找一份 你當(dāng)前系統(tǒng)版本的5件套文件

三星手機(jī)救磚理念:只要Download模式在 那就還有救

本教程可能涉及到的一些知識點有

刷機(jī)解鎖淦內(nèi)核/基本Linux操作/三星刷機(jī)工具奧丁的使用/QEMU初步/安卓軟件linux deploy 等等等...


那么教程正式開始嘍~




【1-2-1】Bootloader的解鎖


千里之行,始于解鎖

無論你干什么 先把設(shè)備的bl解鎖了 那才有折騰的權(quán)力

這個手機(jī)呢? 用的不是三星的狼滅溶斷式解鎖

而是開關(guān)式


具體的方法是這樣

1.保證設(shè)備聯(lián)網(wǎng)(不然這個開關(guān)不會顯示出來)

2.連續(xù)點版本號 直到提示你已進(jìn)入開發(fā)者模式

3.備份好這個手機(jī)上的所有重要數(shù)據(jù)

4.進(jìn)入開發(fā)者選項/找到oem解鎖/將它開啟/

此時會提示你恢復(fù)出廠設(shè)置

按照他的做就可以

恢復(fù)完成以后按照正常流程激活手機(jī)

重復(fù)上述步驟打開開發(fā)者選項

此時oem解鎖應(yīng)該顯示這個樣子

這樣子就成功解鎖了bl

是不是很簡單呢?

連電腦都不用

但是這么簡單也是有坑的(這里先提前說明一下)

當(dāng)你對系統(tǒng)進(jìn)行改動以后(例如root)之后的操作如果涉及到恢復(fù)出廠設(shè)置

請一定要每次激活進(jìn)入系統(tǒng)以后重復(fù)上述操作 打開oem解鎖開關(guān)

否則當(dāng)你對系統(tǒng)執(zhí)行任何修改操作

都會觸發(fā)三星的安全檢查 導(dǎo)致設(shè)備鎖定拒絕啟動

都會觸發(fā)三星的安全檢查 導(dǎo)致設(shè)備鎖定拒絕啟動

都會觸發(fā)三星的安全檢查 導(dǎo)致設(shè)備鎖定拒絕啟動

都會觸發(fā)三星的安全檢查 導(dǎo)致設(shè)備鎖定拒絕啟動

此時設(shè)備上的任何數(shù)據(jù)都會丟失

并且只能通過重刷5件套才能恢復(fù)


【1-2-2】第三方rec的刷入


由于三星將fastboot更改成了Download模式

所以無法采用自定義fastboot命令將rec刷入

這里就需要用到三星的奧丁刷機(jī)工具了


具體的操作是這樣的:

1.在up主分享的文件里面找到三星刷機(jī)工具并安裝驅(qū)動以及解壓odin3-v3.13.1.zip

2.打開奧丁 并且在分享的文件里找到 /第三方recovery/TWRP/TWRP-3.2.3-TwrpBuilder-a6ltexx-2018-11-26_20-43.tar

3.在奧丁里面勾選"AP"并且點擊"AP"按鈕選中TWRP-3.2.3-TwrpBuilder-a6ltexx-2018-11-26_20-43.tar

4.點擊options并關(guān)掉auto reboot選項

打開奧丁
點確定
勾選AP
點擊AP
選中TWRP

點擊options并關(guān)掉auto reboot

5.手機(jī)完全關(guān)機(jī)狀態(tài)下按住音量加與減 再將數(shù)據(jù)線連接到電腦并插入手機(jī)

6.手機(jī)上面按一下音量上鍵進(jìn)入Download模式

手機(jī)會顯示這個畫面/這個時候需要按一下音量上鍵進(jìn)入Download

此時手機(jī)進(jìn)入Download模式


7.奧丁連接正常后按下start開始刷機(jī) 上面的格子中出現(xiàn)綠色的pass說明刷機(jī)成功

正在刷機(jī)中

刷機(jī)成功

8.刷機(jī)成功后拔掉數(shù)據(jù)線并一直按住電源鍵和音量下鍵

等待設(shè)備重啟后 會進(jìn)入TWRP

但是很可惜 這個TWRP是有問題的

他無法解密這個設(shè)備的data分區(qū) 從而導(dǎo)致一些不必要的麻煩 (每次都要格式化data才能連接到mtp以及進(jìn)入系統(tǒng)) 所以接下來我們把它換成橙狐rec

data解密失敗造成的麻煩

9.進(jìn)入TWRP 首先點清除/格式化data分區(qū)/輸入yes

重啟一次recovery

然后 將分享文件中的 橙狐rec安裝zip包以及recovery.img文件拷到手機(jī)上


先用TWRP刷入橙狐的recovery.img

然后再重啟到橙狐rec安裝完整的橙狐zip安裝包


為什么不直接用TWRP刷入橙狐安裝包呢?

因為這個TWRP強(qiáng)行定義了設(shè)備型號

直接刷會報錯

直接安裝橙狐造成的報錯



先用TWRP安裝橙狐rec的img文件到recovery分區(qū)

重啟到橙狐rec后再安裝完整的橙狐zip安裝包即可完成橙狐rec的所有功能安裝

最后再次重啟一下rec /格式化data/再安裝一個面具

就可以重啟到系統(tǒng)再走一遍激活流程了


注意每一次恢復(fù)出廠設(shè)置激活以后請再執(zhí)行一遍解鎖bootloader的操作!

注意每一次恢復(fù)出廠設(shè)置激活以后請再執(zhí)行一遍解鎖bootloader的操作!

注意每一次恢復(fù)出廠設(shè)置激活以后請再執(zhí)行一遍解鎖bootloader的操作!


至此 第三方的recovery安裝教程結(jié)束


【2-1-1】編譯帶有kvm支持的內(nèi)核


注意這里的內(nèi)核 并不是三星官方的內(nèi)核源碼

還是經(jīng)過xda大佬修改過那個源碼

這個源碼打了kvm補(bǔ)丁 從而能夠?qū)崿F(xiàn)kvm

并且這個源碼是linux3.18.91 這個設(shè)備的安卓9系統(tǒng)都用的是同一套內(nèi)核?所以只要你的設(shè)備處在安卓9應(yīng)該都是通用的



到這里你就需要一臺Linux電腦了

但是我家的電腦是真的帶不動編譯內(nèi)核

所以我選擇華碩zenfone2+chroot+ubuntu18.04這個方案


這樣我就獲得了一個4核x64的linux系統(tǒng)了

下面開始編譯教程


編譯安卓內(nèi)核三要素 莫過于這些

1.穩(wěn)定且合適的內(nèi)核源碼

2.合適的gcc工具鏈

3.基本的debug能力

附加條件:最好有最基本的c語言基礎(chǔ)

很可惜這個條件我沒有 沒有這個條件遇到編譯錯誤可能麻煩點 (隱式聲明函數(shù)之類的)不過三星的內(nèi)核源碼無論是官方還是第三方一直來說都是很穩(wěn)定的 由內(nèi)核源碼中出來的太明顯的錯誤是沒有碰到過的


1.第1步先安裝編譯內(nèi)核所需要的依賴軟件包

打開終端

這里我用的是ubuntu


所以命令就是 sudo apt install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev \

gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev \

x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev \

libxml2-utils xsltproc unzip bc


耐心等待軟件安裝完成....


接著克隆支持Kvm的內(nèi)核源碼

git clone https://github.com/raspiduino/a6lte-kvm.git

克隆gcc工具鏈

git clone https://github.com/djb77/aarch64-linux-android-4.9.git


如果克隆有問題的網(wǎng)友 UP分享的文件中也提供了這套源碼和gcc工具鏈 下載下來然后用unzip命令解壓就可以了(位于/Kernel/支持kvm的內(nèi)核源代碼文件中 /unzip xxx.zip即可)


2.進(jìn)入到源碼的目錄下

我的源碼目錄位于/home/cpzf/a6lte/a6lte-kvm-main

所以cd到這個目錄就可以了

此處為源碼目錄


3.現(xiàn)在設(shè)置環(huán)境變量(從這一步開始最好進(jìn)入root用戶)

我的gcc工具鏈目錄位于/home/cpzf/aarch64-android-4.9


所以依次輸入

export ARCH=arm64

export CROSS_COMPILE=/home/cpzf/aarch64-linux-android-4.9/bin/aarch64-linux-android-

export ANDROID_MAJOR_VERSION=p



這樣做的目的是說明我們需要編譯的架構(gòu)/gcc工具鏈的位置/以及構(gòu)建的安卓版本 各位網(wǎng)友在編譯的時候可根據(jù)自己的情況進(jìn)行目錄修改


4.接下來生成內(nèi)核配置文件

make exynos7870-a6lte_defconfig

此時會在源碼目錄下生成一個.config文件

5.使用make menuconfig對內(nèi)核功能進(jìn)行裁剪并開啟KVM

輸入make menuconfig

make menuconfig內(nèi)核功能裁剪界面

menuconfig操作規(guī)則:

上下鍵可以移動光標(biāo)

左右鍵可以移動下面的5個選項

回車鍵可以進(jìn)入子目錄(當(dāng)該功能存在子目錄時)

空格鍵可以選中該功能開啟 按下M鍵可以以模塊的形式編譯進(jìn)內(nèi)核(該功能可以為模塊時)

按一下"/"可以查找

"?"可以調(diào)出幫助信息

.............


下面開啟kvm

首先移動光標(biāo)來到虛擬化"virtualization"按下空格鍵選中開啟該功能。
按回車鍵進(jìn)入子菜單并按空格鍵開啟內(nèi)核虛擬機(jī)KVM支持
修改下面一行的最大虛擬機(jī)支持CPU個數(shù)為8
(左右鍵移動)然后退出這一目錄
接著來到boot options
把這一頁能關(guān)的通通關(guān)掉(任何TIMA和RKP有關(guān)的/ kvm便是借助這個來運(yùn)行的 不關(guān)掉會沖突 你的4G網(wǎng)絡(luò)可能會受到限制)
關(guān)掉后應(yīng)該是這個樣子
退出上一級界面然后點save

到此 內(nèi)核裁剪完成

另外 你還可以在這個內(nèi)核開啟一些其他的功能(如果你想的話)


6. 刪去所有CPU熱插拔支持的功能


此源碼提供者已經(jīng)在內(nèi)核中刪去了?CPU熱插拔功能? 因為禁用了TIMA和RKP時 CPU熱插拔會出現(xiàn)異常 安卓只能認(rèn)得到4個核心 還有4個核心是休眠狀態(tài) 為了性能發(fā)揮穩(wěn)定 只能采用這個方法

不刪也得刪 因為不刪的話最后編譯出來會報錯的


這里我用一個非??焖俚姆椒?直接在裁剪好的.config文件進(jìn)行修改?


nano .config




使用ctrl+w 搜索所有有關(guān)hotplug的配置選項


大概有三個? 這些是必須要禁用的

在前面加上"#"即可注釋掉

完成后效果如下

7.編譯


最后 可以開始編譯了


輸入make Image -j8

-j后面的值決定于你的CPU核心數(shù) 不得超過CPU核心數(shù)的兩倍


在編譯之前可能會問你這個問題

反正全部回答N 問什么答什么

堅決不可以讓熱插拔功能開啟


請耐心等待內(nèi)核編譯 一般來說你按照我的教程來做 是不會發(fā)生任何報錯的 如果有報錯的 多半是環(huán)境配置的不到位


編譯成功完成以后是這個結(jié)果

可以在arch/arm64/boot目錄下找到Image文件

這個就是我們編譯好的內(nèi)核了



PS:如果你不想自己編譯的話 UP已經(jīng)為你提供好了一份內(nèi)核(位于Kernel/原始內(nèi)核映像) 把它下載下來直接進(jìn)行下一步即可



8.打包

首先需要提取你本機(jī)的內(nèi)核文件

設(shè)備需要獲取root

然后安裝一個終端模擬器 (或者在橙狐rec下使用終端命令)

輸入?

dd if=/dev/block/mmcblk0p10 of=/sdcard/a6.img

此時你會在/sdcard下得到一個a6.img文件

這個就是你原機(jī)的內(nèi)核了(大概是32MB,如果差的太離譜的話 就刷個面具看一下你的boot分區(qū) 然后修改if=后面的內(nèi)容)


之后下載你的linux對應(yīng)架構(gòu)的分享文件中的magiskboot打包工具


首先先在linux創(chuàng)建一個文件夾 就叫boot吧

mkdir boot

然后把對應(yīng)架構(gòu)的magiskboot zip解壓

復(fù)制到boot文件夾

再吧剛剛提取出來的a6.img復(fù)制到這個文件夾

然后chmod 777 *

給magiskboot可執(zhí)行權(quán)限

之后執(zhí)行 ./magiskboot unpack a6.img 進(jìn)行解包


解包出來的文件有這些

刪掉解包出來的Kernel

然后將編譯出來的(arch/arm64/Image)Image重命名為Kernel(注意是小寫啊 大小寫搞錯了不開機(jī)的)


移動到當(dāng)前目錄中

然后輸入 ./magiskboot repack a6.img boot-kvm.img 進(jìn)行打包

生成的boot-kvm.img就是我們需要刷入的kvm內(nèi)核了

之后為其打上面具補(bǔ)丁

使用rec刷入即可


祝你好運(yùn)啦~


如果你能夠在/dev目錄下發(fā)現(xiàn)kvm

恭喜你 成功了

這是很多手機(jī)虛擬機(jī)玩家夢寐以求的目標(biāo)

珍惜這份來之不易

感謝大佬們的付出

不要小看這個字符串設(shè)備 能不能在系統(tǒng)中使用kvm 就靠它了

成功在/dev目錄下發(fā)現(xiàn)kvm字符串設(shè)備


最后 使用dmesg對內(nèi)核輸出信息進(jìn)行分析

對比kvm支持與不支持時狀態(tài)

kvm工作不正常


kvm成功工作



【3-1-1】虛擬機(jī)應(yīng)用

雖然 kvm成功開啟了 但是想要用它運(yùn)行虛擬機(jī) 嗯...還是比較復(fù)雜的 需要解決的問題還是蠻多的 接下來我們會一個個的去看它


目前kvm還不支持armhf


這里要另外說明一下kvm虛擬機(jī)不支持跨架構(gòu)

也就是說你宿主機(jī)是什么架構(gòu)虛擬機(jī)就只能跑什么架構(gòu) 所以不要和那些x86的系統(tǒng)比了 這里只能發(fā)揮出aarch64的優(yōu)勢


【3-1-2】關(guān)于kvm運(yùn)行windows arm64系統(tǒng)

這個目前來說還是沒能實現(xiàn)

UP也實測了一下? Windows? boot?manager過后不會轉(zhuǎn)圈圈? 目前是缺少對一些寄存器的捕獲

以下為缺少的寄存器 unimplemented代表還未實現(xiàn)的部分

詳情請瀏覽https://github.com/raspiduino/a6lte-kvm/blob/main/winarm64.md


【3-2-1】Android搭建QEMU環(huán)境

1.部署chroot debian linux

這里之所以選擇debian是因為ubuntu18.04里面的QEMU實在太老了 部分功能不支持

Qemu是一個多平臺的開源虛擬機(jī)

他沒有為安卓專門出過apk

但是我們?nèi)匀豢梢赃\(yùn)行它

這里我推薦使用linuxdeploy里面部署一個chroot debian安裝QEMU

linuxdeploy安裝linux過程我就不再過多做說明(網(wǎng)上有很多教程可以先去參考一下再回來)

首先你需要把我分享的軟件部分的三個apk安裝上

然后打開linuxdeploy

等待更新操作環(huán)境結(jié)束

之后你可以照抄我的配置

源地址為http://mirrors.tuna.tsinghua.edu.cn/debian
使用root用戶(普通用戶會被殺死)
一定要勾掛載資源/ssh
設(shè)定為/sdcard

然后點右上角的三個按鈕并點擊安裝

等待安裝結(jié)束(會輸出一個deploy)

linuxdeploy如果你不會用的話你可以參考我上面的配置 會用的話可以自行發(fā)揮

但是請注意以下幾點

1.架構(gòu)必須為armhf

這手機(jī)有個特點 它的架構(gòu)是armv8l? (Android系統(tǒng)是32位的)雖然它是個64位?但是這個和標(biāo)準(zhǔn)的arm64還是有一定區(qū)別的?很多軟件都不一定識別到它是64位

所以在chroot容器中如果安裝的是arm64 可能會出現(xiàn)掉root權(quán)限的問題(我自己編譯的內(nèi)核基本上解決了這個問題)

2.用戶名必須要為root

這里不知道哪里出了問題

反正一使用普通用戶 再切到root執(zhí)行su/sudo就會出現(xiàn)被殺死的情況 所以為了保證能夠使用 將他默認(rèn)用戶調(diào)整為root


安裝完以后先點停止再點啟動

接著打開juicessh

點擊快速連接并輸入127.0.0.1
昵稱可以隨便取 用戶名輸入root 密碼填你設(shè)定的密碼

這里點接受

到這里chroot linux環(huán)境部署完成

2.安裝QEMU

在終端里面輸入

apt update?

//用來用來更新軟件源

dpkg --add-architecture arm64?

//用來開啟arm64軟件支持

apt update

//接著更新arm64軟件源

apt install qemu-system-arm:arm64 -y

//安裝arm64的QEMU(32位的qemu無法調(diào)用kvm:kvm_init_vcpu failed Invalid argument)

結(jié)束以后輸入

qemu-system-aarch64 --version

//檢查qemu版本以及是否安裝到位


然后再輸入

file /usr/bin/qemu-system-aarch64

(不過在此之前應(yīng)該要先apt install file)

//檢查qemu位數(shù)

ELF 64-bit 說明是64位可以運(yùn)行kvm

QEMU的安裝結(jié)束


PS 如果你還是嫌麻煩的話 我已經(jīng)提前幫你們做好了這些 我分享的文件里面有兩個rootfs

里面已經(jīng)包含了基本的工具與QEMU

使用linuxdeploy rootfs安裝即可(不會的話可以網(wǎng)上查一下)

默認(rèn)已經(jīng)自帶ssh 安裝完以后勾選ssh 然后直接啟動就可以用了 默認(rèn)用戶root/密碼是1234567


3.KVM調(diào)用測試:

輸入以下命令:

qemu-system-aarch64 -M virt -cpu host --enable-kvm -monitor stdio


你的面前應(yīng)該會出現(xiàn)一個QEMU控制臺

此時輸入info kvm 來查看

得到這個結(jié)果就說明調(diào)用成功


【3-2-2】使用kvm虛擬機(jī)安裝ubuntu20.04 arm64 desktop

kvm運(yùn)行ubuntu20.04 arm64 desktop



目前來看這個設(shè)備運(yùn)行的KVM是有問題的

所以想要跑一個arm64的虛擬機(jī)

需要完成的步驟就比較多


首先有一個問題就是 當(dāng)虛擬機(jī)開啟的一瞬間 手機(jī)會重啟 這個問題我目前沒有遇到過(Trustzone舊版本可能不能很好處理這個問題)我希望大家也不要遇到


其次 還有一個普遍存在的問題 三星的引導(dǎo)加載程序應(yīng)該配置cntfrq_el0的寄存器設(shè)置為0 但是這個只能從最高權(quán)限級別i.e.Trustzone從中寫入 但不可以從任何權(quán)限級別讀取(不可捕獲訪問) 而客戶操作系統(tǒng)希望保持架構(gòu)計時器頻率為26.0MHZ 但是smc沒有設(shè)置這個值的調(diào)用 這就意味著操作系統(tǒng)需要修補(bǔ)了 計時器處理以某種方式損壞 所以在kvm運(yùn)行l(wèi)inux操作系統(tǒng)時 需要自定義一個dtb設(shè)備樹 這個設(shè)備樹包含了對計時器頻率的補(bǔ)丁? 如果不對系統(tǒng)進(jìn)行打補(bǔ)丁 那么會造成內(nèi)核恐慌 虛擬機(jī)無法啟動

Kernel表示我很慌

這個設(shè)備樹補(bǔ)丁(dtb.bin)我分享的文件中也提供了一份

當(dāng)虛擬機(jī)不用ovmf(uefi/edk2)固件啟動時

直接在QEMU命令上加上-dtb dtb.bin

即可直接傳遞給虛擬機(jī)

當(dāng)虛擬機(jī)使用ovmf(uefi/edk2)固件啟動時

此時的-dtb命令就無效了 因為他無法通過ovmf(uefi/edk2)固件傳遞給虛擬機(jī) 這個時候就需要把這個文件手動放在/boot/grub所在的目錄下 修改GRUB啟動參數(shù)來使用外來設(shè)備樹文件

最后uefi他也有問題...

ovmf(edk2/uefi)并沒有達(dá)到中斷...

而是在第1次睡眠時掛起(edk2也是需要修補(bǔ)的)

所以 想要跑虛擬機(jī)需要重新編譯edk2 并為其打上補(bǔ)丁

這里呢已經(jīng)有人發(fā)了現(xiàn)成的

我就懶得跑去編譯了

我也發(fā)了一份(在分享文件內(nèi))

如果你實在要自己編譯的話(比如說換個logo之類的)

那請參考這個鏈接https://github.com/raspiduino/a6lte-kvm/blob/main/edk2.md

所以在運(yùn)行虛擬機(jī)時不要使用其他的ovmf(uefi/edk2)固件

不然你可能會得到下面這個大東西

好了~講了這么久的問題 我們來正式使用kvm安裝一下ubuntu20.04 arm64吧


給安裝光盤打補(bǔ)丁:

1.首先你需要下載一個ubuntu20.04 arm64的安裝光盤iso鏡像(這個在ubuntu官方鏡像里有的 注意不要下成amd64的)

2.下載好我分享文件中的dtb.bin

3.使用UItraISO打開你下載的ubuntu系統(tǒng)iso文件

(這里如果你不愿意下載UItraISO的話我提供了一個單文件版的)

4.把dtb.bin拖到casper目錄下(其實隨便哪里都可以只要你記得住)

差不多這個樣子

5.最后保存拷到手機(jī)上就行了


啟動虛擬機(jī)開始系統(tǒng)安裝:

1.首先將我分享的vga-bios里面的三個內(nèi)容全部移動到chroot debian里面的/usr/share/qemu目錄下

2.下載EFI_DEBUG.img和EFI_VARS.img

3.確認(rèn)打過補(bǔ)丁的ubuntu iso在你手機(jī)的內(nèi)置存儲里

4.使用qemu-img生成一塊64GB空白磁盤


命令如下:

qemu-img create ubuntu.img 64GB



使用以下命令開始ubuntu虛擬機(jī)安裝

qemu-system-aarch64 -machine virt -m 1024M -cpu host -smp 4,cores=2,threads=1,sockets=2 -enable-kvm -pflash /sdcard/你的目錄/EFI_DEBUG.img -pflash /sdcard/你的目錄/EFI_VARS.img -device ramfb -serial stdio -usb -device usb-ehci,id='ehci',maxframes='128' -device usb-tablet -device usb-mouse -device usb-kbd -boot d -drive file=/sdcard/你的目錄/ubuntu.img,if=none,id=disk -device virtio-blk,drive=disk -drive file=/sdcard/你的目錄/ubuntu.iso,if=none,id=drive1,cache=writeback -device virtio-blk,drive=drive1,bootindex=1


ps:將命令中涉及到的路徑改為你真實情況文件所存放的路徑

我不是什么QEMU大神 所以這真的是最基礎(chǔ)最基礎(chǔ)的命令了 我也是通過這個才剛學(xué)的qemu-system-aarch64 因為好久沒研究了 要是有錯誤還是噴的輕點 各位大神可以根據(jù)此基礎(chǔ)命令自由發(fā)揮 但是自由發(fā)揮請遵守以下3點


1.不要隨意換uefi固件 這個前面說過了

2.arm下無論如何都不應(yīng)該在-enable-kvm的情況下使用-device VGA

3.最好不要改變-machine virt參數(shù) 因為這個設(shè)備樹補(bǔ)丁文件是通過-machine?virt dump出來的 改了可能會發(fā)生一些不必要的錯誤


這時候打開vnc viewer 過向?qū)б院?點下面的加號 名稱可以隨便取 地址填寫127.0.0:1


不出意外的話你就可以看到虛擬機(jī)畫面了

由于使用ramfb 系統(tǒng)分辨率會不太好調(diào)整

我們對ovmf固件里面的分辨率進(jìn)行調(diào)整 方便后續(xù)操作

不斷按下ESC

選擇Device manager

選擇 OVMF platform configuration

將分辨率改為1024x768

之后一路ESC回到主界面

reset

接著會進(jìn)入GRUB(注意選第1項進(jìn)入試用模式 后面會用到)

按一下E進(jìn)入編輯模式

我們要做的是 刪除第4行l(wèi)inux后面的quiet

然后來到最后一行前面空8格 寫上"devicetree /casper/dtb.bin"

修改完以后效果是這樣的

之后按一下F10啟動


不出意外的話就可以正常進(jìn)入live cd了

如果出現(xiàn)卡在virtio-pci 可以嘗試多試幾次

卡virtio-pci


總有一次是可以進(jìn)去的

這個問題我排查了許久 其他的iso沒有發(fā)現(xiàn)這個問題

命令我一個個的試過了 嗯.. 我比較笨...感覺上是概率問題


接下來就是喜聞樂見的安裝過程了

整個安裝過程大概要億個小時吧

exynos7870就這個性能

但是我感覺kvm并沒有完全發(fā)揮出它的性能

在使用qemu3.1.1的時候無論怎么配置多核心 虛擬機(jī)里面可用的只有兩核

QEMU3.1.1 可以調(diào)用兩核



在使用qemu7.1.0 的時候只有一個核心可以用 還有一個核心在系統(tǒng)內(nèi)是啟動失敗的

QEMU7.1.0 cpu1無法啟動

安裝完成以后千萬不要急著重啟

一定要點繼續(xù)試用

點擊繼續(xù)使用

因為ubuntu只安裝單一系統(tǒng)是不會在開機(jī)時候顯示GRUB的 我們接下來的操作需要用到GRUB 所以就要對他進(jìn)行一些修改


打開終端設(shè)置一個root賬戶

掛載并chroot文件系統(tǒng)

依次輸入

sudo mount /dev/vda2 /mnt

sudo mount --bind /dev /mnt/dev

sudo mount --bind /sys /mnt/sys

sudo mount --bind /proc /mnt/proc

sudo chroot /mnt


接下來sudo nano /etc/default/grub

sudo nano /etc/default/grub

將GRUB_TIMEOUT_STYLE=hidden這一項前面加上"#"把它注釋掉

將GRUB_TIMEOUT=0 把"0"改成10


改好之后效果差不多是這樣的

ctrl+o保存/ctrl+x退出


接下來更新GRUB

輸入update-grub來更新GRUB

之后輸入sudo nano /boot/grub/grub.cfg

如果在ubuntu安裝期間下載并安裝linux5.15內(nèi)核的請注意了 啟動5.15的時候是沒有辦法啟動圖形界面的 只有串口命令行在運(yùn)行 圖形界面則卡在這里

圖形界面卡在這里

所以我們需要找linux5.8的GRUB內(nèi)核啟動配置項

按照之前在GRUB界面修改的一樣

刪去linux開頭那一行的quiet
空一行添加devicetree /boot/dtb.bin


最后 將dtb.bin從live cd復(fù)制到/boot/

以及/boot/grub



之后sudo power off


然后去掉安裝光盤

啟動命令更改為:qemu-system-aarch64 -machine virt -m 1024M -cpu host -smp 4,cores=2,threads=1,sockets=2 -enable-kvm -pflash /sdcard/你的目錄/EFI_DEBUG.img -pflash /sdcard/你的目錄/EFI_VARS.img -device ramfb -serial stdio -usb -device usb-ehci,id='ehci',maxframes='128' -device usb-tablet -device usb-mouse -device usb-kbd -drive file=/sdcard/你的目錄/ubuntu.img,if=none,id=disk -device virtio-blk,drive=disk



之后進(jìn)入GRUB界面 選擇Advanced options for ubuntu

再選擇ubuntu,with linux-5.8.0-generic

就可以成功啟動進(jìn)入圖形界面啦~


其他發(fā)行版也可以參考我這個教程 操作過程是大同小異的



我的天吶 這篇教程終于要結(jié)束了

總的來說

arm手機(jī)上的kvm是總會給人帶來驚喜的

無論有多少問題 我們總會樂此不疲的去研究


最后?由衷的感謝 對本片專欄提供很大幫助的教程


https://github.com/raspiduino/a6lte-kvm

https://github.com/sleirsgoevy/exynos-kvm-patch

https://ivonblog.com/posts/how-to-compile-custom-android-kernel/

https://blog.icepie.dev/2021/02/22/android-kernel-add-kvm

特別感謝github @raspiduino

沒有他的幫助 也就沒有這篇教程 這是個熱心的老哥~

結(jié)束了~

Bye bye.









【教程】三星Galaxy a6(exynos7870)開啟KVM內(nèi)核虛擬機(jī)的評論 (共 條)

分享到微博請遵守國家法律
汶上县| 尼勒克县| 江北区| 台山市| 呼和浩特市| 府谷县| 义马市| 龙门县| 明光市| 武定县| 施秉县| 正安县| 皮山县| 彭阳县| 吉水县| 承德县| 永善县| 武隆县| 潢川县| 宁海县| 绥阳县| 旌德县| 乐平市| 赣榆县| 罗定市| 永修县| 扎兰屯市| 闻喜县| 张北县| 内丘县| 彭山县| 溧阳市| 山东省| 镇沅| 昌邑市| 灵寿县| 清苑县| 和田市| 大城县| 贵定县| 阜阳市|