Custom Kernel für das Asus Zenfone 2 (Z00D)

  • 6 Antworten
  • Letztes Antwortdatum
H

hardwaremaster

Erfahrenes Mitglied
35
Hallo Leute,

ich bin wieder zurück. Es ist schon relativ lange her....nun ja.....joaaaaaaa.......sehr lange her ;P
Ich habe nun ein Asus Zenfone 2, indem ein Intel Atom SoC, bekannt als Z2560, verbaut ist.
Nun ja, die Performance ist recht gut: Im PsP Emulator PPSSPP lassen sich Tekken 6 und Monster Hunter 3rd portable HD recht flüssig spielen. Dieser Dual Core SoC mit Intels Hyper-Threading hat schon einiges zu bieten, allerdings soll jetzt die Performance mit einem optimalen x86-Kernel (Optimierung des Codes) verbessert werden.
Und zum Overclocking habe ich mir bereits einige Sachen angeschaut:
der cpufreq driver basiert auf sfi und befindet sich Kernel als sfi-cpufreq.c im Ordner \driver\cpufreq\
und hierzu einige nützliche Infos:

data->max_freq = perf->states[0].core_frequency * 1000;
/* table init */
for (i = 0; i < perf->state_count; i++) {
if (i > 0 && perf->states.core_frequency >=
data->freq_table[valid_states-1].frequency / 1000)
continue;

======>core_frequency * 1000 zu core_frequency *1100 ändern und dann noch maximale CPU Frequenz auf 1.8GHz ändern. Irgendwo sah ich die Voltages im Kernel und dort sah es relativ gut aus, sodass der Prozessor mithilfe der Enhanced Speedstep Technologie schon die richtige Spannung finden sollte.

Es gibt viele Dinge, die man in den Kernel setzen kann, aber ich werde möglichst nur die sinnvollsten Features implementieren. Auf Vorschläge würde ich mich immer wieder freuen.

Update 1.10.

Kompiliert wird mit linaro gcc 5.4. (von mir selbst kompilierter Cross Compiler )um den Code erheblich für den x86 Intel Atom Prozessor zu optimieren (später evtl mal mit gcc 7.2.)
Der Stock-Kernel hat meiner Ansicht nach schon gute Features, die aus aktuelleren Kernel stammen (>3.10.).

4.10.
Bin schon etwas weiter mit meinem zukünftigen Compiler (muss noch ein paar Fehler beseitigen)
GCC linaro 6.3 compiliert zudem auch im -O2 Modus (Optimization level 2),allerdings ist da so ein Problemchen mit pthread.h :( . hmmmmm
sooooo, es gibt nun zwei Wege: entweder ich re-installiere linaro-6.3 als gcc mit --enable-threads=posix (für unix-basierte Systeme) und aktiviere meinen cross-gcc mit den Threads oder Weg 2: das Pre-compilen von c -libraries .........meeeeeh
 

Anhänge

  • upload_2017-9-30_20-25-49.png
    upload_2017-9-30_20-25-49.png
    39,9 KB · Aufrufe: 372
Zuletzt bearbeitet:
Der pthread.h Fehler ist weg nun läuft es deutlich besser bis auf einen anderen blöden, der mich einfach *ach, cross-compiling* ist ein Schmerz.....

Optimisierung für den Atom-Prozessor: -march=atom -mtune=atom -mfpmath=sse -mssse3 -ftree-loop-if-convert -m32

so sieht momentan aus
Bildschirmfoto vom 2017-10-08 17-59-00.png


Also, ich muss nur noch libgcc linken, damit der Cross Compiler alle notwendigen Daten installieren kann..............

genau deswegen: ......./libgcc/ bla bla bla
[doublepost=1507486856,1507480688][/doublepost]
Bildschirmfoto vom 2017-10-08 20-18-52.png


Stand 09.10.

Bin dabei das Problem zu beheben o.O

12.10

Werde jetzt von Ubuntu auf gentoo oder funtoo umsteigen, da ich dann den Cross Compiler dann komplett von der Souce aus builden kann und nicht wie jetzt mit binärem Zeugs, dadurch sollte das Builden eines Cross Compilers deutlich besser sein. Einen Cross Compiler zu bauen ist net so einfach WIE man es sich DENKT.
 
Zuletzt bearbeitet:
OH MEIIIIIN !!!!! Der Atomprozessor im Z00D basiert auf Saltwell und sein Befehlssatz ist 64bit und somit kann ich den den i386-linux linker für meinen cross compiler schon knicken. Ich probiere es mal mit x86-64-linux aus .....

Stand 15.10
Ich habe heute eh_dummy.c gelinkt und danach wurde mir eines klar: es besteht ein Konflikt in glibc (hauptsächlich Binardateien) und den Kernel headers von z00d.
Nun ist Ubuntu deinstalliert und Gentoo wird raufgespielt, damit ich endlich von der Source aus builden kann.....
 
Zuletzt bearbeitet:
Stand 22.10
Habe nun Gentoo Linux auf meinem Pc :)
Die Installation war etwas mühselig, aber dadurch habe ich vieles gelernt.
Die Atom Cpu unterstützt i686 Befehle und mithilfe richtiger CFLAGS kann ich nun i686 auf diesen Atom zuschneiden. Der i386 Befehlssatz war falsch und daher war auch der Konflikt "invalid machine code" im GCC. Die Kernel Headers vom z00d waren nicht mit i386 kompatibel.
Ich arbeite weiterhin mit GENTOO . Die Installation dauerte 5 Tage.........Aber mit Ubuntu wäre so ein Fortschritt in Cpu Kenntnisse nicht möglich.

24.10.
Android nutzt bionic libc statt glibc. Jetzt wird es knifflig bzw. muss schauen wie ich das jetzt mit bionic libc auf Gentoo mithilfe von crossdev hinbekomme...
25.10
Der Cross Compiler von " Cross Compiler und Android " ist leider auf GCC 4.7 Basis und GCC 5.4 bietet schon deutlich mehr Optimierung.
 
Zuletzt bearbeitet:
Ich habe versucht die bionic c library für android (glibc,uClibc funktionieren nicht, sind binär nicht kompatibel) mit GCC linaro 5.4 zu linken (über ein extra PATH "LD_DIR_PATH") und es lief relativ gut bis zu einem Punkt, wo ich dann vor 'ner Wand stand. Es ist sehr schwer und könnte Wochen dauern....vor allem ich glaube, man muss diese Library extra konfigurieren und ich weiß noch nicht wie.
Stattdessen geht es mit Android NDK Kit und evtl. müsste es mit dem Gentoo-bionic project gehen (siehe: GitHub - easior/gentoo-bionic: Forked from https://code.google.com/p/gentoo-bionic). Ich muss mal schauen, ob die ebuilds für gentoo-bionic schon in Portage (der Gentoo-Paketmanager gleicht keinem binären Paketmanager) drin sind oder manuell hinzugefügt werden müssen.
Außerdem gucke ich im Kernel nach, welche Optionen dargeboten sind, um die CPU zu optimieren (oder evtl. den Kernel auf die Version "updaten", die diese extra Optionen hat).
Es besteht noch viel Arbeit :D

Habe 'ne neue Info:
der Atom z2560 basiert auf Saltwell, welcher wiederum auf Bonell Atom zurückführt, der ursprünglich im 45nm-Verfahren angefertigt wurde, wobei der Saltwell im 32nm-Verfahren angefertigt worden war. Es gibt einen patch für den Asus z00d, um die Optimisation "-march (CPU Architektur)=bonell" anwenden zu können. . Dieser Patch funzt mit gcc ab Version 4.9.
Ich habe bereits ein paar relevante Dateien im arch x86 Ordner gefunden, an welchen ich ein paar Änderungen vornehmen kann.

Habe nun "MATOM" (Architektur ATOM) mit "bonnell" definiert, denn der z2560 ist ein verbesserter "Bonnell". Die extra Features habe ich im Config des Kernels freigeschaltet.

Nun will ich bionic als ebuild in Portage integrieren, weil ich ich nicht den 4.9 Compiler nutzen will, sondern Gentoos 5.4

4.November
Habe heute mit zwei Cross Compilern (einer direkt aus dem NDK und danach mit meinem eigenen, mit FLAGS für den Atom-Prozessor) den Kernel mithilfe des NDKs kompiliert (wegen API-Unterstützung) und beide bzImages (also der komprimierte Kernel) hatten die selbe Größe. Demnächst wird die RAMDISK zusammengeschraubt.....

5.November
HMMMMM...Das große Problem: der z00d Kernel (3.10.20)-- der Cross Compile Test wurde mit linux 3.10.107 durchgeführt- hat einige Treiber nicht. Mir fehlen die Treiber für die GPU und Kamera. Selbst kconfigmeldet Störungen, da diese Treiber--------DANKE ASUS. Also sowas sehe ich wirklich....Bei Qualcomm und MALI SoCs habe ich sowas nicht gesehen. Mal gucken, was sich machen lässt.

Habe nun endlich die source mit allen Treibern gefunden!

Features, die implementiert werden:
GPU Max Takt von 400 auf 500mhz
t allen Treibern gefunden!

Features, die implementiert werden:
GPU Max Takt von 400 auf 500mhz
Atom "Bonnell" Optimierung
 
Zuletzt bearbeitet:
Ich könnte evtl. noch die Bildschirmauflösung ein wenig reduzieren (z.B. auf qHD), um mehr Performance der GPU zu erzielen, aber ich glaube es würde dann ein wenig pixeliger werden, dennoch wäre der Vorteil dann, dass die GPU etwa 50% weniger Bildpunkte rendert. Die Bildpunktdichte würde dann bei 220PPI liegen.
Was hält ihr davon bzw. was wäre eure "Schmerzgrenze"?

-weiterer Vorschlag: XGA Auflösung mit ordentlichem Performanceschub und 256 PPI

"
xtern int Read_TP_ID(void);
extern u32 lcd_unique_id;
static int board_hw_id;
static int board_tp_id;
static void __iomem *pwmctrl_mmio;
static int panel_reset_gpio;
static int auo_standby_mode;

static struct panel_list supp_panels[] = {
{"NO_PANEL", NO_PANEL},
{"AUO_720P_VID", AUO_VID_PANEL},
{"TM_720P_VID", TM_VID_PANEL},
{"CPT_720P_VID", CPT_VID_PANEL},
};

union sst_pwmctrl_reg {
struct {
u32 pwmtd:8;
u32 pwmbu:22;
u32 pwmswupdate:1;
u32 pwmenable:1 "
Joa, das mit der Aufösung ist schon komplexer. Es gibt viele lange C-Dateien ........

ALTER:
kernel/power/suspend.c: In Funktion »suspend_enter«:
kernel/power/suspend.c:304:2: Warnung: ISO-C90 verbietet gemischte Deklarationen und Code [-Wdeclaration-after-statement]
static unsigned long suspend_resume_count;
^
LD kernel/power/built-in.o
CC arch/x86/platform/intel-mid/intel_mid_sfi.o
LD kernel/built-in.o
arch/x86/platform/intel-mid/intel_mid_sfi.c: In Funktion »intel_mid_platform_init«:
arch/x86/platform/intel-mid/intel_mid_sfi.c:981:23: Fehler: »Hall_sensor_devices« nicht deklariert (erste Benutzung in dieser Funktion)
platform_add_devices(Hall_sensor_devices, ARRAY_SIZE(Hall_sensor_devices));
^
arch/x86/platform/intel-mid/intel_mid_sfi.c:981:23: Anmerkung: jeder nicht deklarierte Bezeichner wird nur einmal für jede Funktion, in der er vorkommt, gemeldet
In file included from include/linux/thread_info.h:11:0,
from include/linux/preempt.h:9,
from include/linux/interrupt.h:8,
from arch/x86/platform/intel-mid/intel_mid_sfi.c:15:
include/linux/bug.h:33:45: Fehler: Breite des Bitfeldes »<anonym>« ist keine Ganzzahlkonstante
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/compiler-gcc.h:44:28: Anmerkung: bei Substitution des Makros »BUILD_BUG_ON_ZERO«
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
^
include/linux/kernel.h:42:59: Anmerkung: bei Substitution des Makros »__must_be_array«
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
arch/x86/platform/intel-mid/intel_mid_sfi.c:981:44: Anmerkung: bei Substitution des Makros »ARRAY_SIZE«
platform_add_devices(Hall_sensor_devices, ARRAY_SIZE(Hall_sensor_devices));
^
make[3]: *** [scripts/Makefile.build:309: arch/x86/platform/intel-mid/intel_mid_sfi.o] Fehler 1
make[2]: *** [scripts/Makefile.build:455: arch/x86/platform/intel-mid] Fehler 2
make[1]: *** [scripts/Makefile.build:455: arch/x86/platform] Fehler 2
make: *** [Makefile:805: arch/x86] Fehler 2

Was für'n kranker Kernel ist das denn?
Also neeeee......sowas habe ich zum ersten Mal XD Ein paar Fehler hier und da ist ok, kann man beheben, aber das hier ist ja ein Jackpot!
Ich habe bereits ein paar Fehler beseitigt, da es dort einige Konflikte in den Konfigs gegeben hatte.....
Schade, die ganze Arbeit mit GPU etc. war wohl umsonst.......Werde wohl für ein anderes Smartphone einen Kernel builden.

Habe noch nen HTC ONE M8. Werde wohl mit dem Entwickeln umsteigen

Ich habe mein One M8 gefunden (hat ne Custom ROM und den ElementalX Kernel) und habe dann die source nach gleichem Prinzip (aber mit anderen PATH etc.) für das M8 konfiguriert und es lief sofort......crazy zenfone z00d

work in progress *für das z00d* continuing .....

Also, mit custom kernel wird es nix, ABER ich habe ein paar nützliche Grafiktreibermodule zusammengeschraubt (die, die Frequenz der auf 533MHz pushen), die dann geflasht werden können!

Das Modul ist fertig und muss nur noch geflasht werden. Aus Stabilitätsgründen sind es doch 500MHz geworden.
Um den kompletten zu kompilieren, müsste ich erst mal schauen wie ich einige Fehlermeldungen beseitige (einige sind easy, denn da da ist entweder ne falsche Konfig oder ein fehlender Ordner).

Das Flashen der Module ging zwar,aber sie waren nachdem Booten nicht da (=> irgendetwas könnte im Kernel fehlen, bin mir aber da nicht sicher).
Habe weitere Fehler während des Kompilieriens beseitigt, aber der Alptraum ist noch nicht zu Ende. Jetzt kann ich mir auch gut vorstellen, warum Asus kein Marshmallow bzw. warum kein Entwickler ein Custom ROM für dieses Ding machen wollte. Die Snapdragon-Android-Geräte (also alle Chips von Qualcomm) sind da um ein tausendfaches flexibler.....
 
Zuletzt bearbeitet:
Stand 14.11
ich arbeite momentan an einem Ulefone Metal Kernel mit CPU "Overclock" (von 1.3GHz auf 1,5GHz, wobei 1,5 kein Overclock sind, sondern die maximale Cortex A53 Frequenz) und evtl. GPU "OC".
Die Arbeit geht gut voran .......hier und da ein paar Patches,aber es geht.
Kompiliert wird mit dem linaro 4.9 toolchain (aarch64-linux-android) und evtl. später mal noch einmal mit v7.
Die Frequenz .c -Dateien habe ich schon gefunden.

Mit dem Asus Kernel geht es jetzt auch voran, denn es sind nur noch wenige Fehlermeldungen geblieben.

Hier zum Kernel für das Ulefone Metal Custom kernel Ulefone Metal
 
Zuletzt bearbeitet:

Ähnliche Themen

Corolla
Antworten
3
Aufrufe
1.862
Corolla
Corolla
R
Antworten
0
Aufrufe
1.648
Razor6463
R
E
Antworten
0
Aufrufe
1.230
Ernie2210
E
Zurück
Oben Unten