2

64 ビットの Linux ホストで 32 ビットの Linux カーネルを構築しています。(ホストとターゲットの両方でバージョン 2.6.9)。私は次のことをしています:

make ARCH=i386 CFLAGS='-m32 -Iinclude/asm/mach-default' ASFLAGS='-march=i386 --32' 

make に ASFLAGS を指定しても、次の警告とエラーが表示されます。

  AS      usr/initramfs_data.o
  LD      usr/built-in.o
ld: warning: i386:x86-64 architecture of input file `usr/initramfs_data.o' is incompatible with i386 output

<snip>
  AS      arch/i386/kernel/entry.o
arch/i386/kernel/entry.S: Assembler messages:
arch/i386/kernel/entry.S:145: Error: suffix or operands invalid for `pushf'

エントリのコード。S:145 は次のとおりです。

 pushfl                  # We get a different stack layout with call
                         # gates, which has to be cleaned up later..

AS が x86_64 ではなく i386 (32 ビット) を使用していることを確認するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

Linux カーネルの makefile を大雑把にチェックすると、AFLAGSではなくを使用する必要があることがわかりますASFLAGS。トップレベルのカーネル makefile の 647 行目には次のように書かれています。

# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
于 2013-01-10T01:36:27.403 に答える