2012-03-09 90 views
3

我试图编译三星Galaxy迷你的Android内核(氰),根据这些instructions错误的android内核编译

我使用CM-7。

我完成以下步骤:

  1. 下载内核源代码。

  2. 配置构建:

    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. 使构建:

    make ARCH=arm CROSS_COMPILE=$CCOMPILER -j4 
    

后这个内核开始编译,一切工作正常,但随后报告这似乎是一个错误源代码中的错误,这里是终端中的输出。

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 

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

+0

为什么不看内核/ cpuset.c源代码并试图找出它?可能在其他翻译单元中定义了“任务”,并且由于某种原因该单元未被包括(即,预处理器定义没有被正确配置)。 – Adi 2012-03-09 19:47:41

+0

是的,我只是检查了内核/ cpuset.c并发现错误,基本上任务被错误定义(任务变量不存在),它应该是'tsk'。我在答案中解释了这个问题。无论如何,谢谢。 – uyaseen 2012-03-10 05:58:11

回答

5

有没有在源代码中的错误,该文件中,核心/上线1385 cpuset.c ,使用“任务”,在那里,它应该是“啧啧”,而且 后来被使用,而不被分配价值。它应该以这种方式分配值:__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; 
} 

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

+1

+1用于回复答案 – 2012-03-13 12:59:30