2017-08-04 4 views
0

L'environnement de construction est Ubuntu 16.04 avec le dernier gcc 5.4.0 et GNU Make 3.82. Ma cible est une carte personnalisée am335x qui peut fonctionner sous Android 4.4. Je vais le soutenir pour Android 7.1.1.Android 7.1.1 erreurs de compilation du noyau (chaîne d'outils)

Le projet est récupéré à partir de la balise google android android-7.1.1_r46 et le noyau provient du tag msm android-7.1.1_r0.63. Le compilateur croisé que j'utilise est de prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin.

C'est l'information d'environnement. Je n'ai pas encore installé le NDK ou SDK parce que j'ai vu le niveau de l'api pour Android 7.1.1 est de 25 alors que le plus récent NDK ne supporte que jusqu'à 24, donc je suis un peu confus quoi faire.

Si j'exécute la commande: m -j8 uboot linux L'utilitaire uboot se compile bien, mais il y a beaucoup d'erreurs lors de la compilation du noyau Linux.

/media/yangjiel/disk2/android/kernel/arch/arm/mach-omap2/prm_common.c: In function 'omap_prcm_register_chain_handler': 
/media/yangjiel/disk2/android/kernel/arch/arm/mach-omap2/prm_common.c:293:2: warning: passing argument 2 of 'irq_set_chained_handler' from incompatible pointer type [enabled by default] 
error, forbidden warning: prm_common.c:293 
make[2]: *** [arch/arm/mach-omap2/prm_common.o] Error 1 
make[1]: *** [arch/arm/mach-omap2] Error 2 
make[1]: *** Waiting for unfinished jobs.... 
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:141:13: error: 'KERN_BOOT_REASON' undeclared here (not in a function) 
    { CTL_INT, KERN_BOOT_REASON, "boot_reason" }, 
      ^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:13: error: 'NET_IPV6_ACCEPT_RA_PREFIX_ROUTE' undeclared here (not in a function) 
    { CTL_INT, NET_IPV6_ACCEPT_RA_PREFIX_ROUTE, "accept_ra_prefix_route" }, 
      ^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:2: error: initializer element is not constant 
    { CTL_INT, NET_IPV6_ACCEPT_RA_PREFIX_ROUTE, "accept_ra_prefix_route" }, 
^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:2: error: (near initialization for 'bin_net_ipv6_conf_var_table[24].ctl_name') 
make[2]: *** [kernel/sysctl_binary.o] Error 1 
make[2]: *** Waiting for unfinished jobs.... 
make[1]: *** [kernel] Error 2 
make: *** [sub-make] Error 2 
make: Leaving directory `/media/yangjiel/disk2/android/kernel' 
ninja: build stopped: subcommand failed. 
make: *** [ninja_wrapper] Error 1 
make: Leaving directory `/media/yangjiel/disk2/android' 

Si je laisse tomber les lignes dans ce fichier qui l'origine de cette erreur, l'erreur ci-dessus est résolu, mais je recevrais une autre

/media/yangjiel/disk2/android/kernel/kernel/cgroup.c: In function 'subsys_cgroup_allow_attach': 
/media/yangjiel/disk2/android/kernel/kernel/cgroup.c:2138:37: error: invalid operands to binary != (have 'kuid_t' and 'kuid_t') 
    if (current != task && cred->euid != tcred->uid && 
            ^
/media/yangjiel/disk2/android/kernel/kernel/cgroup.c:2139:18: error: invalid operands to binary != (have 'kuid_t' and 'kuid_t') 
     cred->euid != tcred->suid) 
       ^
make[2]: *** [kernel/cgroup.o] Error 1 
make[2]: *** Waiting for unfinished jobs.... 
    CC  kernel/trace/power-traces.o 
    CC  kernel/trace/rpm-traces.o 
    CC  kernel/trace/trace_probe.o 
    LD  kernel/trace/libftrace.o 
    LD  kernel/trace/built-in.o 
make[1]: *** [kernel] Error 2 
make: *** [sub-make] Error 2 
make: Leaving directory `/media/yangjiel/disk2/android/kernel' 
ninja: build stopped: subcommand failed. 
make: *** [ninja_wrapper] Error 1 
make: Leaving directory `/media/yangjiel/disk2/android' 

Il y a plus d'erreurs derrière.

J'ai fait un tour de table et la plupart des gens disent que c'est un problème de chaîne d'outils. Mais je ne trouve pas beaucoup d'instructions sur la façon d'installer la chaîne d'outils correctement, en particulier pour 7.1.1. Il semble qu'il n'y ait pas de chaîne d'outils nécessaire pour le noyau Android 4.4. Je vais chercher le noyau Android 4.4 personnalisé et il compile bien.

Répondre

0

Le problème ci-dessus est dû au fait que j'ai téléchargé une mauvaise version du noyau Android. Ce que j'ai téléchargé est https://android.googlesource.com/kernel/msm/+/android-7.1.1_r0.63, et ceci est le noyau v3.10.

De toute évidence, ce n'est pas pour Android 7.1.1 (qui devrait utiliser kernel v4.4). Donc, quand j'essaie de compiler le "vieux" noyau avec le "nouveau" compilateur croisé à partir du pré-compilé, cela génère des erreurs globales que le "vieux" compilateur ne fera pas. Je finis par utiliser le noyau de https://android.googlesource.com/kernel/common/+/upstream-linux-4.4.yupstream-linux-4.4.y branche, il est compatible avec Android 7.0 à 7.1.2.

Je ne sais pas pourquoi google le nom comme android-7.1.1_r0.63, mais ce n'est certainement pas pour Android 7.1.1 à utiliser. J'espère que personne n'a le même problème que moi.