Znalazłem ten AOSS build.sh dist tworzy:

  • Pliki XML:

    ./out/soong/.intermediates/kernel/configs/q/android-4.19/kernel_config_q_4.19/gen/conditional.xml
    ./out/soong/.intermediates/kernel/configs/q/android-4.19/kernel_config_q_4.19/matrix.xml
    

    Z plików konfiguracyjnych jądra:

    kernel/configs/q/
    ├── android-4.14
    │   ├── android-base-conditional.xml
    │   ├── android-base.config
    │   ├── Android.bp
    │   ├── android-recommended-arm64.config
    │   ├── android-recommended-arm.config
    │   ├── android-recommended.config
    │   └── android-recommended-x86.config
    ├── android-4.19
    │   ├── android-base-conditional.xml
    ... ...
    
  • Cała kopia katalogu jądra Linux w:

    out/target/product/sdm660_64/obj/kernel/msm-4.14
    

Ten nowo utworzony msm-4.14 zawiera plik .config, który wygląda jak normalna konfiguracja jądra.

Jak mogę skompilować ten jądro dla aarch64?

Kiedy używam make monituje, aby zregenerować plik konfiguracyjny x86_64, jako poprawnie .config zawiera ustawienia AARCH64.

Być może próbuję źle, ale mm w kernel/msm-4.14 ignorowano zmiany w konfigurację jądra, a build.sh dist.

Chcę móc zmienić konfigurację jądra i kod źródłowy i budować nowe jądra w zaledwie kilka minut, ponieważ mogę na komputery stacjonarne.

Jak mam to zrobić na Androida?

0
fadedbee 28 lipiec 2020, 17:44

1 odpowiedź

Najlepsza odpowiedź

Jest to sposób, aby skompilować jądro do sprzętu i utworzyć obraz rozruchowy:

$ cd <aosp_root_dir>
$ source ./build/envsetup.sh
$ lunch <product_name>-<build_variant>
# Example: lunch sdm660_64-userdebug

$ make bootimage -j4
# This compiles the kernel and copies it to 
# <aosp_root_dir>/out/target/product/<product_name>/kernel,
# and creates boot image at 
# <aosp_root_dir>/out/target/product/<product_name>/boot.img

Jeśli nadal musisz skrócić czas, musisz znaleźć indywidualne polecenia, które system budowy AOSP wykonuje, aby skompilować jądro i utworzyć obraz rozruchowy.

Możesz znaleźć polecenia z <aosp_root_dir>/out/verbose.log.gz. Jest to pakiet skompresowany, który zawiera pełny dziennik ostatniej kompilacji. Aby więc zbudować obraz rozruchowy za pomocą polecenia make bootimage, a następnie wyodrębnij pakiet verbose.log.gz, a otrzymasz plik verbose.log.

Wewnątrz tego pliku znajduje linię dziennika zawierającej tekst: defconfig, i który prawdopodobnie byłby to polecenie, które system budowy AOSP wykonuje, aby skompilować jądro.

W moim przypadku te 2 są poleceniami, które znalazłem z verbose log, który służy do skompilowania jądra:

# make sdm660_defconfig
${ANDROID_BUILD_TOP}/prebuilts/build-tools/linux-x86/bin/make -j1 \
    -C kernel/msm-4.4 \
    O=${ANDROID_PRODUCT_OUT}/obj/kernel/msm-4.4 \
    HOSTCC=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-gcc \
    HOSTAR=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ar \
    HOSTLD=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ld \
    HOSTCFLAGS="-I/usr/include -I/usr/include/x86_64-linux-gnu -L/usr/lib -L/usr/lib/x86_64-linux-gnu" \
    HOSTLDFLAGS="-L/usr/lib -L/usr/lib/x86_64-linux-gnu" \
    ARCH=arm64 \
    CROSS_COMPILE=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- \
    sdm660_defconfig

# make
${ANDROID_BUILD_TOP}/prebuilts/build-tools/linux-x86/bin/make -j4 \
    -C kernel/msm-4.4 \
    O=${ANDROID_PRODUCT_OUT}/obj/kernel/msm-4.4 \
    HOSTCC=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-gcc \
    HOSTAR=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ar \
    HOSTLD=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ld \
    HOSTCFLAGS="-I/usr/include -I/usr/include/x86_64-linux-gnu -L/usr/lib -L/usr/lib/x86_64-linux-gnu" \
    HOSTLDFLAGS="-L/usr/lib -L/usr/lib/x86_64-linux-gnu" \
    ARCH=arm64 \
    CROSS_COMPILE=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-

Po skompilowaniu jądra przy użyciu powyższych poleceń, zgodnie z verbose log Kopiuje wyjście kompilacji do <aosp_root_dir>/out/target/product/<product_name>/kernel. To jest pliki jądra używane do utworzenia obrazu rozruchowego.

cp "${ANDROID_PRODUCT_OUT}/obj/kernel/msm-4.4/arch/arm64/boot/Image.gz" \
    "${ANDROID_PRODUCT_OUT}/kernel"

Wreszcie możesz znaleźć polecenie, które tworzy obraz rozruchowy. Zgodnie z moim verbose log, zgodnie z poleceniem:

${ANDROID_BUILD_TOP}/out/host/linux-x86/bin/mkbootimg  \
    --kernel ${ANDROID_PRODUCT_OUT}/kernel  \
    --ramdisk ${ANDROID_PRODUCT_OUT}/ramdisk-recovery.img \
    --cmdline "console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc170000 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 sched_enable_hmp=1 sched_enable_power_aware=1 service_locator.enable=1 swiotlb=1 loop.max_part=7 buildvariant=eng veritykeyid=id:`openssl x509 -in build/target/product/security/verity.x509.pem -text | grep keyid | sed 's/://g' | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]' | sed 's/keyid//g'`" \
    --base 0x00000000 \
    --pagesize 4096 \
    --os_version 10 \
    --os_patch_level yyyy-mm-dd \
    --header_version 1 \
    --output  ${ANDROID_PRODUCT_OUT}/boot.img

Podobnie jak to znajdziesz polecenia, aby skompilować jądro do sprzętu i utwórz obraz rozruchowy.

2
Lakindu 6 sierpień 2020, 19:30