AOSP 源碼編譯

1. 從清華大學鏡像站點下載 AOSP 源碼:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

建議用下載aosp源碼包方式下載;

參考:https://blog.csdn.net/cxq234843654/article/details/52301759

2. 下載完代碼切換分支:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r71

如果時 aosp_latest.tar包解壓的,首先用 repo sync -l 同步本地代碼。

然後 cd .repo/manifests 目錄執行 git branch -a |grep 8.1.0會看到很多8.1.0的分支,

輸入 git checkout -b android-8.1.0_r71 origin/android-8.1.0_r71 切換到 8.1.0 分支。

然後回根目錄 repo sync 同步代碼。

3. 同步代碼

repo sync

4. 源碼同步完需要找對應手機硬件的bsp文件放到源碼裏,

從這裏下載google 手機的driver,要科學上網的:

https://developers.google.com/android/drivers

參考文檔:

https://kswapd.cn/article/aosp-build-to-pixel/

5. repo sync 同步後的代碼是沒有本地分支名字的,你用 git branch 會看到一個遊離分支:

~/aosp/frameworks/base$ git branch
* (頭指針分離於 4fdbba0)
~/aosp/frameworks/base$ git branch -a
* (頭指針分離於 4fdbba0)
  remotes/aosp/android10-c2f2-release
  remotes/aosp/android10-c2f2-s1-release
  remotes/aosp/android10-c2f2-s2-release
  remotes/aosp/android10-dev
  remotes/aosp/android10-gsi
  remotes/aosp/android10-mainline-a-release
  remotes/aosp/android10-mainline-release
  remotes/aosp/android10-qpr1-b-release
  remotes/aosp/android10-qpr1-b-s1-release
  remotes/aosp/android10-qpr1-c-s1-release
  remotes/aosp/android10-qpr1-mainline-release
  remotes/aosp/android10-qpr1-release
  remotes/aosp/android10-release
  remotes/aosp/android10-s1-release
  remotes/aosp/android10-s2-release
  remotes/aosp/android10-s3-release
  remotes/aosp/android10-security-release
  remotes/aosp/android10-tests-dev
  remotes/aosp/android10-tests-release
  remotes/aosp/b_141248619
  remotes/aosp/donut-release
  remotes/aosp/donut-release2
  remotes/aosp/eclair-passion-release
  remotes/aosp/eclair-release
  remotes/aosp/eclair-sholes-release
  remotes/aosp/eclair-sholes-release2
  remotes/aosp/froyo
  remotes/aosp/froyo-release
  remotes/aosp/gingerbread
  remotes/aosp/gingerbread-mr4-release
  remotes/aosp/gingerbread-release
  remotes/aosp/ics-factoryrom-2-release
  remotes/aosp/ics-mr0
  remotes/aosp/ics-mr0-release
  remotes/aosp/ics-mr1
  remotes/aosp/ics-mr1-release
  remotes/aosp/ics-plus-aosp
  remotes/aosp/idea133
  remotes/aosp/idea133-weekly-release
  remotes/aosp/jb-dev
  remotes/aosp/jb-mr0-release
  remotes/aosp/jb-mr1-dev
  remotes/aosp/jb-mr1-dev-plus-aosp
  remotes/aosp/jb-mr1-release
  remotes/aosp/jb-mr1.1-dev
  remotes/aosp/jb-mr1.1-dev-plus-aosp
  remotes/aosp/jb-mr1.1-release
  remotes/aosp/jb-mr2-dev
  remotes/aosp/jb-mr2-release
  remotes/aosp/jb-mr2.0-release
  remotes/aosp/jb-mr2.0.0-release
  remotes/aosp/jb-release
  remotes/aosp/kitkat-cts-dev
  remotes/aosp/kitkat-cts-release
  remotes/aosp/kitkat-dev
  remotes/aosp/kitkat-mr1-release
  remotes/aosp/kitkat-mr1.1-release
  remotes/aosp/kitkat-mr2-release
  remotes/aosp/kitkat-mr2.1-release
  remotes/aosp/kitkat-mr2.2-release
  remotes/aosp/kitkat-release
  remotes/aosp/kitkat-wear
  remotes/aosp/l-preview
  remotes/aosp/lollipop-cts-release
  remotes/aosp/lollipop-dev
  remotes/aosp/lollipop-mr1-cts-release
  remotes/aosp/lollipop-mr1-dev
  remotes/aosp/lollipop-mr1-fi-release
  remotes/aosp/lollipop-mr1-release
  remotes/aosp/lollipop-mr1-wfc-release
  remotes/aosp/lollipop-release
  remotes/aosp/lollipop-wear-release
  remotes/aosp/marshmallow-cts-release
  remotes/aosp/marshmallow-dev
  remotes/aosp/marshmallow-dr-dev
  remotes/aosp/marshmallow-dr-dragon-release
  remotes/aosp/marshmallow-dr-dragon-release-May
  remotes/aosp/marshmallow-dr-release
  remotes/aosp/marshmallow-dr1.5-dev
  remotes/aosp/marshmallow-dr1.5-release
  remotes/aosp/marshmallow-dr1.6-release
  remotes/aosp/marshmallow-mr1-dev
  remotes/aosp/marshmallow-mr1-release
  remotes/aosp/marshmallow-mr2-release
  remotes/aosp/marshmallow-mr3-release
  remotes/aosp/marshmallow-release
  remotes/aosp/master
  remotes/aosp/master-cuttlefish-testing-release
  remotes/aosp/master-soong
  remotes/aosp/n-iot-preview-2
  remotes/aosp/n-iot-preview-4
  remotes/aosp/nougat-bugfix-release
  remotes/aosp/nougat-cts-release
  remotes/aosp/nougat-dev
  remotes/aosp/nougat-dr1-release
  remotes/aosp/nougat-iot-release
  remotes/aosp/nougat-mr0.5-release
  remotes/aosp/nougat-mr1-cts-release
  remotes/aosp/nougat-mr1-dev
  remotes/aosp/nougat-mr1-flounder-release
  remotes/aosp/nougat-mr1-release
  remotes/aosp/nougat-mr1-security-release
  remotes/aosp/nougat-mr1-volantis-release
  remotes/aosp/nougat-mr1-wear-release
  remotes/aosp/nougat-mr1.1-release
  remotes/aosp/nougat-mr1.2-release
  remotes/aosp/nougat-mr1.3-release
  remotes/aosp/nougat-mr1.4-release
  remotes/aosp/nougat-mr1.5-release
  remotes/aosp/nougat-mr1.6-release
  remotes/aosp/nougat-mr1.7-release
  remotes/aosp/nougat-mr1.8-release
  remotes/aosp/nougat-mr2-dev
  remotes/aosp/nougat-mr2-pixel-release
  remotes/aosp/nougat-mr2-release
  remotes/aosp/nougat-mr2-security-release
  remotes/aosp/nougat-mr2.1-release
  remotes/aosp/nougat-mr2.2-release
  remotes/aosp/nougat-mr2.3-release
  remotes/aosp/nougat-release
  remotes/aosp/o-iot-preview-5
  remotes/aosp/o-mr1-iot-preview-6
  remotes/aosp/o-mr1-iot-preview-7
  remotes/aosp/o-mr1-iot-preview-8
  remotes/aosp/o-preview
  remotes/aosp/oreo-cts-release
  remotes/aosp/oreo-dev
  remotes/aosp/oreo-dr1-dev
  remotes/aosp/oreo-dr1-release
  remotes/aosp/oreo-dr2-release
  remotes/aosp/oreo-dr3-release
  remotes/aosp/oreo-m2-release
  remotes/aosp/oreo-m2-s1-release
  remotes/aosp/oreo-m2-s2-release
  remotes/aosp/oreo-m2-s3-release
  remotes/aosp/oreo-m2-s4-release
  remotes/aosp/oreo-m2-s5-release
  remotes/aosp/oreo-m3-release
  remotes/aosp/oreo-m4-s1-release
  remotes/aosp/oreo-m4-s10-release
  remotes/aosp/oreo-m4-s11-release
  remotes/aosp/oreo-m4-s12-release
  remotes/aosp/oreo-m4-s2-release
  remotes/aosp/oreo-m4-s3-release
  remotes/aosp/oreo-m4-s4-release
  remotes/aosp/oreo-m4-s5-release
  remotes/aosp/oreo-m4-s6-release
  remotes/aosp/oreo-m4-s7-release
  remotes/aosp/oreo-m4-s8-release
  remotes/aosp/oreo-m4-s9-release
  remotes/aosp/oreo-m5-release
  remotes/aosp/oreo-m6-s2-release
  remotes/aosp/oreo-m6-s3-release
  remotes/aosp/oreo-m6-s4-release
  remotes/aosp/oreo-m7-release
  remotes/aosp/oreo-m8-release
  remotes/aosp/oreo-mr1-1.2-iot-release
  remotes/aosp/oreo-mr1-cts-release
  remotes/aosp/oreo-mr1-cuttlefish-testing
  remotes/aosp/oreo-mr1-dev
  remotes/aosp/oreo-mr1-iot-release
  remotes/aosp/oreo-mr1-release
  remotes/aosp/oreo-mr1-s1-release
  remotes/aosp/oreo-mr1-security-release
  remotes/aosp/oreo-mr1-vts-release
  remotes/aosp/oreo-mr1-wear-release
  remotes/aosp/oreo-r2-release
  remotes/aosp/oreo-r3-release
  remotes/aosp/oreo-r4-release
  remotes/aosp/oreo-r5-release
  remotes/aosp/oreo-r6-release
  remotes/aosp/oreo-release
  remotes/aosp/oreo-security-release
  remotes/aosp/oreo-vts-release
  remotes/aosp/pie-angle-preview-dev
  remotes/aosp/pie-b4s4-dev
  remotes/aosp/pie-b4s4-release
  remotes/aosp/pie-cts-release
  remotes/aosp/pie-cuttlefish-testing
  remotes/aosp/pie-dev
  remotes/aosp/pie-dr1-dev
  remotes/aosp/pie-dr1-release
  remotes/aosp/pie-gsi
  remotes/aosp/pie-platform-release
  remotes/aosp/pie-qpr1-release
  remotes/aosp/pie-qpr1-s1-release
  remotes/aosp/pie-qpr1-s2-release
  remotes/aosp/pie-qpr1-s3-release
  remotes/aosp/pie-qpr2-release
  remotes/aosp/pie-qpr3-b-release
  remotes/aosp/pie-qpr3-release
  remotes/aosp/pie-qpr3-s1-release
  remotes/aosp/pie-r2-release
  remotes/aosp/pie-r2-s1-release
  remotes/aosp/pie-r2-s2-release
  remotes/aosp/pie-release
  remotes/aosp/pie-release-2
  remotes/aosp/pie-s2-release
  remotes/aosp/pie-security-release
  remotes/aosp/pie-temp
  remotes/aosp/pie-vts-release
  remotes/aosp/sdk-release
  remotes/aosp/simpleperf-release
  remotes/aosp/stage-telephony-refactor
  remotes/aosp/studio-master-dev
  remotes/aosp/temp-124234733-master
  remotes/aosp/temp-PPRL.190605.003
  remotes/aosp/temp-b_69925323
  remotes/aosp/temp_140451723
  remotes/aosp/temp_b_131756210_stage-aosp-master
  remotes/aosp/temp_b_132622481_stage-aosp-master
  remotes/aosp/temp_b_145570283
  remotes/aosp/temp_p_merge
  remotes/aosp/tools_r20
  remotes/aosp/tools_r21
  remotes/aosp/tools_r22
  remotes/aosp/tools_r22.2
  remotes/m/android-8.1.0_r71 -> m/android-8.1.0_r71
  remotes/m/master -> aosp/master

所以你可以用下面命令基於當前分支創建本地分支:

$ repo start --all 8.1.0
Starting 8.1.0: 100% (590/590), done.  
$ repo branch
*  8.1.0                     | in all projects

5. 編譯

source build/envsetup.sh

lunch xxx-userdebug

make -j4

6. 編譯後的images可以通過fastboot刷到真機中。

$ adb reboot bootloader
$ fastboot flashall -w

7. 編譯問題

剛開始編譯就報告錯誤:

ninja: no work to do.
ninja: no work to do.
out/build-aosp_angler.ninja is missing, regenerating...
[493/998] including ./hardware/qcom/sdm845/Android.mk ...
./hardware/qcom/power/Android.mk:3: error: ./hardware/qcom/sdm845/Android.mk: No such file or directory
14:36:37 ckati failed with: exit status 1
ninja: no work to do.
[1/2] glob hardware/*/Android.bp
ninja: no work to do.
out/build-aosp_angler.ninja is missing, regenerating...
[493/997] including ./hardware/qcom/sm8150/Android.mk ...
./hardware/qcom/power/Android.mk:3: error: ./hardware/qcom/sm8150/Android.mk: No such file or directory
14:45:02 ckati failed with: exit status 1

進目錄查看,有無效軟鏈接:

~/aosp/hardware/qcom/sdm845$ ls -l
總用量 0
lrwxrwxrwx 1 zhb zhb 28 12月 12 14:20 Android.bp -> data/ipacfg-mgr/os_pickup.bp
lrwxrwxrwx 1 zhb zhb 28 12月 12 14:20 Android.mk -> data/ipacfg-mgr/os_pickup.mk

解決辦法是刪除 sdm845和sm8150目錄。

8. 內核下載問題

要科學上網,下載 msm 內核代碼的,https://android.googlesource.com/kernel/msm/

git clone https://android.googlesource.com/kernel/msm

clone成功後切換到分支 android-msm-angler-3.10-oreo-m7

然後開始編譯kernel:

cd msm
git checkout -b android-msm-angler-3.10-oreo-m7 origin/android-msm-angler-3.10-oreo-m7
export ARCH=arm64
export PATH=/home/xxx/aosp/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-android-
make angler_defconfig
make -j4
#編譯成功後復制結果到 aosp 目錄
cp arch/arm64/boot/Image.gz-dtb /home/xxx/aosp/device/huawei/angler-kernel/

 

9. 刷機問題

Nexus 6p 手機插入電腦後,用 adb 命令總提示出錯:

~/aosp$ adb shell
error: insufficient permissions for device: user in plugdev group; are your udev rules wrong?
See [http://developer.android.com/tools/device.html] for more information

出錯原因是手機usb id未被信任,看下手機usb id:

~/aosp$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge
Bus 001 Device 047: ID 258a:001a  
Bus 001 Device 002: ID 8087:07dc Intel Corp. 
Bus 001 Device 005: ID 093a:2532 Pixart Imaging, Inc. 
Bus 001 Device 095: ID 18d1:4ee7 Google Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

從中發現 Nexus 6p的 usb ID:18d1:4ee7,通過下面命令加到系統中,然後重新插拔usb即可。

$sudo vim /etc/udev/rules.d/51-android.rules
加入下面一行,保存退出:
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7", GROUP="plugdev", MODE="0666"

刷機步驟:

adb reboot bootloader

然後手機會重啓進入bootloader界面,有個小機器人和 START 文字指示。

按音量鍵,文字會在 START,Reboot  bootloader, Factory, Recovery mode, Power off, BP tools之間切換。

咱們切換到 Reboot bootloader,然後按Power鍵。

在這個界面如果下方文字顯示 Device is unlocked, 證明設備已經解鎖OK,否則電腦上輸入 fastboot flashing unlock解鎖。

注意調用fastboot要用root提權:

~/aosp$ sudo ./out/host/linux-x86/bin/fastboot reboot

單獨刷某個img:

~/aosp$cd out/target/product/angler
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot devices
84B5T16219000743	fastboot
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash system system.img 
target reported max download size of 494927872 bytes
erasing 'system'...
OKAY [  0.199s]
sending sparse 'system' 1/3 (483314 KB)...
OKAY [ 13.356s]
writing 'system' 1/3...
OKAY [  7.274s]
sending sparse 'system' 2/3 (483019 KB)...
OKAY [ 12.758s]
writing 'system' 2/3...
OKAY [  8.064s]
sending sparse 'system' 3/3 (51520 KB)...
OKAY [  1.432s]
writing 'system' 3/3...
OKAY [  0.738s]
finished. total time: 43.822s

~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash boot boot.img 
target reported max download size of 494927872 bytes
sending 'boot' (12125 KB)...
OKAY [  0.358s]
writing 'boot'...
OKAY [  0.183s]
finished. total time: 0.541s

~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash recovery recovery.img 
target reported max download size of 494927872 bytes
sending 'recovery' (19005 KB)...
OKAY [  0.549s]
writing 'recovery'...
OKAY [  0.290s]
finished. total time: 0.840s

~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash userdata userdata.img 
target reported max download size of 494927872 bytes
erasing 'userdata'...
OKAY [  4.165s]
sending 'userdata' (148357 KB)...
OKAY [  3.889s]
writing 'userdata'...
OKAY [  2.187s]
finished. total time: 10.241s

~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash cache cache.img 
target reported max download size of 494927872 bytes
erasing 'cache'...
OKAY [  0.029s]
sending 'cache' (5752 KB)...
OKAY [  0.209s]
writing 'cache'...
OKAY [  0.107s]
finished. total time: 0.345s

~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot reboot
rebooting...

finished. total time: 0.072s




重啓後就進入 Android 8.1 的界面了。

參考https://blog.csdn.net/konga/article/details/84786784

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章