RT-LINUXのシステム・コール
(ご注意)
この章はRT-Linuxからかき集めて日本語訳しただけであり、
内容について検討したわけではありません。
また断じてCopyrightを主張するものでもありません。
著作権はRT-Linuxの作者にあります。
RT-LINUXのシステム・コールには次のようなものがあります。
タスク制御関係

rt_task_init()
rt_task_make_periodic()
rt_task_wait()
rt_task_suspend
rt_task_delete

リアルタイムプロセス間通信・リアルタイムFIFOの関係

rtf_ipc_create  デバッガでは未インプリメント
rtf_ipc_destroy デバッガでは未インプリメント
rtf_receive    デバッガでは未インプリメント
rtf_send      デバッガでは未インプリメント
rtf_create()
rtf_create_handler(dev, (func*)handler);
rtf_resize
rtf_fifo_get
rtf_fifo_put
rtf_get()
rtf_put()
rtf_destroy()

メッセージ・キュー関係

rtl_mq_destroy
rtl_mq_init
rtl_mq_receive
rtl_mq_send

セマフォー関係

rtl_sem_destroy
rtl_sem_init
rtl_sem_post
rtl_sem_trywait
rtl_sem_wait

タスク関係拡張

rtl_task_ipc_delete
rtl_task_ipc_init
rtl_task_delay()




名 称  rtl_task_init

real-time taskの生成。


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_sched.h>

int rtl_task_init(RT_TASK * task, void (*fn)(int data), int data, int stack_size, int priority);


説 明

rtl_task_initはreal-time taskの生成を行う。アプリケーションタスクはReal Time Linux task が規定するstructureで提供される構造体をrt_task_init に渡さなければならない。この構造体はタスク生存中は存在し続けなければならない、従ってオート変数であってはならない。
rt_task_init は RT_TASK 構造体を通して新タスクのエントリー・ポイントfnを渡す。親タスクは一つのinteger変数を引数として新タスクへ渡すことができる。
stack_sizeは新タスクで使用するスタック・スペースを、priorityはタスクの優先度を設定する。
Priority1は最優先度のタスクをRT_LOWEST_PRIORITYは最低優先度のタスクを示す。新しく生成したタスクはdormant(休眠)状態に初期化される。通常、rt_task_wakeupあるいはrt_task_make_periodic で実行状態へ移行する。


戻り値

成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。


エラー値

-EINVAL
このタスク構造体は既に他のタスクで使用されている。

-ENOMEM
タスク・スペースが確保できない。


BUGS

Auther

See Also

名 称  rt_task_make_periodic

タスク周期起動


概 要
int rt_task_make_periodic(RT_TASK *task, RTIME start_time, RTIME period);

説 明

このタスクに周期起動を設定する。直ちにタスクを起動したければ、rt_get_time()の戻り値をstart_timeにセットする。


戻り値

BUGS

Auther

See Also

名 称  rt_task_suspend

タスクの一時停止。


概 要

extern int rt_task_suspend(RT_TASK *task);


説 明

taskで指定するreal-time taskを一時中止状態に設定する。


戻り値

BUGS

Auther

See Also

名 称  rt_task_delete

タスクの削除


概 要
extern int rt_task_delete(RT_TASK *task);

説 明

rtl_task_deleteはrtl_task_initで生成したタスクをタスクリストから削除する。


戻り値

BUGS

Auther

See Also

名 称  rt_task_wait

実行放棄。



概 要
extern int rt_task_wait(void)

説 明

タスク周期起動において、次の周期まで実行を一時中止する。



戻り値

BUGS

Auther

See Also

名 称  rtf_create

リアルタイムfifoの作成。



概 要
#include <linux/rtf.h>
xtern int rtf_create(unsigned int fifo, int size);

説 明

RT-FIFOの作成を行う。RT-FIFO番号fifoを初期サイズsizeで生成する。


戻り値

成功の場合sizeを返す。失敗の場合-1を返す。


BUGS

Auther

See Also

名 称  rtf_resize

RT-FIFOのサイズを変更する。


概 要

#include <linux/rtf.h>
extern int rtf_resize(unsigned int minor, int size);


説 明

RT-FIFOのサイズを変更する。



戻り値

成功の場合sizeが返される。失敗の場合、負値が返る。



BUGS

FIFOに残っている内容は破棄される。


Auther

See Also

名 称  rtf_create_handler

概 要

#include <linux/rtf.h>
extern int rtf_create_handler(unsigned int fifo, int (*handler)(unsigned int fifo))


説 明

RT-FIFOのhandlerをアタッチする。関数handlerはLinuxプロセスがFIFOへread あるいはwritesしたとき呼ばれる。Handlerは呼ばれたとき、fifoあ引数として渡される。


戻り値

BUGS

Auther

See Also

名 称  rt_fifo_get

RT-FIFOからの読み出し。



概 要

#include <linux/rtf.h>
extern int rt_fifo_get(unsigned int fifo, char * buf, int count);


説 明

RT-FIFOからcountバイトの読み込みを試行する。


戻り値

成功した場合、countを返す。FIFOに充分なデータが無いばあい-1を返す。


BUGS

Auther

See Also

名 称  rt_fifo_put

RT-FIFOへの書き込み。



概 要

#include <linux/rtf.h>
extern int rt_fifo_put(unsigned int fifo, char * buf, int count);


説 明

RT-FIFO番号fifoへの書き込みを試行する。


戻り値

成功した場合countを返す、FIFOに充分なスペースがない場合-1を返す。


BUGS

Auther

See Also

名 称  rtf_destroy

リアルタイムFIFOの削除


概 要

#include <linux/rtf.h>
extern int rtf_destroy(unsigned int fifo);


説 明

RT-FIFOの削除を行う。


戻り値

成功の場合0を返す。


BUGS

Auther

See Also

名 称  rtl_mq_init

メッセージキューの生成



概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_mq_init(rtl_mq_t *mq, int max_msgs, int msg_size);


説 明

rtl_mq_initはreal-time message queueを生成し初期化する。 メッセージ・キューはリアルタイム・タスク相互間の通信に使用することができる。LinuxとReal-Time Linux間の通信はReal-Time Linuxの標準RT-FIFOで容易に実現できる。
mqは静的に確保された構造体を指していなければならない。max_msgsはキューイングする最大メッセージ数を設定し、msg_sizeは各メッセージの最大サイズを設定する。


戻り値

成功した場合は0を返す。 失敗の場合は下記の負値であるエラー値を返す。


エラー値

-EINVAL
msg_size が負値であるか、max_msgsが1より小さい。

-ENOMEM
message queueのスペースが確保できない。.


BUGS

優先度の継承は現在できない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_mq_destroy(2), rtl_mq_receive(2), rtl_mq_send(2),
rtl_task_ipc_delete(2), rtl_task_ipc_init(2)rtl_mq_receive


名 称  rtl_mq_send

メッセージキューの送信動作


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_mq_send(rtl_mq_t *mq, char *msg, RT_MQ_PRIO prio,
RTIME wait);


説 明

rtl_mq_sendはデータmsgをメッセージキューmqへ格納する。データは(別に定義してあるとしても)rtl_mq_initで設定したサイズであると仮定し処理する。 優先度prioがRT_MQ_NORMALの場合、このデータは待ち行列の最後に置かれる。もしprioがRT_MQ_URGENTであると、このデータは強制的に待ち行列の先頭に位置する。オプションのtimeoutはRT_WAIT_FOREVERの場合、この関数はタイムアウトしない。RT_NO_WAITでありセマフォー未使用の場合rtl_mq_sendは直ちにリターンする。その他の数値を設定した場合、rtl_mq_sendはこの時間内に処理が終わらなければタイムアウトする。この際rtl_mq_sendは戻り値として-ETIMEを返す。


戻り値

成功のとき0を返す。 失敗の場合負の値である、下記のエラーコードを返す。


エラー値

-ETIME タイムアウト

-EAGAIN
RT_NO_WAITのとき、待ち行列にスペースが確保できなかった。

-EINVAL
メッセージキューmqが正常なrtl_mq_tのポインタではない。.


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_receive(2),
rtl_task_ipc_delete(2), rtl_task_ipc_init(2)rtl_mq_destroy


名 称  rtl_mq_receive

メッセージキューの受信動作


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_mq_receive(rtl_mq_t *mq, char *msg, RTIME wait);


説 明

rtl_mq_receiveはメッセージキューmqからキューを取り出しデータmsgへ格納する。 このデータのサイズはrtl_mq_initで設定した大きさである。オプションであるタイムアウトを設定した場合次の動作を行う。RT_WAIT_FOREVERはタイムアウトを起こさない、RT_NO_WAIT を指定しセマフォーが使用可能でないときrtl_mq_receiveは直ちにリターンする。その他の値を設定した場合、この時間内に処理が終わらなければrtl_mq_receiveはタイムアウトする。この際rtl_mq_receiveは戻り値として-ETIMEを返す。


戻り値

成功のとき0を返す。 失敗の場合、負の値である下記のエラーコードを返す。


エラー値

-ETIME タイムアウト時間を過ぎた.

-EAGAIN
RT_NO_WAITのとき待ち行列データが存在しない。

-EINVAL
メッセージキューmqが正規のrtl_mq_tへのポインタではない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_send(2),
rtl_task_ipc_delete(2), rtl_task_ipc_init(2)


名 称  rtl_mq_destroy

メッセージキューの削除


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <tl_ipc.h>

int rtl_mq_destroy(rtl_mq_ *mq)


説 明

rtl_mq_destroyはrtl_mq_createで生成したメッセージキューmqを削除する。 メッセージキュー削除に際しての安全策は施してある。例えば、メッセージキューによってブロックされているタスクは実行状態にしてからメッセージキューを削除する。


戻り値

成功の場合0を返す。失敗の場合負の値の下記エラー値を返す。


戻り値

-EINVAL
メッセージキューmqは正規のメッセージポインター rtl_mq_tではない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_mq_init(2), rtl_mq_receive(2), rtl_mq_send(2),
rtl_task_ipc_delete(2), rtl_task_ipc_init(2)


名 称  rtl_sem_init

セマフォーの初期化


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_sem_init(rtl_sem_t *sem, RT_SEMTYPE type, int
init_val);


説 明

rtl_sem_initはリアルタイムセマフォーの初期化を実行する。 セマフォーはリアルタイム・タスク間の通信及び同期機構を提供する。Linux プロセスとリアルタイム・タスク間の通信は標準RTLinuxのRT-FIFOが取り扱う。リアルタイム・セマフォーsemは静的構造体変数でなければならない。TypeはRT_SEM_BINARYあるいは RT_SEM_COUNTINGである。 init_valはセマフォーの初期値(通常0)である。


戻り値

成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。


エラー値

-EINVAL
初期値init_valが負の値(あるいはtypeがRT_SEM_BINARYの場合 init_val が 1より大きい)である。


BUGS

Priorityは整合性を保つためにあり現状ではサポートしていない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>>


See Also

rtl_task_ipc_delete(2), rtl_task_ipc_init(2),
rtl_sem_destroy(2), rtl_sem_post(2), rtl_sem_trywait(2),
rtl_sem_wait(2)


名 称  rtl_sem_post

セマフォー 'post' 操作


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_sem_post(rtl_sem_t *sem);


説 明

rtl_sem_postはセマフォーのポスト操作(しばしば、この操作はセマフォーの 'give', 'signal', あるいは 'V'と呼ばれる)を行う。このセマフォーを待つタスクがあれば、そのうち最も優先度の高いタスクが実行可能状態となる。セマフォーsemはrtl_sem_createで生成した構造体を指す。


戻り値

成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。


エラー値

-EINVAL
セマフォーsemが正規のrtl_sem_t構造体を指していない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_task_ipc_delete(2), rtl_task_ipc_init(2),
rtl_sem_destroy(2), rtl_sem_init(2), rtl_sem_trywait(2),
rtl_sem_wait(2)


名 称  rtl_sem_wait

セマフォー 'wait' 操作


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_sem_wait(rtl_sem_t *sem, RTIME timeout);


説 明

rtl_sem_waitはセマフォーの wait 操作(しばしばセマフォーの'take' あるいは 'P'と呼ばれる)を行う。 rtl_sem_trywaitと異なり、セマフォーが使用可能ではない場合コールしたタスクはブロック状態へ移行し、セマフォー待ちとなる。セマフォーsemはrtl_sem_createで生成した構造体を指す。オプションであるタイムアウトを設定した場合次の動作を行う。RT_WAIT_FOREVERはタイムアウトを起こさない、RT_NO_WAITを指定しセマフォーが使用可能でないときrtl_mq_receiveは直ちにリターンする。その他の値を設定した場合、この時間内に処理が終わらなければrtl_mq_receiveはタイムアウトする。この際rtl_mq_receiveは戻り値として-ETIMEを返す。


戻り値

成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。


エラー値

-EAGAIN
このセマフォーは現在使用可能ではない。

-EINVAL
セマフォーsemが正規のrtl_sem_t構造体を指していない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_task_ipc_delete(2), rtl_task_ipc_init(2),
rtl_sem_destroy(2), rtl_sem_init(2), rtl_sem_post(2),
rtl_sem_trywait(2)

名 称  rtl_sem_trywait

セマフォーの'wait' (ブロックしない) 操作


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_sem_trywait(rtl_sem_t *sem);


説 明

rtl_sem_waitはセマフォーのwait操作(しばしば、この操作はセマフォーの'take'あるいは 'P'と呼ばれる) を行う。rtl_sem_waitと異なり、rtl_sem_trywaitは直ちにリターンする。セマフォーsemはrtl_sem_createで生成した構造体を指す。


戻り値

成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。


エラー値

-EAGAIN
このセマフォーは現在使用可能ではない。

-EINVAL
セマフォーsemが正規のrtl_sem_t構造体を指していない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_task_ipc_delete(2), rtl_task_ipc_init(2),
rtl_sem_destroy(2), rtl_sem_init(2), rtl_sem_post(2),
rtl_sem_wait(2)


名 称  rtl_sem_destroy

セマフォーの削除


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_ipc.h>

int rtl_sem_destroy(rtl_sem_t *sem);


説 明

rtl_sem_destroyはrtl_sem_createで生成したセマフォーの削除を行う。セマフォーsemは rtl_sem_createで生成した構造体を指す。セマフォー削除の際の安全策は施してある。例えばセマフォー待ちでブロックしているタスクは実行可能状態とする。


戻り値

成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。


エラー値

-EINVAL
セマフォーsemが正規のrtl_sem_t構造体を指していない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_task_ipc_delete(2), rtl_task_ipc_init(2),
rtl_sem_init(2), rtl_sem_post(2), rtl_sem_trywait(2),
rtl_sem_wait(2)


名 称  rtl_task_init

real-time taskの生成。


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <rtl_sched.h>

int rtl_task_init(RT_TASK * task, void (*fn)(int data), int data, int stack_size, int priority);


説 明

rtl_task_initはreal-time taskの生成を行う。アプリケーションタスクはReal Time Linux task が規定するstructureで提供される構造体をrt_task_init に渡さなければならない。この構造体はタスク生存中は存在し続けなければならない、従ってオート変数であってはならない。rt_task_init はRT_TASK 構造体を通して新タスクのエントリー・ポイントfnを渡す。親タスクは一つのinteger変数を引数として新タスクへ渡すことができる。stack_sizeは新タスクで使用するスタック・スペースを、priorityはタスクの優先度を設定する。Priority1は最優先度のタスクをRT_LOWEST_PRIORITYは最低優先度のタスクを示す。新しく生成したタスクはdormant(休眠)状態に初期化される。通常、rt_task_wakeupあるいはrt_task_make_periodic で実行状態へ移行する。


戻り値

成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。


エラー値

-EINVAL
このタスク構造体は既に他のタスクで使用されている。

-ENOMEM
タスク・スペースが確保できない。


BUGS

Auther

See Also

名 称  rtl_task_ipc_delete

rtl_task_ipc_initで生成されたタスクを削除する。


概 要

#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <linux/rtf.h>
#include <rtl_ipc.h>

int rtl_task_ipc_delete(RT_TASK_IPC * task);


説 明

tl_task_ipc_deleteはrtl_task_ipc_initで生成したタスクを削除する。
tl_task_ipc_deleteは標準Real-Time Linux関数であるrt_task_deleteの代わりに使用する。タスクがrtl_sem_wait, rtl_mq_send, あるいは rtl_mq_receive呼び出しによりブロックされていた場合、このタスクのセマフォーあるいはメッセージキューの待ちキューは破棄される。


戻り値

成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。


エラー値

-EINVAL
タスク構造体が正当なタスクを指していない。


Auther

Jerry Epplin <JerryEpplin@worldnet.att.net>


See Also

rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_receive(2),
rtl_mq_send(2), rtl_task_delete(2), rtl_task_ipc_init(2),
rtl_sem_destroy(2), rtl_sem_init(2), rtl_sem_post(2),
rtl_sem_trywait(2), rtl_sem_wait(2),


TopPageへ
Guest No.