2016-07-22 17 views
0

Also habe ich die Android-Kernel-Quelle für mein Motorola-Handy geklont und war dabei, es zu bauen.android kernel error: 'struct dentry' hat kein Mitglied namens 'd_alias'

Android Kernel Info:

Name: Android Kernel Motorola MSM8610

Gerät (beabsichtigte): Moto E

Hardware: MSM8610

Github: Kernel Source Link

Verfahren:

Zuerst habe ich die CONFIG-Datei

make ARCH=arm msm8610_defconfig 
mit

dann habe ich versucht, indem Sie einen Dateinamen startBuild

startBuild das Kernel-Image zu bauen:

make ARCH=arm SUBARCH=arm CROSS_COMPILE=/media/mohit/776b997b-f9a1-46c2-92a0-7f438c7b78e3/code/toolchain/arm-eabi-4.6/bin/arm-eabi- -j4 

Erteilen der erforderlichen Berechtigungen

chmod +x startBuild 

und es

./startBuild 

Aber ich erhalte die folgende Fehlermeldung ausführen:

CHK  include/linux/version.h 
make[1]: Nothing to be done for 'arch/arm/boot/dtbs'. 
    CHK  include/generated/utsrelease.h 
make[1]: 'include/generated/mach-types.h' is up to date. 
    CALL scripts/checksyscalls.sh 
    CHK  include/generated/compile.h 
    CHK  kernel/config_data.h 
    CC  fs/overlayfs/inode.o 
fs/overlayfs/inode.c: In function 'ovl_permission': 
fs/overlayfs/inode.c:71:11: error: 'struct dentry' has no member named 'd_alias' 
fs/overlayfs/inode.c:71:11: warning: initialization from incompatible pointer type [enabled by default] 
error, forbidden warning: inode.c:71 
scripts/Makefile.build:307: recipe for target 'fs/overlayfs/inode.o' failed 
make[2]: *** [fs/overlayfs/inode.o] Error 1 
scripts/Makefile.build:443: recipe for target 'fs/overlayfs' failed 
make[1]: *** [fs/overlayfs] Error 2 
Makefile:957: recipe for target 'fs' failed 
make: *** [fs] Error 2 
make: *** Waiting for unfinished jobs.. 

So wie man diesen Fehler zu beheben?

Vielen Dank.

+0

Googeln für Fehlermeldung gefunden [dieser Beitrag] (https://github.com/rasa/vmware-tools-patches/issues/29#issuecomment-76707190), die Lösung für eine andere Linux-Komponente beschreibt: Ersetzen von 'd_alias' mit 'd_u.d_alias'. Es sollte auch in Ihrem Fall helfen. – Tsyvarev

+0

@Tsyvarev Yean Ich habe das auch versucht, hat nicht funktioniert. Wie im Falle meiner inode.c-Datei 'd_u' und' d_alias' ist nicht definiert, vielleicht ist das der Fall. – Mohit

+0

Also, welchen Zweig möchten Sie kompilieren? Voreingestellt auf der Cite ist * cm-12.0 *, die definitiv nicht von diesem Problem betroffen ist ("struct denture" [hat Mitglied] (https://github.com/CyanogenMod/android_kernel_motorola_msm8610/blob/cm-12.0/include/linux /dcache.h#L116) 'd_alias'). In Zweig * cm-13.0 * gegebener Struktur [hat Member] (https://github.com/CyanogenMod/android_kernel_motorola_msm8610/blob/cm-13.0/include/linux/dcache.h#L116) 'd_u'. – Tsyvarev

Antwort

1

Seit der Version 3.19 von Linux-Kernel d_alias Mitglied struct dentry hat das Mitglieds der Gewerkschaft d_u, siehe Definition von struct dentry in include/linux/dcache.h verschoben.

Also, ersetzen Verweis auf d_alias Mitglied zu d_u.d_alias sollte mit diesem Kompatibilitätsproblem helfen.

Dieses Ersetzen kann auch global in allen Dateien durchgeführt werden, siehe z.B. this post über die Behebung gegebener Fehler in vmware-tools.