QEMU に LPC1768 を追加してみた
NXP の Cortex-M3 搭載マイコンである、LPC1768 のエミュレーションを QEMU に追加してみました。
ゲストバイナリとして、TOPPERS ASP for LPC1768 のサンプルプログラム(sample1)が動作することを目標にしており、LPC1768 の周辺デバイスとしては、現状、シリアルコントローラのみサポートしています。
ベースとした QEMU のバージョンは v1.1.0 です。
尚、ホスト環境は Ubuntu 11.10 で確認を行っています。
QEMU LPC1768 をビルド
まず、QEMU をビルドするためのパッケージの導入します。必要に応じてインストールしてください。
# apt-get install glib2.0-dev
次いで、QEMU LPC1768 をビルドします。
% git clone https://github.com/myokota/qemu-cortex-m3.git % cd qemu-cortex-m3 % ./configure --target-list=arm-softmmu % make
TOPPERS ASP for LPC1768 をビルド
まず、コンフィグレータをビルドするためのパッケージを導入します。必要に応じてインストールしてください。
% sudo apt-get install libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev
次に、TOPPERS/ASP をビルドするためのツールチェインの導入します。ここではホームディレクトリの opt ディレクトリにインストールしています(どこでもOK)。
% wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6493/public/arm-none-eabi/arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 % tar xf arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 -C ~/opt
そして、TOPPERS/ASP for LPC1768 をビルドします。
% wget "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Ftoppersasp4lpc%2F53185%2Fasp_lpc1768_generic_gcc-20110910.tar.gz" -O asp_lpc1768_generic_gcc-20110910.tar.gz % tar xf asp_lpc1768_generic_gcc-20110910.tar.gz % cd asp/cfg % ./configure % make % cd .. % mkdir obj % cd obj % ../configure -T lpc1768_generic_gcc % make GCC_TARGET=~/opt/arm-2010q1/bin/arm-none-eabi depend (環境によっては、Use of "do" to call というメッセージが大量に表示されますが、無視してください) % make GCC_TARGET=~/opt/arm-2010q1/bin/arm-none-eabi
TOPPERS/ASP for LPC1768 をビルドしたディレクトリ内の obj/asp がバイナリイメージ(ELF) になります。
QEMU LPC1768 の実行
QEMU LPC1768 をビルドしたディレクトリに移動し、
% ./arm-softmmu/qemu-system-arm \ -M lpc1768_generic \ -serial stdio \ -kernel 'TOPPERS/ASPをビルドしたディレクトリへのパス'/obj/asp
として QEMU を起動します。
すると、以下のようにシリアルポートへの出力が標準出力上に表示されます。
TOPPERS/ASP Kernel Release 1.7.0 for LPC1768 Generic (Aug 19 2012, 12:10:59) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN Copyright (C) 2004-2011 by Embedded and Real-Time Systems Laboratory Graduate School of Information Science, Nagoya Univ., JAPAN Copyright (C) 2010 by TOPPERS/ASP for LPC project http://sourceforge.jp/projects/toppersasp4lpc/ System logging task is started on port 1. Sample program starts (exinf = 0). task1 is running (001). | task1 is running (002). | task1 is running (003). |
シリアルポートの入力も標準入力から行います。
制約事項など
LPC1768 周辺デバイス
冒頭でも少し触れましたが、LPC1768 のデバイスでサポートしているものは、
- UART0
のみです。
また、LPC1768 のクロックは、クロックソースが内部CR発振器に設定(CLKSRCSEL.CLKSRC が 0)されている場合のみ、
の設定内容から、 SysTick エミュレーションの動作周波数を決定するようにしています。
クロックソースが内部CR発振器以外で設定された場合は、 SysTick エミュレーションの動作周波数は100MHz 固定としています。