在android内核编译错误

我正在尝试根据以下说明为Samsung Galaxy mini编译android内核(cyanogen):

我正在使用CM-7。

我执行了这些步骤:

  1. 下载内核源代码。

  2. configuration构build:

    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. 构build:

      make ARCH=arm CROSS_COMPILE=$CCOMPILER -j4 

在这个内核开始编译之后,一切正常,但是它报告了一个在源代码中出现错误的错误,这里是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 

如果有人可以请告诉如何解决这个问题。

源代码错误,在1385行的kernel / cpuset.c文件中,使用了'task',它应该是'tsk',而且以后没有被赋值。 应该以这种方式分配值:__task_cred(tsk)。

这是原始的代码:

 /* 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; } 

………………….

这是修改的代码:

 /* 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; } 

这个链接解释了在android内核编译时可能发生的不同可能的错误。