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.