Hallo zusammen,
Ich versuche den Kernel für das Meizu Pro 5 zu kompilieren und auf das
Handy zu flashen.
Ich verwende den Kernel von hier: https://github.com/meizuosc/m576
Ich habe den kernel mit dem Compiler aus dem Compiler aus dem Packet
gcc-aarch64-linux-gnu aus dem Ubuntu xenial repo kompiliert,
"aarch64-linux-gnu-gcc -v" liefert folgendes:
1 | daniel@Daniels-Surface-Pro-3:~/projects/m576$ aarch64-linux-gnu-gcc -v
|
2 | Using built-in specs.
|
3 | COLLECT_GCC=aarch64-linux-gnu-gcc
|
4 | COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/aarch64-linux-gnu/5/lto-wrapper
|
5 | Target: aarch64-linux-gnu
|
6 | Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-arm64-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-arm64-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-arm64-cross --with-arch-directory=aarch64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-linux-gnu --program-prefix=aarch64-linux-gnu- --includedir=/usr/aarch64-linux-gnu/include
|
7 | Thread model: posix
|
8 | gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1)
|
Ist das der richtige Crosscompiler?
Den Kernel habe ich mit folgender Kommandozeile kompiliert:
1 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- pro5_defconfig
|
2 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
|
Ich verwende "abootimg" (ebenfals aus dem repo), um das bootimage zu
erstellen. Ich habe dazu zuerst mit dd eine Kopie des momentanen
boot.img vom handy gemacht, und dann mit "abootimg -x boot.img" die
Dateien "initrd.img" "zImage" und "bootimg.cfg" extrahiert. bootimg.cfg
habe ich noch leicht angepasst, sieht nun so aus:
1 | pagesize = 0x1000
|
2 | kerneladdr = 0x40080000
|
3 | ramdiskaddr = 0x42000000
|
4 | tagsaddr = 0x40000100
|
5 | name = Custom 1
|
6 | cmdline = debug systempart=/dev/disk/by-partlabel/system datapart=/dev/disk/by-partlabel/userdata
|
Ich habe zuerst mit diesen Dateien ein neues bootimg erstellt, geflasht
und gestartet:
1 | abootimg --create bootimg.img -f bootimg.cfg -k zImage -r initrd.img
|
2 | fastboot flash recovery bootimg.img
|
3 | fastboot oem reboot recovery
|
Das hat noch funktioniert. Dann habe ich das erstellte Image,
arch/amd64/boot/Image nach zImage kopiert und das ganze wiederholt. Aber
danach ist es direkt nach Anzeige des Meizu logos (wird vom bootloader
angezeigt) eingefroren. Ich habe keine Ahnung warum, und ich habe noch
keinen Weg gefunden beim Booten die Kernelmessages anzuzeigen. Es ist
echt zum verzweifeln.
Hat irgendjemand einen Tipp, was ich noch versuchen könnte, oder was ich
falsch mache?
PS: Weil ich eine neueren Compilerversion verwende als damals als der
Kernel erstellt wurde (den Compiler konnte ich noch nicht finden),
musste ich minimale Anpassungen am kernel machen damit dieser
Kompiliert. Allerdings nichts was die Funktionsweise beeinflussen würde.
Die Änderungen sind als Patch im Anhang.