0組み込み用途でプログラムの配置をする際に必要となるリンカスクリプト。本記事ではその書き方と意味を(備忘録を兼ねて)ご説明します。複数のサイトで説明がありますが、それほど数は多くないので本記事でもまとめさせてもらいます。以下のサイトを参考にしています。これを見ればたいてい分かります。株式会社コンピューテックスまた、実際のリンカスクリプトも合わせてみたほうが理解しやすいと思いますので、お手持ちのスクリプトを見てみてください。リポジトリの一部にあるものをお見せしますので、ご参考にどうぞ。書き込みの場所はどうやって決めているのでしょうか?もっと言うと、割り込みベクタ(関数テーブル)はメモリ空間上の位置(アドレス)が決まっています。そのアドレス指定はどうやるのでしょうか?C言語上で指定する?実際C言語上でアドレス指定は無理と言っていいでしょう。そこでリンカスクリプトを使うことで、コンパイル・バイナリ生成時にアドレスや配置を決める事ができるのです。するときもこれは利用されています。マイコンでよくあった日本メーカーの「開発ツールは個人用途じゃ提供しないよ」状態に遭遇したら環境を自作しなければなりません。これが一番の理由ですがリンカスクリプトなるわけのわからないものを理解せず使うとは何事だという人もいると思います(僕だけ?)。これだけ知っていれば作れるぞ!という程度の説明を行います。リンカはスクリプトに誤り(未定義の変数やセクション)があっても、文法の誤りが無い限りはエラーとして吐いてくれませんので注意。このエラーは基本的に無視されるだけで終わるという害悪仕様です。あるということも知っておいてください。それ以外は可読性や移植性のために書きます。実際に各種コマンドを書く前に書くべきことがあります。*/OUTPUT_FORMAT(elf32-littlemips)OUTPUT_ARCH(mips)ENTRY(start)OUTPUT_FORMAT出力バイナリのフォーマットです。OUTPUT_ARCH出力されるバイナリをどのアーキテクチャ向けにするか指定します。ヘルプを見ることで確認できます。pluginENTRYリセット時に一番最初に実行される関数(エントリーポイント)を引数に指定します。コマンドで指定します。バイナリをリンク時に、使用していない関数をリンクしないというオペレーションで必要になります。マイコンのプログラムを書く時にはなるべくプログラムサイズを減らしたいということがよくあります。その際に利用していない関数をプログラムに組み込んでも意味がないので、コンパイラやリンカのオプションで消去してしまうということをします。いうやつ使ってないんだなぁ」と消去しにかかります。なってしまうと正常な動作は見込めないので予め指定しておきます。リンカスクリプトを参考にすると、以下が必要になります。配置もしておきましょう(必須ではない、というか通常は要らない)。MEMORYは必須ではないですが、これがないと不便極まりないので、今回は必須ということで説明します。MEMORY物理的なメモリ領域を定義するコマンドです。