error en la compilación del kernel de Android

Estoy tratando de compilar el kernel de Android (cyanogen) para Samsung Galaxy mini, de acuerdo con estos Instrucciones:

Estoy usando CM-7.

Realicé estos pasos:

  1. Descarga el código fuente del núcleo.

  2. Configurar la compilación:

    adb pull /proc/config.gz /home/user_name/android/kernel/cm-kernel/config.gz 
    cat config.gz | gunzip > .config 
    make ARCH=arm CROSS_COMPILE=$CCOMPILER menuconfig
    
  3. Haz la construcción:

     make ARCH=arm CROSS_COMPILE=$CCOMPILER -j4
    

Después de que este kernel comience a compilarse y todo funcione bien, pero luego informa un error que parece ser un error en el código fuente, aquí está la salida en la terminal.

 kernel/cpuset.c:1385: error: ‘task’ undeclared (first use in this
 function)
 kernel/cpuset.c:1385: error: (Each undeclared identifier is reported
 only once
 kernel/cpuset.c:1385: error: for each function it appears in.)
 kernel/cpuset.c: In function ‘cpuset_print_task_mems_allowed’: 
  CC [M]  fs/ceph/snap.o
  CC [M]  crypto/seed.o
  CC [M]  fs/btrfs/disk-io.o
  CC [M]  fs/cifs/connect.o
  CC [M]  fs/ceph/xattr.o
  CC [M]  crypto/salsa20_generic.o
  CC [M]  crypto/deflate.o
  CC [M]  fs/ceph/mds_client.o
  CC [M]  crypto/zlib.o
  CC [M]  fs/btrfs/transaction.o
  CC [M]  crypto/michael_mic.o
  CC [M]  crypto/authenc.o
  CC [M]  fs/ceph/mdsmap.o
  CC [M]  fs/cifs/dir.o
  CC [M]  fs/ceph/strings.o
  CC [M]  fs/btrfs/inode.o
  CC [M]  fs/ceph/ceph_frag.o
  CC [M]  crypto/lzo.o
  CC [M]  fs/ceph/debugfs.o
  CC [M]  crypto/ansi_cprng.o
  CC [M]  fs/cifs/file.o
  LD [M]  fs/ceph/ceph.o
  LD      fs/coda/built-in.o
  CC [M]  fs/coda/psdev.o
  CC [M]  crypto/tcrypt.o
fs/cifs/file.c: In function 'cifs_write':
fs/cifs/file.c:1036: warning: format '%zd' expects type 'signed size_t', but argument     3     has type 'size_t'
In file included from fs/coda/psdev.c:45:
include/linux/coda.h:223: error: expected specifier-qualifier-list before 'u_quad_t'
make[2]: *** [fs/coda/psdev.o] Error 1
make[1]: *** [fs/coda] Error 2
make[1]: *** Waiting for unfinished jobs....
CC [M]  crypto/ghash-generic.o
CC [M]  crypto/xor.o
include/asm-generic/xor.h:696: warning: 'xor_block_8regs_p' defined but not used
include/asm-generic/xor.h:704: warning: 'xor_block_32regs_p' defined but not used
CC [M]  fs/cifs/inode.o
LD      crypto/async_tx/built-in.o
CC [M]  crypto/async_tx/async_tx.o
CC [M]  crypto/async_tx/async_memcpy.o
CC [M]  fs/btrfs/file.o
CC [M]  fs/btrfs/tree-defrag.o
crypto/async_tx/async_memcpy.c: In function 'async_memcpy':
crypto/async_tx/async_memcpy.c:72: warning: format '%zu' expects type 'size_t', but         argument 3 has type 'unsigned int'
crypto/async_tx/async_memcpy.c:76: warning: format '%zu' expects type 'size_t', but     argument 3 has type 'unsigned int'
CC [M]  crypto/async_tx/async_xor.o
CC [M]  fs/btrfs/extent_map.o
crypto/async_tx/async_xor.c: In function 'async_xor':
crypto/async_tx/async_xor.c:202: warning: format '%zu' expects type 'size_t', but         argument 3 has type 'unsigned int'
crypto/async_tx/async_xor.c:208: warning: format '%zu' expects type 'size_t', but     argument 3 has type 'unsigned int'
crypto/async_tx/async_xor.c: In function 'async_xor_val':
crypto/async_tx/async_xor.c:286: warning: format '%zu' expects type 'size_t', but argument 3 has type 'unsigned int'
crypto/async_tx/async_xor.c:314: warning: format '%zu' expects type 'size_t', but argument 3 has type 'unsigned int'
CC [M]  crypto/async_tx/async_pq.o
CC [M]  fs/btrfs/sysfs.o
crypto/async_tx/async_pq.c: In function 'async_gen_syndrome':
crypto/async_tx/async_pq.c:218: warning: format '%zu' expects type 'size_t', but  argument 4 has type 'unsigned int'
crypto/async_tx/async_pq.c:225: warning: format '%zu' expects type 'size_t', but  argument 4 has type 'unsigned int'
crypto/async_tx/async_pq.c: In function 'async_syndrome_val':
crypto/async_tx/async_pq.c:295: warning: format '%zu' expects type 'size_t', but  argument 4 has type 'unsigned int'
crypto/async_tx/async_pq.c:344: warning: format '%zu' expects type 'size_t', but argument 4 has type 'unsigned int'
CC [M]  fs/btrfs/struct-funcs.o
CC [M]  fs/cifs/link.o
CC [M]  fs/btrfs/xattr.o
CC [M]  crypto/async_tx/async_raid6_recov.o
crypto/async_tx/async_raid6_recov.c: In function 'async_raid6_2data_recov':
crypto/async_tx/async_raid6_recov.c:334: warning: format '%zu' expects type 'size_t', but argument 4 has type 'unsigned int'
crypto/async_tx/async_raid6_recov.c: In function 'async_raid6_datap_recov':
crypto/async_tx/async_raid6_recov.c:410: warning: format '%zu' expects type 'size_t', but argument 4 has type 'unsigned int'
CC [M]  fs/cifs/misc.o
CC [M]  fs/btrfs/ordered-data.o
CC [M]  crypto/async_tx/raid6test.o
LD      crypto/crypto.o
LD      crypto/built-in.o
CC [M]  fs/btrfs/extent_io.o
CC [M]  fs/btrfs/volumes.o
CC [M]  fs/cifs/netmisc.o
CC [M]  fs/cifs/smbdes.o
CC [M]  fs/cifs/smbencrypt.o
CC  [M]  fs/cifs/transport.o
CC [M]  fs/cifs/asn1.o
CC [M]  fs/btrfs/async-thread.o
CC [M]  fs/cifs/md4.o
CC [M]  fs/cifs/md5.o
CC [M]  fs/cifs/cifs_unicode.o
CC [M]  fs/btrfs/ioctl.o
CC [M]  fs/btrfs/locking.o
CC [M]  fs/cifs/nterr.o
CC [M]  fs/cifs/xattr.o
CC [M]  fs/cifs/cifsencrypt.o
CC [M]  fs/btrfs/orphan.o
CC [M]  fs/cifs/readdir.o
CC [M]  fs/btrfs/export.o
CC [M]  fs/cifs/ioctl.o
CC [M]  fs/btrfs/tree-log.o
CC [M]  fs/btrfs/acl.o
CC [M]  fs/btrfs/free-space-cache.o
CC [M]  fs/cifs/sess.o
CC [M]  fs/btrfs/zlib.o
CC [M]  fs/btrfs/compression.o
CC [M]  fs/cifs/export.o
CC [M]  fs/btrfs/delayed-ref.o
CC [M]  fs/btrfs/relocation.o
CC [M]  fs/cifs/cifs_spnego.o
CC [M]  fs/cifs/dns_resolve.o
CC [M]  fs/cifs/cifs_dfs_ref.o
LD [M]  fs/cifs/cifs.o
LD [M]  fs/btrfs/btrfs.o
make: *** [fs] Error 2

Si alguien puede decir cómo resolver este problema.

preguntado el 09 de marzo de 12 a las 13:03

¿Por qué no buscar en la fuente kernel/cpuset.c e intentar averiguarlo? Posiblemente la 'tarea' esté definida en otra unidad de traducción y por alguna razón esa unidad no esté incluida (es decir, las definiciones del preprocesador no están configuradas correctamente). -

Sí, acabo de comprobar el kernel/cpuset.c y encontré el error, básicamente la tarea se definió incorrectamente (la variable de la tarea no existe), debería ser 'tsk'. He explicado el problema en la respuesta. De todos modos, gracias. -

1 Respuestas

Hubo un error en el código fuente, en el archivo, kernel/cpuset.c en la línea 1385, se usó 'task', donde como debería ser 'tsk', además se usó más tarde sin que se le asignara el valor. Debería haber sido asignado el valor de esta manera: __task_cred(tsk).

Este es el código original:

/* Called by cgroups to determine if a cpuset is usable; cgroup_mutex held */
static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cont,
             struct task_struct *tsk, bool threadgroup)
{
int ret;
struct cpuset *cs = cgroup_cs(cont);

if ((current != task) && (!capable(CAP_SYS_ADMIN))) {
    const struct cred *cred = current_cred(), *tcred;

    if (cred->euid != tcred->uid && cred->euid != tcred->suid)
        return -EPERM;
}

......................

Este es el código modificado:

/* Called by cgroups to determine if a cpuset is usable; cgroup_mutex held */
static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cont,
             struct task_struct *tsk, bool threadgroup)
{
int ret;
struct cpuset *cs = cgroup_cs(cont);

if ((current != tsk) && (!capable(CAP_SYS_ADMIN))) {
    const struct cred *cred = current_cred(), *tcred;
    tcred = __task_cred(tsk); 

    if (cred->euid != tcred->uid && cred->euid != tcred->suid)
        return -EPERM;
}

Este planteamiento de « enlace explica diferentes posibles errores que pueden ocurrir durante la compilación del kernel de Android.

respondido 12 mar '12, 17:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.