おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

newlib

この前組み立てたLPC2214の開発環境を整えるにあたって、この前に引き続きさらに色々調べて分かったことをメモ書き。

newlibとは、組み込み用のC標準ライブラリです。もちろんnewlibを使うことになります。今回は、GNUARMを使おうと考えているので、newlibは既にGNUARMに含まれています。しかし、普通に考えてもわかるように、C標準ライブラリのfopen()やfclose()などに関しては、OSのサポートが無ければ使うことができません。OSのシステムコールについては、newlibを配布しているRedHatのここに文章とがあります。この文章によると、open()、_open_r()、close()、_close_r()などを実装してnewlibとリンクすると、C標準ライブラリのfopen()、fclose()などが使えるとかかれています。すなわち、(OSが無くても)open()…を自分で実装すればよいことになります。実際に、LPC系に実装した例がnewlib-lpcとしてAeolus Developmentで配布されています。
先ほど、open()、_open_r()、close()、_close_r()などを実装してと書きましたが、このopen()と_open_r()の違いは、_open_rの方が明示的にリエントラントであることです。これに関しては、このドキュメントを参照してください。


OSのシステムコールについて補足。再定義する関数についてのメモです。
_exit() ファイルをクリーンアップせずに、プログラムを終了します。
close() ファイルをクローズします。
environ 環境変数とその値の配列のポインタのです。
execve() 新たなプロセスへ制御を移します。
fork() 新たなプロセスを生成します。
fstat() オープンされたファイルの状態を取得します。
getpid() プロセスIDを取得します。
isatty() 出力ストリームがターミナルであるかどうか問い合わせます。
kill() シグナルを送信します。
link() 既に存在するファイルに新たな前を設定します。
lseek() ファイル内の位置を設定します。
open() ファイルをオープンします。
read() ファイルから読み込みます。
sbrk() プログラムデータスペースをインクリメントします。malloc()とそれに関する関数がこの関数に依存することになります。
stat() ファイルの状態を取得します。
times() 現在のプロセスにおけるタイミングの情報を取得します。
unlink() ファイルのディレクトリエントリを削除します。
wait() 子プロセスを待ちます。
write() ファイルに文字を書き込みます。

さらにリエントラントが要求されるものは以下のルーチンを定義します。
_open_r()
_close_r()
_lseek_r()
_read_r()
_write_r()
_fork_r()
_wait_r_()
_stat_r()
_fstat_r()
_link_r()
_unlink_r()
_sbrk_r()

とりあえず、open()をはじめとするファイル関係と、malloc()を使えるようにするためにsbrk()を定義すればよさそうです。
ちょっと気になるのが、sbrk()を使ってmalloc()実装している部分、まあメモリ管理ってことになるんですが。IBMにその手の記事があったのでメモメモ。まあ、そのうちnewlibのmalloc()のソースを見てみよう(今、ちょっとその部分mallocr.cを見てみたけど、3500行ほどあったので読む気を無くした)。
  1. 2006/08/05(土) 09:08:08|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<英単語帳Word Card | ホーム | ロボットの移動ルーチンの提案>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/124-8c7a8ade
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。