这是一个奇怪的问题,我真的不知道该怎么问。
我正在修补内核,当我尝试构建它时,我得到了这个
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中缺少的条目。
我会回复更多信息,但这次旅程让我意识到我有多讨厌(吮吸)包括我自己的文件:)
答案 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很好地构建了:))
但它没有启动或至少告诉我它。案件结案。