GCC尝试组装.h文件

时间:2012-09-19 10:00:22

标签: gcc linux-kernel embedded-linux

这是一个奇怪的问题,我真的不知道该怎么问。

我正在修补内核,当我尝试构建它时,我得到了这个

 devshark@ubuntu:~/KERNEL/linux_3.2.17$ make arch/arm/vfp
 CHK     include/linux/version.h
 CHK     include/generated/utsrelease.h
 make[1]: `include/generated/mach-types.h' is up to date.
 CALL    scripts/checksyscalls.sh
 AS      arch/arm/vfp/entry.o
 include/linux/thread_info.h: Assembler messages:
 include/linux/thread_info.h:12: Error: bad instruction `struct timespec'
 include/linux/thread_info.h:13: Error: bad instruction `struct compat_timespec'
 include/linux/thread_info.h:18: Error: bad instruction `struct restart_block{'
 include/linux/thread_info.h:19: Error: bad instruction `long (*fn)(struct restart_block*)'
 include/linux/thread_info.h:20: Error: bad instruction `union {'
 include/linux/thread_info.h:22: Error: bad instruction `struct {'
 include/linux/thread_info.h:23: Error: bad instruction `u32 __user*uaddr'
 include/linux/thread_info.h:24: Error: bad instruction `u32 val'
 include/linux/thread_info.h:25: Error: bad instruction `u32 flags'
 include/linux/thread_info.h:26: Error: bad instruction `u32 bitset'
 include/linux/thread_info.h:27: Error: bad instruction `u64 time'
 include/linux/thread_info.h:28: Error: bad instruction `u32 __user*uaddr2'
 include/linux/thread_info.h:29: Error: junk at end of line, first unrecognized character is `}'
 ...

并继续列出几个.h和.c文件。我可以建立其他一切就好(到目前为止),但此时建立休息时间。

编辑:

好的,所以我做了一些研究,这就是事情:

/arch/arm/include/asm/thread_info.h报告

/home/devshark/KERNEL/linux_3.2.17/arch/arm/include/asm/thread_info.h:68:23: error: field 'restart_block' has incomplete type

struct restart_block在/include/linux/thread_info.h中定义

当我将其包含在文件中时,我得到了上述错误。 这是我如何包括它

 #ifndef __ASM_ARM_THREAD_INFO_H
 #define __ASM_ARM_THREAD_INFO_H

 #ifdef __KERNEL__

 #include <linux/compiler.h>
 //#include <linux/thread_info.h>
 #include <asm/fpstate.h>

 #define THREAD_SIZE_ORDER  1
 #define THREAD_SIZE        8192
 #define THREAD_START_SP        (THREAD_SIZE - 8)

 #ifndef __ASSEMBLY__
 ...

但事实证明这非常糟糕。所以我做的是退后一步,发现在kernel / io.c中我包含了asm / thread_info.h而不是linux / thread_info.h

因此,在接下来的一些狂热之后,我追溯到了mach_types中缺少的条目。

我会回复更多信息,但这次旅程让我意识到我有多讨厌(吮吸)包括我自己的文件:)

1 个答案:

答案 0 :(得分:0)

这完全是我的坏事,似乎在某些时候我犯了两个错误

1)包含一个错误的文件,修复了前三个文件所遇到的同样问题  2)留下一个已注释掉的包含声明。

1号非常明显 - 文件名一直显示出来,但困难的部分是找到错误的位置。稍后狙击一下,我发现了一条线说 “在文件/arch/arm/kernel/io.c中:”所以我就进去了,并为linux / thread_info.h交换了asm / thread_info.h,这个错误就消失了。

第二个真正的问题也出现在asm / thread_info.h中,但是这次它被留在了一些随机文件中,因为我刚修好它并且有点忘了它(三方臂asm比较对眼睛很重)这表现在vmlinux.vms无法链接。

给出错误,比如“第266行的意外符号#”等等...去那里我看到了我的问题,快速grep用“// #include linux / thread_info.h”显示需要修复的文件。所有编译问题都得到解决,uImage很好地构建了:))

但它没有启动或至少告诉我它。案件结案。