リンカスクリプト
プログラムの各部分をメモリのどこに置くかをリンカに伝えるファイル。PCでは脚注程度の存在だが、ファームウェアでは地図そのものになる。
OSはプログラムを好きな場所に読み込む。ところがマイコンにはOSがなく、あるのは特定のアドレスのフラッシュと別のアドレスのRAMだけで、プログラムはそれに正確に合わせなければならない。リンカスクリプト(GNU ldでは .ld)は MEMORY ブロックでこれらの領域を宣言し、続けてセクションを配置する。コードと定数(.text、.rodata)はフラッシュへ、ゼロ初期化変数(.bss)はRAMへ置く。
面白いのは初期化済み変数の .data だ。実行時にはRAMにある必要があるが、初期値は電源を切っても残らなければならない。そこでスクリプトはフラッシュとRAMの二つのアドレスを与え、スタートアップコードが main() の前にコピーする。スタックの最上位といったシンボルもここで定義される。大半の人はベンダーのテンプレートを使い、ブートローダの置き場所が必要になるまで一度も触らない。