====== Kernelkompilation ====== Nachfolgend soll die Möglichkeit beschrieben werden, einen anderen Kernel für das Android Custom ROM zu bauen und zu flashen. \\ ===== Nützliche Webseiten ===== Auf folgenden Webseiten wurden Informationen dazu gefunden: * [[https://wiki.ubuntuusers.de/Archiv/GNU_ARM-Toolchain/|https://wiki.ubuntuusers.de/Archiv/GNU_ARM-Toolchain/]] * [[https://forum.xda-developers.com/showthread.php?t=2073775|https://forum.xda-developers.com/showthread.php?t=2073775]] * [[https://forum.xda-developers.com/android/software/guide-easy-kernel-building-tutorial-t3581057|https://forum.xda-developers.com/android/software/guide-easy-kernel-building-tutorial-t3581057]] * [[https://forum.xda-developers.com/chef-central/android/guide-how-to-build-android-kernel-t3654336|https://forum.xda-developers.com/chef-central/android/guide-how-to-build-android-kernel-t3654336]] * [[https://forum.xda-developers.com/android/software-hacking/reference-how-to-compile-android-kernel-t3627297|https://forum.xda-developers.com/android/software-hacking/reference-how-to-compile-android-kernel-t3627297]] \\ ===== Voraussetzungen ===== Es wird ein DEBIAN-Linux-System vorausgesetzt, sowie eine Verbindung zum Internet, um Dateien herunterzuladen. Es kann ein [[debian-linux:minimalinstallation|Minimalinstallation]] als Voraussetzung genutzt werden. Nachfolgend werden alle Schritte in einer [[software:schroot#schroot|CHROOT-Umgebung]] durchgeführt. \\ Folgende Pakete müssen zusätzlich noch installiert werden: ~# apt install python libssl-dev build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libmpc-dev \ libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc git bc \\ ===== Toolchain ===== Eine "''Toolchain''" ist eine Art Werkzeugkiste, welche Programme beinhaltet, die für die Erstellung des Kernels verwendet werden. Das bekannteste Toolchain kommt von Google selbst: [[https://developer.android.com/tools/sdk/ndk/index.html|NDK]]. Aber es gibt auch andere, die zum Beispiel auf der Seite [[https://elinux.org/Toolchains|elinux.org]] kurz beschrieben werden. \\ === DEBIAN-Pakete === Das DEBIAN-System bringt selbst auch Toolchains mit, die über die Paketverwaltung installiert werden können: * ''gcc-arm-linux-gnueabi'' (für ARM-Architekturen) * ''gcc-aarch64-linux-gnu'' (für ARM64-Architekturen) \\ Folgende Pakete werden bei der Installation von "''gcc-arm-linux-gnueabi''" mit installiert: binutils-arm-linux-gnueabi cpp-6-arm-linux-gnueabi cpp-arm-linux-gnueabi gcc-6-arm-linux-gnueabi \ gcc-6-arm-linux-gnueabi-base gcc-6-cross-base gcc-arm-linux-gnueabi libasan3-armel-cross libatomic1-armel-cross \ libc6-armel-cross libc6-dev-armel-cross libgcc-6-dev-armel-cross libgcc1-armel-cross libgomp1-armel-cross \ libstdc++6-armel-cross libubsan0-armel-cross linux-libc-dev-armel-cross \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="/usr/bin/arm-linux-gnueabi-" \\ === Google NDK === Das Toolchain kann [[https://developer.android.com/ndk/downloads/|hier]] heruntergeladen werden. \\ Das heruntergeladene Archiv wird dann entpackt: ~$ cd toolchain ~$ unzip android-ndk-r17-linux-x86_64.zip Archive: android-ndk-r17-linux-x86_64.zip creating: android-ndk-r17/ creating: android-ndk-r17/toolchains/ inflating: android-ndk-r17/toolchains/NOTICE-MIPS64 creating: android-ndk-r17/toolchains/x86-4.9/ ... inflating: android-ndk-r17/python-packages/fastboot/setup.py inflating: android-ndk-r17/CHANGELOG.md inflating: android-ndk-r17/ndk-build \\ Zur Kompilierung des Kernels wird aber nicht das komplette NDK benötigt. Deswegen kann das Toolchain extra als "''Standalone''"-Variante installiert werden: ~$ cd android-ndk-r17 ~$ build/tools/make-standalone-toolchain.sh --install-dir=../google-ndk-r17 HOST_OS=linux HOST_EXE= HOST_ARCH=x86_64 HOST_TAG=linux-x86_64 HOST_NUM_CPUS=8 BUILD_NUM_CPUS=16 Auto-config: --arch=arm Toolchain installed to ../google-ndk-r17. ~$ cd .. \\ Das Verzeichnis "''android-ndk-r17''" kann jetzt bei Bedarf auch wieder entfernt werden, da es nicht mehr benötigt wird. \\ Das Toolchain kann wie folgt getestet werden: ~$ cd google-ndk-r17/bin ~$ echo "main(){}" | ./arm-linux-androideabi-gcc -x c - ~$ file a.out a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, not stripped ~$ rm a.out \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/google-ndk/bin/arm-linux-androideabi-" \\ === Google Prebuilts === Das Toolchain kann [[https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/|hier]] heruntergeladen werden. Nachfolgend wird das Toolchain "''arm-linux-androideabi-4.9''" heruntergeladen. \\ Der Download erfolgt mit "''git''": ~$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 Klone nach 'arm-linux-androideabi-4.9' ... remote: Sending approximately 262.98 MiB ... remote: Counting objects: 396, done remote: Total 2263 (delta 1060), reused 2263 (delta 1060) Empfange Objekte: 100% (2263/2263), 262.98 MiB | 706.00 KiB/s, Fertig. Löse Unterschiede auf: 100% (1060/1060), Fertig. \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-" \\ === GNU Arm Embedded Toolchain === Das Toolchain kann [[https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads|hier]] heruntergeladen werden. \\ Das heruntergeladene Archiv wird dann entpackt: ~$ tar xvfj gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 gcc-arm-none-eabi-7-2017-q4-major/ gcc-arm-none-eabi-7-2017-q4-major/lib/ gcc-arm-none-eabi-7-2017-q4-major/lib/libcc1.so.0.0.0 ... gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-cpp gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc-7.2.1 gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-nm \\ Zur Vereinfachung wird das neu erstellte Verzeichnis noch umbenannt: ~$ mv -v gcc-arm-none-eabi-7-2017-q4-major gnu-arm-7-2017-q4 'gcc-arm-none-eabi-7-2017-q4-major' -> 'gnu-arm-7-2017-q4' \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/gnu-arm-7-2017-q4/bin/arm-none-eabi-" \\ === Nathanchance Prebuilt ARM === Dieses Toolchain kommt von [[https://forum.xda-developers.com/android/development/toolchains-gnu-linaro-5th-2017-t3606941|xda-developers.com]]. \\ Der Download erfolgt über das Klonen: git clone -b arm-gnu-7.x --depth=1 https://github.com/nathanchance/gcc-prebuilts nathanchance-prebuilt-arm \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/nathanchance-prebuilt-arm/bin/arm-gnu-linux-androideabi-" \\ === Linaro ARM === Das Toolchain kann [[https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/|hier]] heruntergeladen werden. \\ Das heruntergeladene Archiv wird dann entpackt: ~$ tar xvfJ gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/ gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/include/ gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/include/gdb/ ... gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/libexec/gcc/arm-linux-gnueabihf/7.2.1/install-tools/fixincl gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/libexec/gcc/arm-linux-gnueabihf/7.2.1/install-tools/mkheaders gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/gcc-linaro-7.2.1-2017.11-linux-manifest.txt \\ Zur Vereinfachung wird das neu erstellte Verzeichnis noch umbenannt: ~$ mv -v gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf linaro-arm 'gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf' -> 'linaro-arm' \\ Das Toolchain kann wie folgt getestet werden: ~$ cd linaro-arm/bin ~$ echo "main(){}" | ./arm-linux-gnueabihf-gcc -x c - :1:1: warning: return type defaults to ‘int’ [-Wimplicit-int] ~$ file a.out a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter \ /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=995639f16ef402f3cf87b3b2c59fedb3b0ba8db0, not stripped ~$ rm a.out \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/linaro-arm/bin/arm-linux-gnueabihf-" \\ === UBER Toolchain === Dieses Toolchain kommt von [[https://forum.xda-developers.com/android/software/toolchain-uber-toolchains-t3527997|xda-developers.com]]. Die fertigen Archive liegen auf [[https://bitbucket.org/matthewdalex/|bitbucket.org]]. \\ Das gewünschte Archiv wird heruntergeladen: ~$ wget https://bitbucket.org/matthewdalex/arm-linux-androideabi-4.9/get/0ed6f4e24a62.zip \\ Im nächsten Schritt muss entpackt werden: ~$ unzip 0ed6f4e24a62.zip && rm 0ed6f4e24a62.zip \\ Zur Vereinfachung wird das neu erstellte Verzeichnis noch umbenannt: ~$ mv -v matthewdalex-arm-linux-androideabi-4.9-0ed6f4e24a62 ubertc-arm 'matthewdalex-arm-linux-androideabi-4.9-0ed6f4e24a62' -> 'ubertc-arm' \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/ubertc-arm/bin/arm-linux-androideabi-" \\ === Linaro AARCH64 === Das Toolchain kann [[https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/|hier]] heruntergeladen werden. Es kann ausschließlich für 64-Bit-Architekturen verwendet werden. \\ Das heruntergeladene Archiv wird dann entpackt: ~$ tar xvfJ gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/ gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/include/ gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/include/gdb/ ... gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64/libstdc++.so.6.0.21 gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64/libstdc++.a gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64/libasan_preinit.o \\ Zur Vereinfachung wird das neu erstellte Verzeichnis noch umbenannt: ~$ mv -v gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu linaro-aarch64 'gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu' -> 'linaro-aarch64' \\ Das Toolchain kann wie folgt getestet werden: ~$ cd linaro-aarch64/bin ~$ echo "main(){}" | ./aarch64-linux-gnu-gcc -x c - :1:1: warning: return type defaults to ‘int’ [-Wimplicit-int] ~$ file a.out a.out: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter \ /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=e3733727fdcae630f517bc32fe62aaf1fa074380, not stripped ~$ rm a.out \\ Die Umgebungsvariable für den Cross-Kompiler wird dann wie folgt gesetzt: CROSS_COMPILE="$(pwd)/toolchain/linaro-aarch64/bin/aarch64-linux-gnu-" \\ ===== Architektur ===== Jetzt müüsen noch die Variablen für die Architektur gesetzt werden: ~$ export ARCH=arm ~$ export SUBARCH=arm \\ Hier muss bei Bedarf eine andere Architektur (zum Beispiel "''arm64''") verwendet werden. \\ ===== Kernelquelle ===== Der Kernel für ein bereits angepasstes Gerät kann zum Beispiel von [[https://github.com/LineageOS/android_kernel_samsung_msm8974|Github]] heruntergeladen werden. Wichtig ist es hier, auf den richtigen Chipsatz des Gerätes zu achten. Nachfolgend wird ein anderer [[https://github.com/LineageOS/android_kernel_samsung_msm8974.git|Kernel]] für das Gerät Samsung Galaxy S5 (SM-G900F) gebaut, welches einen Qualcomm-Chipsatz besitzt. \\ Im ersten Schritt wird das Repository auf den lokalen Rechner geklont: ~$ git clone -b cm-14.1 https://github.com/LineageOS/android_kernel_samsung_msm8974.git lineageos-samsung-msm8974 \\ ===== Bauvorgang ===== Die Kernelkonfiguration ist im neu erstellten Verzeichnis "''lineageos-samsung-msm8974/''" unter "''arch/arm/configs/''" zu finden, nachfolgend wird die Datei "''lineage_klte_bcm2079x_defconfig''" genutzt. Auch diese muss zum eigenen Gerät und zu Architektur passen. \\ Jetzt erfolgt der Wechsel in das neu erstellte Verzeichnis und das Bauen kann durchgeführt werden: ~$ cd lineageos-samsung-msm8974 ~$ make clean #### make completed successfully (2 seconds) #### ~$ make mrproper #### make completed successfully (4 seconds) #### ~$ make lineage_klte_bcm2079x_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate' sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate' boolean symbol SND_SOC_MAX98506 tested for 'm'? test forced to 'n' sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group # # configuration written to .config # #### make completed successfully (2 seconds) #### ~$ make -s -j$(nproc --all) sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate' sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate' boolean symbol SND_SOC_MAX98506 tested for 'm'? test forced to 'n' ... HMAC-SHA256(builtime_bytes.bin)= 183c03ebecd2d7d347b1eacccfa290e85af99879e9f93349e96131e2810e8196 Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready Kernel: arch/arm/boot/zImage-dtb is ready #### make completed successfully (19 seconds) #### \\ ==== Fehlerbehandlung ==== Es kann vorkommen, dass die Kompilierung mit einer Fehlermeldung abbricht. Hier muss dann von Fall zu Fall geprüft werden, welche Kerneleinstellungen geändert werden müssen. Nachfolgend werden ein paar Beispiele gezeigt. \\ === net/netfilter/xt_TCPMSS.o === Die Kompilierung bricht mit folgender Meldung ab: Generating include/generated/mach-types.h make[2]: *** Keine Regel vorhanden, um das Ziel „net/netfilter/xt_TCPMSS.o“, benötigt von „net/netfilter/built-in.o“, zu erstellen. Schluss. make[2]: *** Es wird auf noch nicht beendete Prozesse gewartet... scripts/Makefile.build:443: die Regel für Ziel „net/netfilter“ scheiterte make[1]: *** [net/netfilter] Fehler 2 make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet... Makefile:961: die Regel für Ziel „net“ scheiterte make: *** [net] Fehler 2 \\ Aufruf der Kernelkonfiguration: ~$ make menuconfig \\ Hier dann "''Load an Alternate Configuration File''" auswählen und folgendes eingeben: arch/arm/configs/lineage_klte_bcm2079x_defconfig //Hier muss dann unter Umständen die selbst gewählte Kernelkonfiguration eingetragen werden.// \\ Dann zu folgenden Konfigurationspunkt wechseln: * ''[*] Networking support —>'' * ''Networking options —>'' * ''[*] Network packet filtering framework (Netfilter) —>'' * ''Core Netfilter Configuration —>'' * ''[ ] "TCPMSS" target support'' **(den Stern hier bitte rausnehmen)** //Beim Beenden des Konfigurationsmenüs muss die Datei gespeichert werden.// \\ ===== Flashen des Kernels ===== Nach einem erfolgreichen Bauvorgang entsteht die Kerneldatei namens "''zImage''". Kernel: arch/arm/boot/zImage is ready \\ Damit diese Datei auf dem Telefon funktioniert, muss sie in das Boot-Image integriert werden ("''boot.img''"). Die Boot-Image-Datei entsteht unter anderem als Nebenprodukt, wenn ein angepasstes Image (zum Beispiel LineageOS) gebaut wird. Dem Author sind jetzt zwei Möglichkeiten bekannt, das Kernel-Image in das Boot-Image zu integrieren, wobei auch nur eine funktioniert hat: [[https://github.com/osm0sis/Android-Image-Kitchen/tree/AIK-Linux|Android-Image-Kitchen]]. \\ Die Dateien können mit Hilfe von "''git''" auf den lokalen Rechner geklont werden: ~$ git clone -b AIK-Linux https://github.com/osm0sis/Android-Image-Kitchen.git \\ Die enthaltenen Skripte sind so erstellt wurden, dass alles innerhalb des neu erstellten Verzeichnisses "''Android-Image-Kitchen''" abläuft: ~$ cd Android-Image-Kitchen \\ Im ersten Schritt muss das Boot-Image entpackt werden: ~$ ./unpackimg.sh boot.img Android Image Kitchen - UnpackImg Script by osm0sis @ xda-developers Supplied image: boot.img Setting up work folders... Image type: AOSP Footer with "SEAndroid" type detected. Splitting image to "split_img/"... BOARD_KERNEL_CMDLINE console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 \ zcache.enabled=1 zcache.compressor=lz4 androidboot.bootdevice=msm_sdcc.1 buildvariant=userdebug BOARD_KERNEL_BASE 00000000 BOARD_NAME BOARD_PAGE_SIZE 2048 BOARD_HASH_TYPE sha1 BOARD_KERNEL_OFFSET 00008000 BOARD_RAMDISK_OFFSET 02000000 BOARD_SECOND_OFFSET 00f00000 BOARD_TAGS_OFFSET 01e00000 BOARD_OS_VERSION 7.1.2 BOARD_OS_PATCH_LEVEL 2018-04 BOARD_DT_SIZE 1843200 Unpacking ramdisk (as root) to "ramdisk/"... Compression used: gzip 5851 blocks Done! \\ Es wurden zwei neue Verzeichnisse "''ramdisk''" und "''split_img''" angelegt. Im zweiten befindet sich unser Kernel-Image, welches ausgetauscht werden soll: ~$ cp -v zImage split_img/boot.img-zImage 'zImage' -> 'split_img/boot.img-zImage' \\ Im letzten Schritt muss das "neue" Boot-Image wieder zusammengebaut werden: ~$ ./repackimg.sh Android Image Kitchen - RepackImg Script by osm0sis @ xda-developers Packing ramdisk (as root)... Using compression: gzip Getting build information... kernel = boot.img-zImage cmdline = console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 \ zcache.enabled=1 zcache.compressor=lz4 androidboot.bootdevice=msm_sdcc.1 buildvariant=userdebug board = base = 00000000 pagesize = 2048 kernel_offset = 00008000 ramdisk_offset = 02000000 second_offset = 00f00000 tags_offset = 01e00000 os_version = 7.1.2 os_patch_level = 2018-04 hash = sha1 dtb = boot.img-dtb Building image... Using format: AOSP Appending footer... Using type: SEAndroid Done! \\ Als Ergebnis wird die Datei "''image-new.img''" erstellt, welche auf das Telefon kopiert und dort (zum Beispiel mit Hilfe vom TWRP) installiert werden kann. \\ ===== Bauversuche SM-G900F ===== Nachfolgend sollen Bauversuche von Kompilierungen des Kernels für das Samsung Galaxy S5 (SM-G900F) beschrieben werden. \\ ==== OK: CyanogenMod ==== Der Kernel kann von der Seite [[https://github.com/CyanogenMod/android_kernel_samsung_klte|github.com]] heruntergeladen werden und kann für ein angepasstes Image verwendet werden. \\ === Download === Der Download der Quellen mit "''git''": ~$ git clone -b cm-14.1 https://github.com/CyanogenMod/android_kernel_samsung_klte.git github_cyanogenmod_android-kernel-samsung-klte \\ === Toolchain === Verlinken der Toolchain: ~$ cd github_cyanogenmod_android-kernel-samsung-klte ~$ ln -sf ../toolchain toolchain \\ === Bauskript === Bevor das Bauen des Kernel mit Hilfe des mitgelieferten Skriptes "''build_kernel.sh''" gestartet werden kann, muss dieses noch angepasst werden: export CROSS_COMPILE=$(pwd)/toolchain/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- mkdir -p output ... if [ -e output/arch/arm/boot/Image ]; then cp output/arch/arm/boot/Image $(pwd)/arch/arm/boot/zImage fi; \\ Jetzt kann das Skript ausgeführt werden: ~$ bash ./build_kernel.sh make: Verzeichnis „/data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte“ wird betreten HOSTCC scripts/basic/fixdep GEN /data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte/output/Makefile HOSTCC scripts/kconfig/conf.o ... make: Verzeichnis „/data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte“ wird verlassen make: Verzeichnis „/data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte“ wird betreten GEN /data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte/output/Makefile scripts/kconfig/conf --silentoldconfig Kconfig ... HMAC-SHA256(builtime_bytes.bin)= 6f415adf8ca4294d36522ca6d1db222bf8e0ec9db6006c60244cad843bed45cc OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o XZKERN arch/arm/boot/compressed/piggy.xzkern CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o CC arch/arm/boot/compressed/string.o SHIPPED arch/arm/boot/compressed/lib1funcs.S SHIPPED arch/arm/boot/compressed/ashldi3.S AS arch/arm/boot/compressed/lib1funcs.o AS arch/arm/boot/compressed/ashldi3.o AS arch/arm/boot/compressed/piggy.xzkern.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready make: Verzeichnis „/data/AndroidKernelBuild/github_cyanogenmod_android-kernel-samsung-klte“ wird verlassen \\ === Manueller Bauversuch === Vor dem erneuten Bauen sollten die Altlasten aufgeräumt werden: ~$ make clean && make mrproper \\ Jetzt der manuelle Bauversuch: ~$ make msm8974_sec_defconfig VARIANT_DEFCONFIG=msm8974pro_sec_klte_eur_defconfig SELINUX_DEFCONFIG=selinux_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c ... arch/arm/configs/msm8974pro_sec_klte_eur_defconfig:213:warning: override: reassigning to symbol NET_SCHED arch/arm/configs/msm8974pro_sec_klte_eur_defconfig:216:warning: override: reassigning to symbol NET_CLS_ACT arch/arm/configs/msm8974pro_sec_klte_eur_defconfig:218:warning: override: reassigning to symbol NET_EMATCH KCONFIG_DEBUG((null)) # # configuration written to .config # ~$ make -j$(nproc --all) \\ == Fehler "smd_init_dt.c" == CC kernel/sysctl_binary.o CC mm/fadvise.o arch/arm/mach-msm/smd_init_dt.c:24:25: fatal error: smd_private.h: No such file or directory #include ^ compilation terminated. scripts/Makefile.build:307: die Regel für Ziel „arch/arm/mach-msm/smd_init_dt.o“ scheiterte make[1]: *** [arch/arm/mach-msm/smd_init_dt.o] Fehler 1 make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet... CC mm/maccess.o CC ipc/msgutil.o \\ Eine Recherche im Internet ergibt, dass in der Datei "''arch/arm/mach-msm/smd_init_dt.c''" die Zeile 24: "''#include ''" in "''#include "smd_private.h"''" geändert werden muss. \\ == Fehler "rtac.c" == CC fs/f2fs/node.o LD drivers/clk/built-in.o sound/soc/msm/qdsp6v2/rtac.c:29:21: fatal error: q6voice.h: No such file or directory #include ^ compilation terminated. scripts/Makefile.build:307: die Regel für Ziel „sound/soc/msm/qdsp6v2/rtac.o“ scheiterte make[4]: *** [sound/soc/msm/qdsp6v2/rtac.o] Fehler 1 make[4]: *** Es wird auf noch nicht beendete Prozesse gewartet... LD drivers/clocksource/built-in.o CC drivers/cpufreq/cpufreq.o \\ Die Reparatur ist ähnlich des vorherigen Fehlers. In der Datei "''sound/soc/msm/qdsp6v2/rtac.c''" die Zeile 29: "''#include ''" in "''#include "q6voice.h"''" ändern. \\ == Fehler "mdss_mdp_trace.h" == LD drivers/usb/core/built-in.o CC drivers/usb/gadget/udc-core.o In file included from drivers/video/msm/mdss/mdss_mdp_trace.h:255:0, from drivers/video/msm/mdss/mdss_mdp.c:61: include/trace/define_trace.h:79:43: fatal error: ./mdss_mdp_trace.h: No such file or directory #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) ^ compilation terminated. scripts/Makefile.build:307: die Regel für Ziel „drivers/video/msm/mdss/mdss_mdp.o“ scheiterte make[4]: *** [drivers/video/msm/mdss/mdss_mdp.o] Fehler 1 scripts/Makefile.build:443: die Regel für Ziel „drivers/video/msm/mdss“ scheiterte make[3]: *** [drivers/video/msm/mdss] Fehler 2 scripts/Makefile.build:443: die Regel für Ziel „drivers/video/msm“ scheiterte make[2]: *** [drivers/video/msm] Fehler 2 scripts/Makefile.build:443: die Regel für Ziel „drivers/video“ scheiterte make[1]: *** [drivers/video] Fehler 2 make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet... CC drivers/usb/gadget/android.o CC net/ipv4/netfilter/nf_nat_ftp.o \\ Hier wird die Datei "''drivers/video/msm/mdss/mdss_mdp_trace.h''" im Verzeichnis "''include/trace/''" von der Datei "''define_trace.h''" gesucht. Damit dies funktioniert, kann eine symbolische Verknüpfung erstellt werden: ~$ cd include/trace/ ~$ ln -s ../../drivers/video/msm/mdss/mdss_mdp_trace.h ~$ cd - \\ == Fehler "mdss_mdp.h" == CC drivers/usb/dwc3/debugfs.o CC drivers/usb/dwc3/dwc3-msm.o In file included from include/trace/define_trace.h:79:0, from drivers/video/msm/mdss/mdss_mdp_trace.h:255, from drivers/video/msm/mdss/mdss_mdp.c:61: include/trace/./mdss_mdp_trace.h:25:22: fatal error: mdss_mdp.h: No such file or directory #include "mdss_mdp.h" ^ compilation terminated. scripts/Makefile.build:307: die Regel für Ziel „drivers/video/msm/mdss/mdss_mdp.o“ scheiterte make[4]: *** [drivers/video/msm/mdss/mdss_mdp.o] Fehler 1 make[4]: *** Es wird auf noch nicht beendete Prozesse gewartet... CC drivers/usb/gadget/udc-core.o CC drivers/usb/gadget/android.o \\ Dieser Fehler ist wieder ähnlich dem vorherigen Fehler. eine symbolische Verknüpfung der Datei "''./drivers/video/msm/mdss/mdss_mdp.h''" schafft Abhilfe: ~$ cd include/trace/ ~$ ln -s ../../drivers/video/msm/mdss/mdss_mdp.h ~$ cd - \\ Jetzt kann der Kernel erfolgreich gebaut werden: HMAC-SHA256(builtime_bytes.bin)= 98871c7ee747591b987d4b11ec74fdfc316e1a0fe159a2dabe85c6ae958a3c87 OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o XZKERN arch/arm/boot/compressed/piggy.xzkern CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o CC arch/arm/boot/compressed/string.o SHIPPED arch/arm/boot/compressed/lib1funcs.S SHIPPED arch/arm/boot/compressed/ashldi3.S AS arch/arm/boot/compressed/lib1funcs.o AS arch/arm/boot/compressed/ashldi3.o AS arch/arm/boot/compressed/piggy.xzkern.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready \\ ==== FEHLER: Boeffla-Venom-Kernel ==== Der Kernel wurde auf der Seite von [[https://forum.xda-developers.com/galaxy-s5/orig-development/kernel-genocide-venom-kernel-12-02-16-t3512403|xda-developers.com]] gefunden. Die Quellen befinden sich auf der Seite von [[https://github.com/TheSkater187|github.com]]. \\ === Download === Der Download der Quellen mit "''git''": ~$ git clone -b cm-14.1 https://github.com/TheSkater187/android_kernel_samsung_msm8974 github_theskater187_android-kernel-samsung-klte \\ === Toolchain === Verlinken der Toolchain: ~$ cd github_theskater187_android-kernel-samsung-klte ~$ ln -sf ../toolchain toolchain \\ === Bauskript === Damit die Toolchain gefunden wird, muss das Skript "''build_kernel.sh''" angepasst werden: export CROSS_COMPILE=$(pwd)/toolchain/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- mkdir -p output ... if [ -e output/arch/arm/boot/Image ]; then cp output/arch/arm/boot/Image $(pwd)/arch/arm/boot/zImage fi; \\ Jetzt kann das Skript ausgeführt werden: ~$ bash ./build_kernel.sh make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_android-kernel-samsung-klte“ wird betreten HOSTCC scripts/basic/fixdep GEN /data/AndroidKernelBuild/github_theskater187_android-kernel-samsung-klte/output/Makefile HOSTCC scripts/kconfig/conf.o ... arch/arm/mach-msm/built-in.o:msm8974-thermistor.c:function msm8974_init: error: undefined reference to 'msm_8974_init_gpiomux' arch/arm/mach-msm/built-in.o:msm8974-thermistor.c:function pil_boot: error: undefined reference to 'poweroff_charging' arch/arm/mach-msm/built-in.o:msm8974-thermistor.c:function msm_restart: error: undefined reference to 'poweroff_charging' drivers/built-in.o:sii8240.c:function of_sii8240_probe_dt: error: undefined reference to 'acc_register_notifier' /data/AndroidKernelBuild/github_theskater187_android-kernel-samsung-klte/Makefile:889: die Regel für Ziel „.tmp_vmlinux1“ scheiterte make[1]: *** [.tmp_vmlinux1] Fehler 1 Makefile:130: die Regel für Ziel „sub-make“ scheiterte make: *** [sub-make] Fehler 2 make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_android-kernel-samsung-klte“ wird verlassen \\ Bisher wurde für diesen Fehler noch keine Lösung gefunden. \\ === Manueller Bauversuch === Vor dem erneuten Bauen sollten die Altlasten aufgeräumt werden: ~$ make clean && make mrproper \\ Jetzt der manuelle Bauversuch: make msm8974_sec_defconfig VARIANT_DEFCONFIG=msm8974pro_sec_klte_eur_defconfig SELINUX_DEFCONFIG=selinux_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c ... arch/arm/configs/msm8974_sec_defconfig:434:warning: override: reassigning to symbol HID_ELECOM arch/arm/configs/msm8974_sec_defconfig:612:warning: override: reassigning to symbol KEYS # # configuration written to .config # ~$ make -j$(nproc --all) \\ Es tritt der gleiche Fehler auf. \\ ==== OK: CrazySuperKernel ==== Der Kernel wurde auf der Seite von [[https://github.com/TheSkater187|github.com]] gefunden. \\ === Download === Der Download der Quellen mit "''git''": ~$ git clone https://github.com/TheSkater187/CrazySuperKernel-CM14.1-KLTE-New-rebase.git github_theskater187_crazysuperkernel \\ === Toolchain === Verlinken der Toolchain: ~$ cd github_theskater187_crazysuperkernel ~$ ln -sf ../toolchain toolchain \\ === Bauskript === Damit die Toolchain gefunden wird, muss das Skript "''build_kernel.sh''" angepasst werden: export CROSS_COMPILE=$(pwd)/toolchain/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- mkdir -p output ... if [ -e output/arch/arm/boot/Image ]; then cp output/arch/arm/boot/Image $(pwd)/arch/arm/boot/zImage fi; \\ Jetzt kann das Skript ausgeführt werden: make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_crazysuperkernel“ wird betreten HOSTCC scripts/basic/fixdep GEN /data/AndroidKernelBuild/github_theskater187_crazysuperkernel/output/Makefile HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c ... make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_crazysuperkernel“ wird verlassen make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_crazysuperkernel“ wird betreten GEN /data/AndroidKernelBuild/github_theskater187_crazysuperkernel/output/Makefile scripts/kconfig/conf --silentoldconfig Kconfig ... DTC arch/arm/boot/msm8974pro-ac-sec-k-r14.dtb CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready make[2]: Für das Ziel „arch/arm/boot/dtbs“ ist nichts zu tun. make: Verzeichnis „/data/AndroidKernelBuild/github_theskater187_crazysuperkernel“ wird verlassen \\ ==== OK: Boeffla-Kernel ==== Der Kernel wurde auf der Seite von [[https://forum.xda-developers.com/galaxy-s5/orig-development/kernel-boeffla-kernel-1-0-beta1-23-03-t3062073|xda-developers.com]] gefunden. Die Quellen befinden sich auf [[https://github.com/andip71|github.com]]. \\ === Download === Der Download der Quellen mit "''git''": ~$ git clone -b boeffla_cm14 https://github.com/andip71/boeffla-kernel-cm-s5.git github_andip71_boeffla-cm14-s5 \\ === Toolchain === Verlinken der Toolchain: ~$ cd github_andip71_boeffla-cm14-s5 ~$ ln -sf ../toolchain toolchain \\ === bbuild-anykernel.sh === Anpassen des Skriptes "''bbuild-anykernel.sh''": TOOLCHAIN="$(pwd)/toolchain/google-ndk/bin/arm-linux-androideabi-" \\ Erstellen des Bauverzeichnisses: ~$ ./bbuild-anykernel.sh 0 0 - copy code \\ Bereinigen: ~$ ./bbuild-anykernel.sh 1 1 - make clean \\ Konfiguration erstellen: ~$ ./bbuild-anykernel.sh 2 2 - make config Makestring: O=output arch=arm boeffla_defconfig VARIANT_DEFCONFIG=boeffla_defconfig_variant HOSTCC scripts/basic/fixdep GEN /data/AndroidKernelBuild/build/output/Makefile ... sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group # # configuration written to .config # \\ Kompilieren des Kernels: ~$ ./bbuild-anykernel.sh 3 3 - compile GEN /data/AndroidKernelBuild/build/output/Makefile scripts/kconfig/conf --silentoldconfig Kconfig sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate' sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate' ... chipset: 3255369473, rev: 65536, platform: 5, subtype: 0 => Found 7 unique DTB(s) Generating master DTB... completed compile time: 168 seconds Kernel image size (bytes): 6486856 \\ Kernel vorbereiten: ~$ ./bbuild-anykernel.sh 4 4 - prepare anykernel >>> cleanup repack folder '/data/AndroidKernelBuild/build/output/net/sunrpc/sunrpc.ko' -> '/data/AndroidKernelBuild/repack/modules/sunrpc.ko' '/data/AndroidKernelBuild/build/output/net/sunrpc/auth_gss/auth_rpcgss.ko' -> '/data/AndroidKernelBuild/repack/modules/auth_rpcgss.ko' '/data/AndroidKernelBuild/build/output/drivers/input/joystick/xpad.ko' -> '/data/AndroidKernelBuild/repack/modules/xpad.ko' ... '/data/AndroidKernelBuild/build/output/fs/nfs/nfs.ko' -> '/data/AndroidKernelBuild/repack/modules/nfs.ko' '/data/AndroidKernelBuild/build/output/fs/ntfs/ntfs.ko' -> '/data/AndroidKernelBuild/repack/modules/ntfs.ko'>>> strip modules \\ Kernel erstellen: ~$ ./bbuild-anykernel.sh 5 5 - create anykernel zip >>> create flashable zip adding: anykernel.sh (deflated 54%) adding: dtb (deflated 81%) adding: META-INF/ (stored 0%) ... adding: tools/busybox (deflated 37%) adding: zImage (deflated 0%)>>> create load&flash files \\ Die fertigen Dateien liegen eine Verzeichnisebene höher in "''build/''" und "''repack/''". \\ === build_kernel.sh === Anpassen des Skriptes "''build_kernel.sh''": export CROSS_COMPILE="$(pwd)/toolchain/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-" \\ Als nächstes wurden alle Kernelparameter aus der Datei "''./arch/arm/configs/boeffla_defconfig''", die nicht in der Datei "''./arch/arm/configs/msm8974_sec_defconfig''" enthalten sind, in dieser hinzugefügt. Welche Parameter das sind, kann in {{:android:boeffla-kernel_msm8974-boeffla-defconfig.txt|dieser}} Datei nachgelesen werden. \\ Kernel bauen: ~$ bash ./build_kernel.sh make: Verzeichnis „/data/AndroidKernelBuild/github_andip71_boeffla-cm14-s5“ wird betreten HOSTCC scripts/basic/fixdep GEN /data/AndroidKernelBuild/github_andip71_boeffla-cm14-s5/output/Makefile HOSTCC scripts/kconfig/conf.o ... OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready make: Verzeichnis „/data/AndroidKernelBuild/github_andip71_boeffla-cm14-s5“ wird verlassen 'output/arch/arm/boot/Image' -> '/data/AndroidKernelBuild/github_andip71_boeffla-cm14-s5/arch/arm/boot/zImage' \\ === Manuelles Bauen === Kopieren der Datei "''./arch/arm/configs/msm8974_sec_defconfig''" zu einer eigenen Datei "''./arch/arm/configs/meine-samsung-konfiguration_defconfig''": ~$ cp -v ./arch/arm/configs/msm8974_sec_defconfig ./arch/arm/configs/meine-samsung-konfiguration_defconfig './arch/arm/configs/msm8974_sec_defconfig' -> './arch/arm/configs/meine-samsung-konfiguration_defconfig' \\ Ergänzen aller fehlenden Kernelparameter aus der Datei "''./arch/arm/configs/boeffla_defconfig''", die nicht in der Datei "''./arch/arm/configs/meine-samsung-konfiguration_defconfig''" vorhanden sind. Welche Parameter das sind, kann in {{:android:boeffla-kernel_msm8974-boeffla-defconfig.txt|dieser}} Datei nachgelesen werden. Die verwendete Konfigurationsdatei "''meine-samsung-konfiguration_defconfig''" ist {{:android:meine-samsung-konfiguration_defconfig|hier}} zu finden. \\ Bereinigen des Baumes: ~$ make clean && make mrproper \\ Erstellen der Konfiguration: ~$ make meine-samsung-konfiguration_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate' sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate' boolean symbol SND_SOC_MAX98506 tested for 'm'? test forced to 'n' sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group arch/arm/configs/bornis_defconfig:866:warning: override: reassigning to symbol RCU_FAST_NO_HZ arch/arm/configs/bornis_defconfig:867:warning: override: reassigning to symbol IKCONFIG arch/arm/configs/bornis_defconfig:868:warning: override: reassigning to symbol IKCONFIG_PROC arch/arm/configs/bornis_defconfig:899:warning: override: reassigning to symbol MODULES arch/arm/configs/bornis_defconfig:900:warning: override: reassigning to symbol MODULE_UNLOAD arch/arm/configs/bornis_defconfig:901:warning: override: reassigning to symbol MODULE_FORCE_UNLOAD arch/arm/configs/bornis_defconfig:1175:warning: override: reassigning to symbol JOYSTICK_XPAD arch/arm/configs/bornis_defconfig:1295:warning: override: reassigning to symbol HID_ELECOM arch/arm/configs/bornis_defconfig:1473:warning: override: reassigning to symbol KEYS # # configuration written to .config # \\ Erstellen des Kernels: ~$ make -j$(nproc --all) scripts/kconfig/conf --silentoldconfig Kconfig sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate' sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate' boolean symbol SND_SOC_MAX98506 tested for 'm'? test forced to 'n' sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group WRAP arch/arm/include/generated/asm/auxvec.h WRAP arch/arm/include/generated/asm/bitsperlong.h WRAP arch/arm/include/generated/asm/cputime.h ... AS arch/arm/boot/compressed/ashldi3.o AS arch/arm/boot/compressed/piggy.xzkern.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready \\ ==== Weitere Funde ==== Es gibt im Internet noch verschiedene andere Kernel zu finden, die bisher nicht weiter getestet wurden: * [[https://www.android-hilfe.de/forum/aosp-aokp-basierende-custom-roms-fuer-samsung-galaxy-s5.2028/|https://www.android-hilfe.de/forum/aosp-aokp-basierende-custom-roms-fuer-samsung-galaxy-s5.2028/]] * [[https://android-hubo.de/thread/5730-smartpack-kernel-g900f-lineageos-cm14-1-samsung-galaxy-s5/|https://android-hubo.de/thread/5730-smartpack-kernel-g900f-lineageos-cm14-1-samsung-galaxy-s5/]] * [[https://github.com/gsstudios/LOS-plus-kernel|https://github.com/gsstudios/LOS-plus-kernel]] * [[https://github.com/bemerguy/tuned-kernel-LOS-s5|https://github.com/bemerguy/tuned-kernel-LOS-s5]] * [[https://sunilpaulmathew.github.io/downloads/|https://sunilpaulmathew.github.io/downloads/]] * [[https://github.com/friedrich420/S5-G900F-AEL-Kernel-LOLLIPOP|https://github.com/friedrich420/S5-G900F-AEL-Kernel-LOLLIPOP]] * [[https://forum.xda-developers.com/galaxy-s5/development/kernel-smartpack-project-stock-t3568810|xda-developers.com]] (Stock-Kernel) \\ \\ --- //[[steffen.bornemann@gmx.de|Steffen Bornemann]] 15.06.2018// \\ {{tag>CHROOT DEBIAN Google NDK Toolchain ARM Kernel Flash SM-G900F CyanogenMod}}