どうやって聞いたらいいのかわからない、変な質問です。
カーネルにパッチを適用していて、ビルドしようとすると、これが表示されます
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
構造体 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.ciにlinux/thread_info.hの代わりにasm/thread_info.hが含まれていることを発見しました
それで、さらに陽気になった後、mach_types の欠落しているエントリへのルートをたどりました。
詳細についてはまたお知らせしますが、この旅で、自分でファイルを含めるのがどれほど嫌いか(吸うのが嫌い)に気づきました:)