wiki:ssp_arm_gcc

Version 1 (modified by nmir-saito, 9 years ago) ( diff )

--

TOPPERS/SSP Kernel for ARM + skyeye (separate package, experimental)

ARMプロセッサ向けTOPPERS/SSPカーネルの個別パッケージです.
ターゲットシステムとして TOPPERSカーネル向けシミュレーション環境 で提供される,SkyEyeシミュレータ上で動作確認しています.

本ソフトウェアはASP向けの実装をSSPに移植したものです.サンプルプログラムでの実行は一応確認していますが,確認が十分でない点もありますので現段階では試験的な実装として提供します.その点ご承知ください.

必要なもの

動作を確認するには,以下のものを用意してください.

  • TOPPERS/SSPカーネル 1.3.0
    • TOPPERS/SSPカーネルの非依存部個別パッケージです.
  • このプログラム(ARMプロセッサ向け個別パッケージ)
    • subversion が使用できる場合,以下のコマンドで最新版を入手できます.
      $ svn co http://dev.toppers.jp/svn_user/contrib/ssp_arm_gcc/trunk
      
    • または,ブラウザで ソースのブラウズ画面を開き,画面下部にある"Download in other formats: Zip Archive" のリンクをクリックします.そうすると ZIPアーカイブしたソースコードをダウンロードすることが出来ます.
    • 入手したファイルの arch 以下のファイルを,先に取得したSSPカーネルの arch/ ディレクトリ以下に,target以下のファイルも同様に SSPカーネルの target/ 以下に配置します.
  • コンフィギュレータ
    • カーネルのコンフィギュレーションに使用します.1.8.0での動作を確認しています.
    • 実行ファイルを <カーネルのトップディレクトリ>/cfg/cfg に配置するか,もしくは別の場所においた場合 configure スクリプトの実行時に -g オプションで cfg の実行ファイルの位置を指定することで使用できます.
  • Cygwin
    • ビルドから実行確認までの一連の作業に用います.ツールが用意できればMinGWなどの別環境で使用できるかもしれません.
  • コンパイラ(GCC)
    • https://launchpad.net/gcc-arm-embedded/ からダウンロードすることが出来ます.動作確認には GCC ARM Embedded 4.9-2015-q1-update(gcc 4.9.3) を使用しました.
    • インストール先のディレクトリとして,パスに空白文字や日本語文字などを含まない場所にインストールしたほうが無難です.
  • SkyEyeシミュレータ
    • TOPPERSカーネル向けシミュレーション環境 で提供されるものを使用します.
    • ダウンロードしたパッケージに付属の実行ファイル(skyeye.exe)はCygwin向けにビルドされていますので,別環境で実行したい場合はソースからビルドする必要があります.
  • デバッガ(GDB)
    • SkyEyeシミュレータとのGDBデバッグには gdb のバージョンが7.1より前のバージョンである必要があります.ソースからビルドする場合は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
      

手順

  • クロス開発ツールのセットアップが完了していることを前提とします.
  • Makefile およびサンプルプログラムのセットアップをします.ビルドするディレクトリの場所はこの例の通りでなくても基本的には構いません.
    $ cd <カーネルトップディレクトリ>
    $ mkdir build; cd build
    $ ../configure -T at91skyeye_gcc
    
  • 次にビルドして実行プログラムを作成します.
    • コンパイル方法は他のTOPPERSカーネルと同様です.コマンドラインで以下のように実行します.
      $ make depend
      $ make
      
  • プログラムの実行およびデバッグには SkyEye を使用します.
    • プログラムの実行は,skyeye のパラメータとして実行ファイルと設定ファイルを渡します.
      $ skyeye.exe -c <sspカーネルソースのトップ>/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 <sspのトップディレクトリ>/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 <http://gnu.org/licenses/gpl.html>
      (略)
      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
    $
    
Note: See TracWiki for help on using the wiki.