repo version 顯示 repo launcher version 要是 2.15 以上。
去
"codenanme-tages-and-buildnumber" 去看,pixel4最後一個版本tag name 是 android-12.1.0_r11
所以
repo init -u https://android.googlesource.com/platform/manifest -b android-12.1.0_r11
repo sync -c -j8
官方說 "-c" 就可以只fetch current version (所以 repo init 不用加 --depth=1 ?)
download 玩aosp 後,要
download hardware 相關的 none-open binary.
要依照build id 來download,剛剛的android-12.1.0_r11 的 build id 是 SQ3A.220705.003.A1
有 google 跟 qualcomm 兩個 tgz 檔。
說明解開後是自解壓縮script,說在 aosp 的 root folder 執行,accept license後,就會放在正確位置 (vendor)。
開始build:
source build/envsetup.sh
接下來的lunch 要選pixel4,依照說明去
flash device 查,是 flame,所以:
lunch aosp_flame-userdebug
然後就可以用 "m" 來build,不用加任何option,他會看cpu核心數開啟對應process。
-- 用 i9 13 代,限制溫度70,64G ram, 普通hd, 需要90分鐘。
build kernel
現在AOSP 的kernel是 prebuilt kernel,所以要build 的話,要另外clone 下來。
kernel build法以 Android 12 為分界。
12 (含)以前,用build.sh
另外,pixel6以上,android 13(含)以上,支援 GKI (generalize kernel image),所以可以只update kernel vender part,所以只build 出 kernel 就可以。
古老的還是要build 好 kernel 後,到 aosp 再build 一次,把 kernel 包進去。
現在做 pixel4, android12 的作法:build.sh
用 repo clone source,先到
kernel branch 去看android12 for pixel 4 的 branch name 是什嗎。
猜大概是 common-android12-5.10 吧?
repo init -u https://android.googlesource.com/kernel/manifest -b common-android12-5.10
repo sync -j8
燒錄
要先 unlock bootloader
pixel 4 要先到 Setting 中的 developement option 去開啟 allow unlock bootloader,
然後關機,按著volume down + power 開機進入bootloader mode.
用 fastboot flashing unlock 來unlock
其實在pixel 4 的 bootloader 畫面也有 unlock 選項,選後按下 power,他會自己 reboot,之後就是 unlock mode 了。
開始燒錄。
一樣在 bootloader mode,所以先進入 bootlaoder:
adb reboot bootloader
fastboot 要看環境變數 ANDROID_PRODUCT_OUT 來找 img 檔。
所以要先設定這個變數到剛剛 build 好的 aosp src /out/target/product/flame
之後就可以下
$ fastboot flashall -w
--------------------------------------------
Bootloader Version...: c2f2-0.4-7617419
Baseband Version.....: g8150-00111-210817-B-7650554
Serial Number........: 99211FFAXXXXXX
--------------------------------------------
Checking 'product' OKAY [ 0.070s]
Setting current slot to 'b' OKAY [ 0.157s]
Sending 'boot_b' (65536 KB) OKAY [ 1.850s]
Writing 'boot_b' OKAY [ 0.299s]
Sending 'dtbo_b' (8192 KB) OKAY [ 0.340s]
Writing 'dtbo_b' OKAY [ 0.094s]
Sending 'vbmeta_b' (4 KB) OKAY [ 0.140s]
Writing 'vbmeta_b' OKAY [ 0.078s]
Sending 'vbmeta_system_b' (4 KB) OKAY [ 0.140s]
Writing 'vbmeta_system_b' OKAY [ 0.078s]
Rebooting into fastboot OKAY [ 0.070s]
< waiting for any device >
Sending 'super' (4 KB) OKAY [ 0.018s]
Updating super partition OKAY [ 0.025s]
Resizing 'product_b' OKAY [ 0.003s]
Resizing 'system_b' OKAY [ 0.003s]
Resizing 'system_ext_b' OKAY [ 0.003s]
Resizing 'system_a' OKAY [ 0.005s]
Resizing 'vendor_b' OKAY [ 0.005s]
Resizing 'vendor_a' OKAY [ 0.003s]
Resizing 'product_b' OKAY [ 0.003s]
Sending sparse 'product_b' 1/2 (262140 KB) OKAY [ 6.835s]
Writing 'product_b' OKAY [ 1.816s]
Sending sparse 'product_b' 2/2 (10064 KB) OKAY [ 0.274s]
Writing 'product_b' OKAY [ 0.089s]
Resizing 'system_b' OKAY [ 0.004s]
Sending sparse 'system_b' 1/4 (262140 KB) OKAY [ 7.071s]
Writing 'system_b' OKAY [ 1.884s]
Sending sparse 'system_b' 2/4 (262140 KB) OKAY [ 7.484s]
Writing 'system_b' OKAY [ 0.896s]
Sending sparse 'system_b' 3/4 (262140 KB) OKAY [ 6.993s]
Writing 'system_b' OKAY [ 0.873s]
Sending sparse 'system_b' 4/4 (34396 KB) OKAY [ 0.924s]
Writing 'system_b' OKAY [ 0.176s]
Resizing 'system_ext_b' OKAY [ 0.004s]
Sending 'system_ext_b' (136184 KB) OKAY [ 3.665s]
Writing 'system_ext_b' OKAY [ 1.531s]
Resizing 'system_a' OKAY [ 0.003s]
Sending 'system_a' (23492 KB) OKAY [ 0.728s]
Writing 'system_a' OKAY [ 0.151s]
Resizing 'vendor_b' OKAY [ 0.004s]
Sending sparse 'vendor_b' 1/4 (262140 KB) OKAY [ 7.022s]
Writing 'vendor_b' OKAY [ 1.893s]
Sending sparse 'vendor_b' 2/4 (262140 KB) OKAY [ 6.996s]
Writing 'vendor_b' OKAY [ 0.898s]
Sending sparse 'vendor_b' 3/4 (262140 KB) OKAY [ 7.075s]
Writing 'vendor_b' OKAY [ 0.902s]
Sending sparse 'vendor_b' 4/4 (42360 KB) OKAY [ 1.120s]
Writing 'vendor_b' OKAY [ 0.212s]
Erasing 'userdata' OKAY [ 12.301s]
Erase successful, but not automatically formatting.
File system type raw not supported.
Erasing 'metadata' OKAY [ 0.008s]
Erase successful, but not automatically formatting.
File system type raw not supported.
Rebooting OKAY [ 0.000s]
Finished. Total time: 105.627s
可以看到燒錄過程中,燒完 dtb 和 system 後會自己 reboot,不要動他。
reboot 完會自己繼續download,最後 reboot,進入android.
memo 一下 pixel4 的最後版本 android-13.0.0_r31
一樣,下載 propriety binary 後 build OK, 但是燒錄後無法開機,停在 google logo 畫面。
另外,build 好的 aosp folder copy 到另一台機器上 會 build fail。
因為 out/host/linux-x86/b8in 下,有一些 python script 是絕對路徑的 link。
結果要燒回 factory ota image 時,用 adb sideload 出現 signiture verified error。
最後用 android flash tool 網頁版,才燒錄成功。