===================================================================== QEMU-VIRTターゲット依存部 (ssp-1.3.0対応) Last Modified: '18/05/29 ===================================================================== ○概要 QEMU-VIRTターゲット依存部は,プロセッサにCortex-A53 を搭載した QEMUの仮想ボードVIRTをサポートしている. ○カーネルの使用リソース カーネルは以下のリソースを使用する. ・ROM コードを配置する. 使用量は使用するAPIの数に依存する. ・RAM データを配置する. 使用量はオブジェクト数に依存する. ・Generic Timer カーネル内部のティックの生成に用いる. ・UART0 (PL011) コンソールの出力に使用. ○デバッグ環境 デバッグ環境として,QEMUのGDBサーバ機能を利用して,GDBによるデバッグが可能. ○コンパイラ GCC で動作確認を行った.動作確認した GCC は,以下のサイトから バイナリパッケージをダウンロードすることができる. 動作確認バージョンは 5.3.1 で行った. https://releases.linaro.org/components/toolchain/binaries/ ○割込み優先度 割込み優先度として指定可能な範囲は,-15 〜 -1 である. ○コンソール出力 コンソール出力には PrimeCell UART (PL011)を使用する. 通信フォーマットは以下の通りである. ・38400bps, Data 8bit, Parity none, Stop 1bit, Flow制御なし ○各種設定の変更 幾つかのパラメータは変更可能になっている.設定ファイル毎に設定可能項目 は次のようになっている. ●Makefile.target の設定項目 ・GCC_TARGET GCCの target triplet を定義 ・TEXT_START_ADDRESS/DATA_START_ADDRESS テキストセクション,データセクションの開始アドレス ・INCLUDES インクルード指定 ・COPTS Cコンパイラへのオプション ・LDFLAGS リンカへのオプション ●target_config.h の設定項目 ・DEFAULT_ISTKSZ デフォルトの非タスクコンテキスト用のスタックサイズ ○動作確認方法 ● QEMUを用いて動作を確認する場合,以下のようにコマンドを実行する. (実行例) $ qemu-system-aarch64 -M virt -cpu cortex-a53 -serial stdio -kernel ssp TOPPERS/SSP Kernel 1.3.0 for QEMU Virt(Cortex-A53) (May 29 2018 , 15:51:44) Copyright (C) 2010 by Meika Sugimoto Copyright (C) 2010 by Naoki Saito Nagoya Municipal Industrial Research Institute, JAPAN System logging task is started on port 1. Sample program starts. #act_tsk(1) task1 is running (001). | task1 is running (002). | ● GDBによるデバッグ手順 GDBを用いたデバッグを行う場合,シェルを2つ用意する. 一つはqemuを起動しGDBサーバとして起動する. (1つ目のシェル) $ qemu-system-aarch64 -M virt -cpu cortex-a53 -serial stdio -s -S VNC server running on 127.0.0.1:5900 これで localhost:1234 でGDBサーバが接続を待ち受ける状態になる. もう一つのシェルでGDBを起動し,GDBサーバに接続する. (2つ目のシェル) $ aarch-elf-gdb ssp (gdb) ここで各種の設定,サーバへの接続,ロードを行うとステップや実行等の デバッグ動作を行うことができる. (gdb) set architecture aarch64 The target architecture is assumed to be aarch64 (gdb) set debug aarch64 (gdb) target extended-remote localhost:1234 Remote debugging using localhost:1234 0x0000000000000000 in ?? () (gdb) load Loading section .note.gnu.build-id, size 0x24 lma 0x0 Loading section .text, size 0x5040 lma 0x40000000 Loading section .rodata, size 0x650 lma 0x40005040 Loading section .rodata.str1.8, size 0x5b8 lma 0x40005690 Loading section .data, size 0x8 lma 0x40005c48 Start address 0x40000000, load size 23668 Transfer rate: 11556 KB/sec, 1577 bytes/write. (gdb) s aarch64: prologue analysis gave up addr=0x0x40000000 opcode=0xd50343df 58 ldr x0, =vectors (gdb) c Continuing. 'c' コマンドで実行を継続すると,GDBサーバ側の画面にシリアルメッセージが表示される. キー入力もサーバ側のシェル画面で行う. qemuを終了する場合はCtrl-Cで終了する. gdb を終了する場合はプロンプトで'q'コマンドを実行して終了する. ○変更履歴 ・2018/05/29   新規作成