Braucht man außer der Toolchain noch mehr Fremdquellen zum builden eines ARM64 Linux 4.4 Android Kernels ?
ich bin so vorgegangen:
Vorbereitung:
$ mkdir ~/git
$ cd ~/git
$ export ARCH=arm64
$ export SUBARCH=arm64
$ export CROSS_COMPILE=prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-linaro-4.9/bin/aarch64-linux-android-
$ git clone <https:>//github.com/MrFlyingToasterman/android_kernel_oneplus_msm8998
Beziehen von Drittrepos und einbinden in die Kernel Source:
$ git clone <https:>//android.git.linaro.org/git-ro/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9-linaro.git prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-linaro-4.9
Kernel Cross Compile build:
$ make oneplus5_defconfig
$ make --keep-going -i
Der eigentliche Fehler besteht darin dass er keine Regel für vmlinux findet..Hier mal der Stacktrace:
CC lib/argv_split.o
CC lib/bug.o
CC lib/cmdline.o
CC lib/cpumask.o
CC lib/ctype.o
CC lib/dec_and_lock.o
CC lib/decompress.o
CC lib/decompress_bunzip2.o
CC lib/decompress_inflate.o
CC lib/decompress_unlz4.o
CC lib/decompress_unlzma.o
CC lib/decompress_unlzo.o
CC lib/decompress_unxz.o
CC lib/dump_stack.o
CC lib/earlycpio.o
CC lib/extable.o
CC lib/fdt.o
CC lib/fdt_empty_tree.o
CC lib/fdt_ro.o
CC lib/fdt_rw.o
CC lib/fdt_strerror.o
CC lib/fdt_sw.o
CC lib/fdt_wip.o
CC lib/flex_proportions.o
CC lib/idr.o
CC lib/int_sqrt.o
CC lib/ioremap.o
CC lib/irq_regs.o
CC lib/is_single_threaded.o
CC lib/klist.o
CC lib/kobject.o
CC lib/kobject_uevent.o
CC lib/md5.o
CC lib/nmi_backtrace.o
CC lib/plist.o
CC lib/proportions.o
CC lib/radix-tree.o
CC lib/ratelimit.o
CC lib/rbtree.o
CC lib/seq_buf.o
CC lib/sha1.o
CC lib/show_mem.o
CC lib/string.o
CC lib/timerqueue.o
CC lib/vsprintf.o
AR lib/lib.a
LINK vmlinux
LD vmlinux.o
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-linaro-4.9/bin/aarch64-linux-android-ld: cannot find arch/arm64/mm/built-in.o: Datei oder Verzeichnis nicht gefunden
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-linaro-4.9/bin/aarch64-linux-android-ld: cannot find ipc/built-in.o: Datei oder Verzeichnis nicht gefunden
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-linaro-4.9/bin/aarch64-linux-android-ld: cannot find drivers/built-in.o: Datei oder Verzeichnis nicht gefunden
make: [Makefile:946: vmlinux] Fehler 1 (ignoriert)
make[1]: *** Keine Regel vorhanden, um das Ziel „vmlinux“,
benötigt von „arch/arm64/boot/Image“, zu erstellen.
Noch ein paar Informationen über mein Betriebssystem:
OS: Arch Linux
Kernel: x86_64 Linux 4.11.9-1-ARCH
CPU: Intel Core i5-2520M @ 4x 3.2GHz [25.0°C]
GPU: intel
RAM: 2286MiB / 7867MiB
2 Antworten
Ich habe des Rätzels Lösung!
OnePlus hat den Fehler verursacht, der Kernel ist zurzeit nicht Buildbar.
Die betroffenen Files:
drivers/bluetooth/btfm_slim.c
drivers/bluetooth/btfm_slim_codec.c
drivers/bluetooth/btfm_slim_wcn3990.c
drivers/bluetooth/btfm_slim_wcn3990.h
drivers/gpu/msm/Makefile
drivers/gpu/msm/kgsl_events.c
drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c
drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h
drivers/net/ethernet/msm/Makefile
drivers/platform/msm/ipa/ipa_v2/Makefile
drivers/platform/msm/ipa/ipa_v3/Makefile
drivers/platform/msm/mhi/mhi_ssr.c
drivers/power/supply/qcom/qpnp-smbcharger.c
drivers/soc/qcom/Makefile
include/trace/events/msm_cam.h
kernel/printk/printk.c
security/pfe/pfk_ecryptfs.c
security/pfe/pfk_ecryptfs.h
security/pfe/pfk_ext4.c
security/pfe/pfk_ext4.h
sound/soc/msm/msm8996.c
sound/soc/msm/msm8998.c
Mehr dazu hier: https://github.com/adinkwok/oneplus5-kernel/commit/ec4ec687ba23609b9c323145c7d509262b0f025f
Des weiteren hab ich die Fehlermeldung etwas falsch gelesen:
fatal error: ./ipa_trace.h: No such file or directory
fatal error: msm_isp.h: No such file or directory
fatal error: ./kgsl_trace.h: No such file or directory
Aufgrund dieser 3er Meldungen konnte VMLinux nicht gebuildet werden da es hierauf dependiert!
Man kann den Kernel allerdings trotzdem bauen wenn er mit der kompletten Source der OxygenOS Rom kompiliert wird!
Mehr zu dem Fehler hier: https://github.com/OnePlusOSS/android_kernel_oneplus_msm8998/issues/3
Ich nehme an das das Problem damit zusammenhängt das wohl einige dateien fehlen. Versuche erstmal diese wieder zu finden und versuche es erneut. Die sollten theoretisch eigentlich dabei sein.
tut mir leid. ich habe mit Android direkt garnichts am hut und hab da auch keine erfahrung. das wäre jetzt nur meine vermutung gewesen das es daran vielleicht liegen könnte.
Hier sind noch ausführlichere Informationen:
https://github.com/OnePlusOSS/android_kernel_oneplus_msm8998/issues/6
Das große Problem ist dass in der Original Source die "drivers/" wohl unvollständig sind.
Hier ist die Git Repo des Entwicklers: https://github.com/OnePlusOSS/android_kernel_oneplus_msm8998
Meine Idee wäre jetzt:
A: Der Entwickler hat Binary Blobs in seiner Source (Also der Entwickler hat nicht 100% seiner Source veröffentlicht)
oder
B: Diese Kernel Module müssen genauso wie die Toolchain durch eine Drittquelle eingebunden werden.
Ich bin noch neu im Thema Android OS Entwicklung daher bin ich noch unsicher mit solchen Geschichten.
Und man findet nirgendwo eine gute Dokumentation, alle docs erzählen einem was ganz anderes und der OEM scheint einen doch recht großen Einfluss auf den build Prozess zu nehmen..