1

xv6のコードを読んでいますが、Makefileを読むのが難しいと感じています。次のステートメントがどのように機能するかを教えてください。

1. "CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector)"
2. "LDFLAGS += -m $(shell $(LD) -V | grep elf_i386 2>/dev/null)"
3. "xv6.img: 
bootblock kernel fs.img 

dd if=/dev/zero of=xv6.img count=10000

dd if=bootblock of=xv6.img conv=notrunc

dd if=kernel of=xv6.img seek=1 conv=notrunc"

そして、Makefileを詳細に学ぶ方法は?良い本をお勧めしますか?

ありがとうございました!

4

2 に答える 2

2
  1. CFLAGS-fno-stack-protector -Eコンパイラに渡すオプション(など)ですCC$(CC)実際のコンパイラに置き換えられます。つまりCC、この前に。のようなもので初期化する必要がありますset CC=gcc

  2. LDFLAGSはオプションです(リンカーにとっては、Cの演算子と同じLDです。既存の値と+=+=CFLAGSLDFLAGS

  3. この行は、xv6.imgがに依存していることを意味しbootblock kernel fs.imgます。つまりmake、ビルドするには、最初xv6.imgにビルドする必要があるということです。bootblock kernelfs.img

ここでddコマンドについて学ぶことができます

makeこれがとへの完全な百科事典ガイドですMakefiles

http://www.gnu.org/software/make/manual/make.html

于 2012-03-19T05:50:10.087 に答える
1

答えに追加すると、このddコマンドは、基本的に入力ファイル[if]を取得し、その内容を出力ファイル[of]にコピーするコピーコマンドのように機能します。カウントは、コピーされるブロックの数の指標です。

提供されたコードは、ブートローダー、ファイルシステム、およびカーネルを含むxv6.imgファイルのビルドに関連しています。このコードは基本的に、10000ブロックのゼロを/ dev/zeroファイルからxv6.imgにコピーしています。これに続いて、ブートブロック(Makefileターゲットから見たbootasm.Sとbootmain.cによって作成された)からセクター0にコピーします。これに続いて、1つのセクターをシークし、カーネルをイメージファイルにコピーします。

于 2021-02-19T17:51:27.483 に答える