ARM-CortexM3ベースのデバイスのブートスクリプトを作成しています。アセンブラブートスクリプトとCアプリケーションコードをコンパイルしてから、オブジェクトファイルを結合してデバイスに転送すると、すべてが機能します。
ただし、ar
アーカイブ(libboot.a)を作成し、そのアーカイブをCアプリケーションと組み合わせる場合、問題が発生します。
ブートコードをセクションに配置しました:
.section .boot, "ax"
.global _start
_start:
.word 0x10000800 /* Initial stack pointer (FIXME!) */
.word start
.word nmi_handler
.word hard_fault_handler
... etc ...
ld
これを最終的なバイナリから削除することがわかりました(「ブート」セクションは使用できません)。これは、認識している依存関係がないため非常に自然ですがld
、デバイスが正しく起動しない原因になります。
だから私の質問は:このコードを強制的に含めるための最良の方法は何ですか?