0

どうやって聞いたらいいのかわからない、変な質問です。

カーネルにパッチを適用していて、ビルドしようとすると、これが表示されます

 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 の欠落しているエントリへのルートをたどりました。

詳細についてはまたお知らせしますが、この旅で、自分でファイルを含めるのがどれほど嫌いか(吸うのが嫌い)に気づきました:)

4

1 に答える 1

0

それは完全に私の悪いことでした。ある時点で 2 つの間違いを犯したようです

1) 前の 3 つのファイルと同じ問題を修正する間違ったファイルをインクルードすることでした。2) コメントアウトされた include ステートメントを残すことです。

番号 1 は非常に明白でした。ファイル名は繰り返し表示され続けましたが、難しいのはエラーの場所を見つけることでした。後で少しログを狙うと、「in file /arch/arm/kernel/io.c:」という行を見つけたので、そこに行って、asm/thread_info.hをlinux/thread_info.hとそのエラーに交換しました去った。

2番目の実際の問題もasm/thread_info.hにありましたが、今回は修正したばかりでちょっと忘れていたので、ランダムファイルでコメントアウトされたままになりました(3方向アームのasm比較は目に負担がかかります)。 vmlinux.vms でリンクできません。

「unexpected symbol # at line 266」などのエラーが表示されます...そこに行くと、問題が発生し、「//#include linux/thread_info.h」を使用した簡単なgrepで、修正が必要なファイルが明らかになりました。すべてのコンパイルの問題が解決され、uImage がうまくビルドされました :))

しかし、起動しなかったか、少なくともそれについて教えてくれました。それで、ケースは閉じました。

于 2012-09-19T14:36:55.093 に答える