= TOPPERS/SSP Kernel for ARM + skyeye (separate package, experimental) = ARMプロセッサ向けTOPPERS/SSPカーネルの個別パッケージです.[[BR]] ターゲットシステムとして [http://www.toppers.jp/sim.html TOPPERSカーネル向けシミュレーション環境] で提供される,SkyEyeシミュレータ上で動作確認しています. 本ソフトウェアはASP向けの実装をSSPに移植したものです.サンプルプログラムでの実行は一応確認していますが,確認が十分でない点もありますので現段階では試験的な実装として提供します.その点ご承知ください. = 必要なもの = 動作を確認するには,以下のものを用意してください. * [http://www.toppers.jp/ssp-kernel.html#d-download TOPPERS/SSPカーネル 1.3.0] * TOPPERS/SSPカーネルの非依存部個別パッケージです. * このプログラム(ARMプロセッサ向け個別パッケージ) * subversion が使用できる場合,以下のコマンドで最新版を入手できます. {{{ $ svn co http://dev.toppers.jp/svn_user/contrib/ssp_arm_gcc/trunk }}} * または,ブラウザで [https://dev.toppers.jp/trac_user/contrib/browser/ssp_arm_gcc/trunk ソースのブラウズ画面]を開き,画面下部にある"Download in other formats: Zip Archive" のリンクをクリックします.そうすると ZIPアーカイブしたソースコードをダウンロードすることが出来ます. * 入手したファイルの arch 以下のファイルを,先に取得したSSPカーネルの arch/ ディレクトリ以下に,target以下のファイルも同様に SSPカーネルの target/ 以下に配置します. * [http://www.toppers.jp/cfg-download.html コンフィギュレータ] * カーネルのコンフィギュレーションに使用します.1.8.0での動作を確認しています. * 実行ファイルを <カーネルのトップディレクトリ>/cfg/cfg に配置するか,もしくは別の場所においた場合 configure スクリプトの実行時に -g オプションで cfg の実行ファイルの位置を指定することで使用できます. * [https://www.cygwin.com/ Cygwin] * ビルドから実行確認までの一連の作業に用います.ツールが用意できれば[http://www.mingw.org/ MinGW]などの別環境で使用できるかもしれません. * コンパイラ(GCC) * [https://launchpad.net/gcc-arm-embedded/] からダウンロードすることが出来ます.動作確認には GCC ARM Embedded 4.9-2015-q1-update(gcc 4.9.3) を使用しました. * インストール先のディレクトリとして,パスに空白文字や日本語文字などを含まない場所にインストールしたほうが無難です. * SkyEyeシミュレータ * [http://www.toppers.jp/sim.html TOPPERSカーネル向けシミュレーション環境] で提供されるものを使用します. * ダウンロードしたパッケージに付属の実行ファイル(skyeye.exe)はCygwin向けにビルドされていますので,別環境で実行したい場合はソースからビルドする必要があります. * デバッガ(GDB) * SkyEyeシミュレータとのGDBデバッグには gdb のバージョンが7.1より前のバージョンである必要があります.ソースからビルドする場合は[http://ftp.gnu.org/gnu/gdb/ GNUのFTPサーバ]からダウンロードできます. * たとえば gdb-7.1a.tar.gz をダウンロードした場合,次のような手順でビルドします(以下は Cygwinでの例,ビルドには gcc等のホスト向け開発ツールやncursesライブラリ等が必要になります).インストール先として --prefix の設定を変えるなどしてください. {{{ $ tar xvf gdb-7.1a.tar.gz $ cd gdb-7.1 $ mkdir build $ cd build $ ../configure --target=arm-none-eabi --prefix=/home/saito/tool/gdb-7.1 --enable-interwork --enable-multilib $ make all $ make install }}} * ビルド済み実行ファイル(Cygwin環境向け)を[https://drive.google.com/file/d/0BzxltLXnMNHub2Y4ZEFfSEttOUk/view?usp=sharing ここから]ダウンロードすることも出来ます.ncursesライブラリなどの追加のライブラリが必要になるかもしれません(未確認). = 手順 = * クロス開発ツールのセットアップが完了していることを前提とします. * Makefile およびサンプルプログラムのセットアップをします.ビルドするディレクトリの場所はこの例の通りでなくても基本的には構いません. {{{ $ cd <カーネルトップディレクトリ> $ mkdir build; cd build $ ../configure -T at91skyeye_gcc }}} * 次にビルドして実行プログラムを作成します. * コンパイル方法は他のTOPPERSカーネルと同様です.コマンドラインで以下のように実行します. {{{ $ make depend $ make }}} * プログラムの実行およびデバッグには SkyEye を使用します. * プログラムの実行は,skyeye のパラメータとして実行ファイルと設定ファイルを渡します. {{{ $ skyeye.exe -c /target/at91skyeye_gcc/skyeye.conf -e ssp.exe big_endian is false. arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x41d650 uart_mod:0, desc_in:, desc_out:, converter: SKYEYE: use arm7100 mmu ops exec file "ssp.exe"'s format is elf32-little. load section .text: addr = 0x00000000 size = 0x00003e4c. load section .eh_frame: addr = 0x00003e4c size = 0x00000004. (略) TOPPERS/SSP Kernel 1.3.0 for AT91SKYEYE(ARM) (May 27 2015 , 08:21:40) 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. <----- ここで 'a' を押すとタスクが実行開始する #act_tsk(1) task1 is running (001). | task1 is running (002). | task1 is running (003). | (略) task1 is running (021). | task1 is running (022). | task1 is running (023). | <----- 'Q' を押すと終了する -- buffered messages -- Sample program ends. }}} * GDBデバッグする場合は,GDBサーバモードで skyeye をあらかじめ起動しておき,gdb で接続します. * skyeye側: {{{ $ skyeye.exe -c /target/at91skyeye_gcc/skyeye.conf -d **************************** WARNING ********************************** If you want to run ELF image, you should use -e option to indicate your elf-format image filename. Or you only want to run binary image, you need to set the filename of the image and its entry in skyeye.conf. *********************************************************************** big_endian is false. arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x41d650 uart_mod:0, desc_in:, desc_out:, converter: SKYEYE: use arm7100 mmu ops debugmode= 1, filename = target/at91skyeye_gcc/skyeye.conf, server TCP port:12345 }}} * gdb 側: {{{ $ ~/tool/gdb-7.1/bin/arm-none-eabi-gdb.exe ssp.exe GNU gdb (GDB) 7.1 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later (略) Reading symbols from /home/saito/work/ssp_at91skyeye_gcc/build/ssp.exe...done. (gdb) target remote localhost:12345 <---- サーバ(skyeye)へ接続 Remote debugging using localhost:12345 vector_table () at ../ssp/arch/arm_gcc/common/core_support.S:61 61 ldr pc, reset_vector /* ▒ꥻ▒å▒ */ (gdb) load <----- 実行プログラムをロード Loading section .text, size 0x3e4c lma 0x0 Loading section .eh_frame, size 0x4 lma 0x3e4c Loading section .ARM.exidx, size 0x8 lma 0x3e50 Loading section .rodata, size 0x918 lma 0x3e58 Loading section .data, size 0x440 lma 0x4770 Start address 0x3c, load size 19376 Transfer rate: 995 KB/sec, 156 bytes/write. (gdb) }}} * ターゲットにロードできればあとはステップ実行や連続実行など,通常のGDBと同様に使用できます. {{{ (gdb) s Can't send signals to this remote system. SIGHUP not sent. Program received signal SIGHUP, Hangup. start () at ../ssp/target/at91skyeye_gcc/start.S:69 69 ldr r0, =_kernel_istkpt (gdb) s Can't send signals to this remote system. SIGHUP not sent. Program received signal SIGHUP, Hangup. start () at ../ssp/target/at91skyeye_gcc/start.S:70 70 ldr sp, [r0] (gdb) c Continuing. Can't send signals to this remote system. SIGHUP not sent. }}} * 実行を開始すると,サーバ側の画面に出力が表示されます.入力もこの画面に対して行います. {{{ TOPPERS/SSP Kernel 1.3.0 for AT91SKYEYE(ARM) (May 27 2015 , 08:21:40) 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. }}} * 連続実行を停止する場合は Ctrl+c を入力します.gdbを終了する場合は kill コマンドでサーバと切断し,'q' の入力で終了します. {{{ Can't send signals to this remote system. SIGHUP not sent. <--- 連続実行中.Ctrl+cで中断 Program received signal SIGHUP, Hangup. _kernel_dispatcher () at ../ssp/arch/arm_gcc/common/core_insn.h:81 81 Asm("msr CPSR, %0" : : "r"(sr) : "cc"); (gdb) kill Kill the program being debugged? (y or n) y (gdb) q $ }}}