体験!マイコンボードで組込みLinux

第9回 組込みボードへのさまざまな言語の導入[その1]

この記事を読むのに必要な時間:およそ 3 分

FORTRANの導入

今回は組込みボードに各種のインタープリタ言語を導入する方法について解説しますが,その前にC言語以外のコンパイラ言語の組込みボードへの導入について触れましょう。ここではFORTRAN言語の導入例について解説します。C言語以外のコンパイラ言語系は,FORTRAN言語以外も似たような方法での導入となります。

概要

SH7706LSRボードでは,ディストリビューションを導入をすればオンボードでコンパイル作業をしてそのまま実行することも可能ですが,ここではPCで開発をしてSH7706LSRボードで実行するというクロスコンパイル形態を考えます。

FORTRANコンパイラには,直接実行コードを生成するものと,C言語のコードを生成してそれをCコンパイラで実行コードを生成するトランスレータがあります。コンパイラは直接に実行コードを生成するものよりC言語のコードを生成するもののほうが軽量で導入がしやすいので,ここではC言語のコードを生成するFORTRANコンパイラシステムを導入します。クロスコンパイル形態なので,FORTRAN言語からC言語に変換するトランスレータは通常のPC上で実行するプログラムコードとなります。

注意が必要なのは,それぞれの言語にはそれぞれの特有の組込み関数が存在するので,トランスレータで変換されたC言語のコードはそのままではCコンパイラで実行できない点です。CコンパイラはCライブラリに存在する関数しか実行コードを生成できないので,そのままでは他の言語の組込み関数の実行コードが生成できません。

FORTRANの場合はFORTRAN特有の組込み関数は別途ライブラリとして用意しておき,C言語でクロスコンパイルするときにそのライブラリをリンクします。したがって,FORTRAN特有の組込み関数ライブラリは組込みボード向けにクロスコンパイルでライブラリを生成し,クロスコンパイラのなかにライブラリを追加します。

導入

FORTRANトランスレータ一式は以下のサイトがオリジナルです。

The Netlib
URL:http://www.netlib.org/

まとまったアーカイブf2c.tar.gzは以下でダウンロード可能です。

Using gfortran or installing f2c and fort77
URL:https://computation.llnl.gov/casc/Overture/henshaw/install/node8.html

アーカイブf2c.tar.gzを展開すると,FORTRAN特有の組込み関数ライブラリがあるlibf2cとトランスレータ本体であるsrcの2つのフォルダに展開されます。

まず,libf2cをSH3アーキテクチャ向けの実行コードにクロスコンパイルをしますが,標準ではPC向けのコードにコンパイルするようになっています。

リスト1 libf2cのmakefile

01: # Unix makefile: see README.
02: # For C++, first "make hadd".
03: # If your compiler does not recognize ANSI C, add
04: #    -DKR_headers
05: # to the CFLAGS = line below.
06: # On Sun and other BSD systems that do not provide an ANSI sprintf, add
07: #    -DUSE_STRLEN
08: # to the CFLAGS = line below.
09: # On Linux systems, add
10: #    -DNON_UNIX_STDIO
11: # to the CLFAGS = line below.
12: .SUFFIXES: .c .o
13: CC = gcc
14: SHELL = /bin/sh
15: CFLAGS = -O
16: 
17: # compile, then strip unnecessary symbols
18: .c.o:
19:     $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c
20: # wdh    ld -r -x -o $*.xxx $*.o
21:     ld -r -o $*.xxx $*.o
22:     mv $*.xxx $*.o
     《以下略》

makefileであるリスト1の13行目と21行目を以下のように変更します。

CC = sh3-linux-gcc

sh3-linux-ld -r -o $*.xxx $*.o

コンパイルは以下のように行います。

 # make

できあがったライブラリは,以下のようにクロスコンパイラの中に追加をします。

 # cp libf2c.a /usr/sh3-linux/sh3-linux/lib

次に,srcフォルダ内にあるトランスレータを,通常のPC向けのプログラムコードとして同様にコンパイルします。

 # make

できあがったトランスレータは,PC上の実行ファイルがある適当なパスに以下のように追加をします。

 # cp f2c /usr/bin
 # cp xsum /usr/bin

これですべての導入が完了しました。

プログラム実行

PC上でFORTRAN言語のプログラムを作成します。

2つの変数に数値データを入力してから,その結果の四則演算結果を表示するサンプルプログラムはリスト2となり,ファイル名はsample.fとします。

リスト2 四則演算のサンプルプログラム(FORTRAN)

01: programme memain
02: 
03: write(*,*)  'Input a and b.'
04: write(*,*)  'a ='
05: read(*,*) a
06: write(*,*)  'b ='
07: read(*,*) b
08: 
09: c=a+b
10: d=a-b
11: e=a*b
12: f=a/b
13: 
14: write(*,*)  a,'+',b,'=',c
15: write(*,*)  a,'-',b,'=',d
16: write(*,*)  a,'*',b,'=',e
17: write(*,*)  a,'/',b,'=',f
18: 
19: end

FORTRAN言語のソースのコンパイルは以下のようにします。

 # f2c sample.f
 # sh3-linux-gcc -o sample sample.c -lf2c

できあがったSH3アーキテクチャー向けの実行ファイルである sample をSH7706LSRボード向けのファイルシステムの適当な場所にコピーをします。SH7706LSRボードでLinuxを起動し,SH7706LSRボード上のプロンプト上で以下のように実行をします。

~ # ./sample      
 Input a and b.   
 a = 23       
 b = 15        
  23.+  15.=  38. 
  23.-  15.=  8.  
  23.*  15.=  345.
  23./  15.=  1.5333333
~ #

著者プロフィール

みついわゆきお

1986年日立製作所入所,その3年後に自社ワークステーションでの開発業務をきっかけにBSDを経てLinux利用を始める。

1991年日立を退社し,その後,ボランティアでLinux関連ツールの整備と開発しながらWindows否定運動およびLinux普及運動を開始し,Linuxディストリビューション草創期にはPlamoLinuxのメンテナンスにもかかわる。

2001年ごろより非営利ベースでボードコンピュータの開発を開始し,やがて,無償によりハードとソフトを開発したH8マイコンボードの販売を秋月電子にて開始した。

現在,ボードコンピュータ用基本ソフトMES2.5や,SHプロセッサ向けLinuxパッチおよびTOPPERS/JSPパッチを無償で一般に提供しながら,ティーエーシーやエムイーシステムより原価率100%を目標(ただし,販売店の営業・販売費用や開発・製造の際の差損を除く)としたSuperHボードコンピュータを販売中。

また,現在でも頑固にMS社否定及びWindows撲滅運動に邁進中。

コメント

コメントの記入