私は i.MX8M Quad EVK SDカードイメージ を扱っており 、 U-Bootから Cortex-M4コア でアプリケーションの起動と実行の正しい手順を理解したい と思っています。
i.MX8M Quad用の MCUXpresso SDK をダウンロード し、 M4コア用の Hello World 例を無事にコンパイルしました。生成された.bin ファームウェアファイル も手に入りました。
U-Bootから このM4.bin ファームウェアをロードして起動するための 正しい U-Bootコマンドとブートシーケンス を教えてください 。また、M4コンソールを確認する方法も教えてください。
#imx8mq
#m4
#cortex-m4
#boot_m4
#UBoot
Yocto
#ubootコマンド
こんにちは、
コンパイル済みの.binファイルをコピーしてください。ファイル(例: hello_world.bin )SDカードをEVKに挿入する前に、SDカードのFAT/ブートパーティション(パーティション1)にコピーしてください。
ボードの電源を入れ、U-Bootプロンプトが表示されたらすぐに任意のキーを押して自動起動を中断してください。
これはMCUXpresso SDKのHello World例の標準的な方法であり、TCM at 0x1FFE0000 (エイリアス)から実行するためにリンクされています 0x7E0000
# Step 1: Load .bin from SD card FAT partition into a DDR staging buffer
u-boot=> fatload mmc 1:1 0x48000000 hello_world.bin
# Step 2: Copy the image from DDR staging buffer into the M4's TCM
u-boot=> cp.b 0x48000000 0x7e0000 0x20000
# Step 3: (Optional but recommended) Flush data cache before starting M4
u-boot=> dcache flush
# Step 4: Release M4 from reset and start execution from TCM
u-boot=> bootaux 0x7e0000
以下のような出力が表示されるはずです。
## Starting auxiliary core stack = 0x20020000, pc = 0x1FFE0305...
バイナリが DDR から実行するようにリンクされている場合 (例: 0x80000000
u-boot=> fatload mmc 1:1 0x80000000 hello_world.bin
u-boot=> dcache flush
u-boot=> bootaux 0x80000000
重要: MCUXpresso SDKアプリをコンパイルした際に使った リンカースクリプト によって、 0x7e0000(TCM)または0x80000000(DDR)を使用してください。デフォルトのHello Worldの例では、TCM(0x7e0000)が正しいターゲットです。
イメージに RPMsg リソース テーブルがない場合 (例えば、単純なhello_world.binなど)、後でLinuxを混乱させる可能性のあるゴミ値を避けるために、リソーステーブル領域をクリアしてください:
u-boot=> mw 0xb80ff000 0 4
prepare_mcore を実行するM4を起動した後もLinuxを起動し続ける予定がある場合は、 bootaux前にこの追加コマンドを実行してください。LinuxがM4で使われるクロックを無効化しないようにクロックを設定しています:
u-boot=> fatload mmc 1:1 0x48000000 hello_world.bin
u-boot=> cp.b 0x48000000 0x7e0000 0x20000
u-boot=> run prepare_mcore
u-boot=> bootaux 0x7e0000
i.MX8MQ EVKは、PCに接続すると 2つの別々のCOMポートを列挙する FTDI USBシリアルチップを使用しています。
| ポート | コア |
|---|---|
小さい方の番号(例:COM9 / /dev/ttyUSB0 ) |
Cortex-A53(U-Boot / Linuxコンソール) |
より大きな番号(例:COM10 / /dev/ttyUSB1 ) |
Cortex-M4コンソール |
両ポートの設定: 115200ボー、8データビット、パリティなし、1ストップビット(115200 8N1)。
2つの別々のターミナルウィンドウを開きます(例:TeraTerm、minicom、PuTTY)。
Hello World出力を確認するu-boot=> setenv m4_image hello_world.bin
u-boot=> setenv m4_loadaddr 0x7e0000
u-boot=> setenv load_m4_image "fatload mmc '${mmcdev}':'${mmcpart}' 0x48000000 '${m4_image}'; cp.b 0x48000000 0x7e0000 0x20000"
u-boot=> setenv run_m4_image "run load_m4_image; bootaux '${m4_loadaddr}'"
u-boot=> saveenv
# Then simply run:
u-boot=> run run_m4_image
よろしくお願いします。