2024/3/4

build aosp android 12 for pixel4

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 網頁版,才燒錄成功。

沒有留言:

張貼留言