次のページ 前のページ 目次へ

5. コンパイルと実行

hello.c プログラムを実行するには(もちろんですが、rtlinux のブート後にです)、 以下の手順を行わなければなりません:

  1. GCC コンパイラを使ってソースコードをコンパイルし、モジュールを生成します。 とはいえ、Makefile を作成して作業を簡略化するほうが良いです。 そうすればソースコードをコンパイルするのに 'make' と入力するだけで済みます。Makefile は、'Makefile' という名前のファイルに以下の内容を入力することで作成できます。
         include rtl.mk
         all: hello.o
         clean:
             rm -f *.o
         hello.o: hello.c
             $(CC) ${INCLUDE} ${CFLAGS} -c hello.c
    
  2. rtl.mk ファイルを見つけ、hello.c や Makefile があるのと同じディレクトリに 置いてください。rtl.mk ファイルは、コードをコンパイルするのに必要な すべてのフラグを含む include ファイルです。rtl.mk ファイルは RTLinux のソースツリーからコピーして hello.c ファイルと同じディレクトリ に格納できます。
  3. コードをコンパイルするには、'make' コマンドを使用してください。
            $ make 
    
  4. この結果できるオブジェクトバイナリは、カーネルの RTLinux により実行される部分に組みこまなくてはなりません。'rtlinux' コマンドを使用してください (それには 'root' になる必要があります)。
            $ rtlinux start hello
    

これで hello.o プログラムがメッセージを毎秒出力するのを確認できるはずです。 マシンの設定によっては、コンソールで直接見ることができるはずですが、 そうでなければ以下のコマンドを入力すれば見ることができます:

        $ dmesg

プログラムを停止するには、これをカーネルから削除する必要があります。 それを行うには、以下のコマンドを入力してください:

        $ rtlinux stop hello

モジュールの組みこみ、削除を行う別のやり方として、それぞれ insmodrmmod を利用するというのもあります。

ここまでは例となるプログラムが簡単過ぎました。これまで見てきたものと違い、 実際には一つのプログラム中に複数のスレッドが存在するかもしれません。 優先度をスレッド作成時に設定したり、それを後で修正することが可能です。 また、しかるべきスケジューリングアルゴリズムを選択することも可能です。 実は、独自のスケジューリングアルゴリズムを書くことも可能なんです!

我々の例では、thread_code() 関数の先頭に以下の3行を挿入することで、 スレッドの優先度を1に設定し、FIFO スケジューリングを選択できます。

        struct sched_param p;
        p . sched_priority = 1;
        pthread_setschedparam (pthread_self(), SCHED_FIFO, &p);


次のページ 前のページ 目次へ