0.0 序
內核編譯的難點在於配置環境,不同手機、系統的內核源碼版本、編譯器版本、依賴項甚至所需系統版本各不相同,給入門帶來了極大困難。依托於開源系統lineage,我們可以很便捷的下載到與系統對應的源碼,減少不必要的麻煩。
本文將以盡可能普適的步驟,從最核心的環境配置及編譯過程開始更新,逐步完善,目標是讓零基礎選手都能完成整個內核編譯流程。(本文待更新的內容均可以百度到詳細教程)
註意:請確保自己有環境或能力進入github並從中下載檔,否則將不能完成全過程。日後將更新github加速方法。
0.1 目錄
1 解除bl鎖、刷入TWRP、 刷入系統ROM 、root
2 安裝VMware、建立ubuntu20.04虛擬機器
3 在ubuntu中安裝所需依賴項
4 下載與手機對應的內核源碼、下載編譯工具
5 配置環境變量
6 完成第一次編譯
7 將內核打包刷入器材
0.2 查詢器材代號
在開始前,請在百度查詢您手機對應的代號,我使用的紅米note5手機,代號為whyred。
1 解除bl鎖 、刷入TWRP、刷入系統ROM、root
在本節中,您需要完成標題所示4個步驟。
為了確保成功率,我們使用lineage系統,以便獲取到與系統完全對應的內核源碼。
系統rom在https://download.lineageos.org/changes中獲取,器材代號相同即可下載(同一個代號可能對應多款器材)。上述網址中找不到的,說明已經停止支持,沒有最新版本的系統,在https://lineageosroms.com/xiaomi/中尋找舊版本即可。
root我使用的是magisk,其他root也可以使用。
詳細步驟施工中……
2 安裝VMware、建立ubuntu20.04虛擬機器
在本節中,您需要安裝vmware,並建立一個ubuntu20.04虛擬機器(其他發行版應該也可以,未測試)
詳細步驟施工中……
3 在ubuntu中安裝所需依賴項
在ubuntu虛擬機器中,點選圖示左側圖示開啟檔管理器。(如找不到圖示,可以按win鍵後輸入files,點選出現的圖示)(記住該操作,下文需要開啟檔管理器時不再重復)
圖3.1 開啟檔管理器為了演示,我將刪除目錄下不需要的資料夾,即把除「desktop」以外的資料夾全部刪除。
刪除後新建一個資料夾,命名為「kernel」,用來存放源碼及編譯工具。雙擊「kernel」資料夾進入。(記住新建、刪除、重新命名的操作方法)
圖3.2 刪除檔 圖3.3 新建資料夾 圖3.4 重新命名檔
按win鍵後輸入「terminal」,點選出現的圖示,開啟命令列視窗。(記住該操作,下文需要開啟命令列時不再重復)
圖3.5 開啟命令列 圖3.6 命令列視窗在命令列內一次性輸入以下內容並回車(可以復制文字,在命令列內右單擊,點「paste」貼上 ):
sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev adb fastboot -y
(命令中的空格、「-」符號都不要漏掉,符號個數要完全一致,下同,不再提示 )
會提示輸入密碼,輸入後回車即可。
下載過程中會提示」Do you want to continue? [Y/n]」,直接回車即可,後面如果遇到也一樣 。
4 下載與手機對應的內核源碼、下載編譯工具
4.1 下載內核源碼
進入https://wiki.lineageos.org/devices/,在右上角搜尋框中查詢您的器材代號,並點選進入器材詳情頁。
將器材詳情頁下滑至最底端,點選 (source code)超連結,進入github源碼倉庫頁面。
在左上角圖示處選擇系統版本,需要與剛剛刷入的系統版本一致。我刷入的系統版本為18.1,所以此處選擇「lineage-18.1」(記住版本號全名,方法二中需要用到) 。
圖4.3 選擇源碼版本
選擇好後有兩種方法可以下載源碼,方法二一般下載更快些,選其中一種執行後就不需要再執行另一種方法。
方法一:
選擇好後點選右側綠色「Code」按鈕,點選彈出的「Download ZIP」進行下載。
圖4.4 直接下載專案壓縮包
下載好後是一個zip壓縮檔,將該檔復制到虛擬機器中剛剛建立的kernel資料夾內。(復制時ubuntu可能會彈出一個提示框,點選skip all即可)
開啟命令列。
圖4.7 命令列視窗在其中輸入以下命令:
cd ~/kernel
unzip 你下載的zip檔名 (記得帶字尾,例如unzip android_kernel_xiaomi_sdm660-lineage-18.1.zip)
圖4.8 執行unzip解壓命令完成此時檢視檔管理器,kernel目錄下將解壓出一個資料夾,為了方便,將該資料夾重新命名為「src」。
圖4.9 重新命名完成的資料夾
至此源碼下載完畢。
方法二:
在github頁面中點選右側Code按鈕,點選一串網址後的方塊圖示,復制該專案地址。記住您選擇的版本全名,比如我選擇的是「lineage-18.1」。
ubuntu虛擬機器中開啟命令列視窗。
圖4.11 命令列視窗
在出現的視窗中輸入以下命令:
cd ~/kernel
git clone 剛剛復制的網址,輸入完前面的字後右單擊貼上即可 -b 選擇的版本全名 --depth 1
(例如我的命令應該是 git clone https://github.com/LineageOS/android_kernel_xiaomi_sdm660.git -b lineage-18.1 --depth 1)
待下載完後,「kernel」資料夾內將出現一個源碼資料夾,為了方便操作,將其重新命名為「src」。此時源碼下載完成。
圖4.12 執行git clone命令完成4.2 下載編譯工具
我們選擇的工具是「Proton Clang」,github頁面是https://github.com/kdrag0n/proton-clang。安裝方法與下載源碼的兩種方法相同,且不需要選擇版本。
方法一:
點選右側Code按鈕,再點選Download Zip,下載壓縮包。將壓縮包復制到Ubuntu中的「kernel」資料夾內(復制時ubuntu可能會彈出一個提示框,點選skip all即可)。開啟命令列,輸入下面的命令進行解壓:
cd ~/kernel
unzip 壓縮檔名
(例如unzip proton-clang-master.zip)
解壓完成後,將解壓出的資料夾重新命名為「toolchains」。至此編譯工具下載完成。
方法二:
ubuntu中開啟命令列,輸入如下命令:
cd ~/kernel
git clone https://github.com/kdrag0n/proton-clang.git
將新下載下來的資料夾重新命名為「toolchains」。至此編譯工具下載完成。
圖4.13 內核源碼及編譯工具下載完畢
下載完畢後,「kernel」資料夾中應存在src和toolchains兩個資料夾。如果使用方法一下載,還會留有zip壓縮包,不必理會即可。
5 配置環境變量
ubuntu中開啟命令列,依次輸入如下命令(註意第二、三行末尾都是一個「-」號
):
export PATH=$PATH:~/kernel/toolchains/bin
export CROSS_COMPILE=aarch64-linux-gnu-
export CROSS_COMPILE_ARM32=arm-linux-gnueabi-
export ARCH=arm64
export CC=clang
圖5.1 配置環境變量本節所述操作,每次開啟命令列之後都需要重新執行一次。
6 完成第一次編譯
6.1 編譯預設配置
命令列裏輸入以下命令:
cd ~/kernel/src
ls ~/kernel/src/arch/arm64/configs
在顯示出來的配置檔裏找出帶有您器材代號的一項,比如我需要找到的配置檔名稱為「whyred_defconfig」。記住該名稱。
圖6.1 尋找器材對應的預設配置檔輸入命令:
make ARCH=arm64 CC=clang O=out 配置檔名稱 (比如我的命令是make ARCH=arm64 O=out whyred_defconfig)
此時可以看到編譯器在執行,src資料夾下生成了一個out資料夾。
繼續輸入命令:
make ARCH=arm64 O=out CC=clang -j執行緒數(執行緒數通常為cpu核心數乘2,我設定為8,則命令為make ARCH=arm64 O=out CC=clang -j8)
此時開始進行編譯,螢幕上閃過編譯資訊,等待幾分鐘後出現「CA T arch/arm64/boot/Image.gz-dtb」字樣,編譯就完成了。
圖6.2 編譯完成編譯完成後的內核檔會保存在out/arch/arm64/boot資料夾中,名稱為Image.gz-dtb。
6.2 修改配置
輸入如下命令:
cd ~/kernel/src/out
make menuconfig
圖6.3 配置頁面
即可進入配置頁面,在該頁面中選擇需要開啟的選項。配置完畢後,方向鍵左右選擇「Save」,回車。然後選擇「Exit」結束,返回命令列頁面。
輸入命令:
cd ../
make ARCH=arm64 O=out CC=clang -j執行緒數
即可按新配置進行編譯。
7 將內核打包刷入器材
在本節中,您需要使用打包工具將內核刷入器材。
我使用的是AIK,專案地址為https://github.com/ndrancs/AIK-Linux-x32-x64
還可以使用AnyKernel3進行打包,地址為https://github.com/osm0sis/AnyKernel3,教程地址https://github.com/tiann/KernelSU/discussions/952
詳細步驟施工中……