電子書籍の厳選無料作品が豊富!

OS無しの状態でのNICデバイスの認識について。

いつもお世話になっております。
小生、現在、x86アセンブリとBIOSコールを用いてOS無しのプログラムを走らせて、
PC/AT互換機の構造を勉強しています。

そこで、今回先輩方にご教示願いたいのは、
「OS無しでNICデバイス、LANカード等のデバイスをコントロールできるプログラムは作成する事が出来うるのでしょうか?」
です。

私の考えるところ、まずファイルシステムを実装し、その次にTCP/IPプロトコルを実装し、
NICのデバイスドライバを実装し、初めてネットワークデバイスを使用できる状態になると思うのですが。。。

まだまだ、勉強不足で足りなく、大変恐縮で申し訳ございませんが、
先輩方、ご教授頂けると誠に幸いです。

宜しくお願い致します。

A 回答 (4件)

OSIモデルを知ってるなら、こう言えば解るかな?



まず物理層とデータリンク層が大凡のシリアル通信を行っている部分です。
例えばラインから受信すると言う事は…
電気信号の強弱をクロックに合わせてBIT毎にFIFOバッファに貯めるのが先に書いたトランシーバの役目です。
このトランシーバからbyte単位にデータを吸い上げて来てデータをバッファリングするのがシリアルチップの役目です。
これらラインに流れてる一本の信号からデータの受信を行う事を、シリアル通信と呼びます。
ラインへ送信する時はこの逆を行います。
最下位ドライバでは、これらトランシーバやシリアルチップに、どんなモードでどれくらいのバッファを使って読み書きして、それをどうやって上位に通知しろ、というような初期化設定を行う事が仕事になります。
1度設定してしまえば、後は勝手にデータをドンドン読み書きしてくれます。

データがラインから読み書き出来てしまえばこっちのもの、読み書きしたフレームデータを処理するのが、ネットワーク層から上のドライバーの役目に成ります。

僕達はBIOSも無い様な組み込み世界でやってるので、逆に素通しでこの辺を触ってしまうんですけど…
最近のNICボードなら大抵NE2000の互換モード持ってるのが普通だと思いますし、この辺のAPIを叩いた方が簡単かな。
何か参考にしたいなら、フリーソースのドライバを見る方が早いかもしれません。
http://wiki.monaos.org/pukiwiki.php?mones2%2F21. …
この辺を参考にしてみては如何でしょうか。

しかし、懐かしいなぁ、こんな下のドライバ触るなんてかなりコアな技術者しかいませんよぉ(笑

この回答への補足

takuwanoshoさん、再度ご教授頂き誠にありがとうございます。

>最下位ドライバでは、これらトランシーバやシリアルチップに、どんなモードでどれくらいのバッファを使って読み書きして、それをどうやって上位に通知しろ、というような初期化設定を行う事が仕事になります。

上記のご教授誠に勉強になりました。
つまり、LANチップの仕様書をまず見て、OS無しの状態でLANチップをPCIから認識するコードを書く。

次にLANチップにあらかじめ書き込まれている、レジスタ命令と、PCのCPUの命令を駆使して、FIFOバッファの実装、FIFOバッファの書き込み、読み込みのタイミング(?)を実装する。

上記の手順で大体合致しているでしょうか?
先程、broadcom netxtreme gigabit ethernetの仕様書らしきものを手に入れたのですが、
前文英語で700ページ程もあり、愕然と致しました。

takuwanoshoさん、本当にご教授頂き誠に感謝申し上げます。
なんとか、OS無しでネットワークデバイスにアクセス、ネットワークデバイスの使用について糸口が見つかりました。

これから、更に調査を進め、実装に向けて進みたいと思います。
本当にありがとうございます。

補足日時:2010/11/04 03:13
    • good
    • 0

Novell NE2000の互換ボードであればBootROMを搭載した機種があります。

そういうボードは、最低限の機能を持った状態でネットワークブートできます。これは、ネットワーク越しのインストールに対応した機能ですが、少なくとも、インストーラーは動くと言うことに成ります。

これは、PCMCIAのNE2000互換カードですが
http://euc.jp/os/rpl.ja.html

ですから、ISAに挿すNE2000互換ボードを探すのが一番手っ取り早いでしょう。
ただ、日本ではほとんど使われなかった機能だし、つかえるプロトコルがIPX/SPXだけだったようなかすかな記憶が・・。

この回答への補足

ultraCSさん、ご回答頂き誠にありがとうございます。

>Novell NE2000の互換ボードであればBootROMを搭載した機種があります。

大変、勉強になりました。
しかし、使えるプロトコルが限られた種類となるとやはり自分で実装した方がよさそうです。

貴重なご教授誠に感謝申し上げます。

以上、お忙しい中大変申し訳ございませんが、ご確認の程宜しくお願い致します。

補足日時:2010/11/02 22:53
    • good
    • 0

PC/AT用のNICデバイスは大きくわけて2種類あって、CPUが有る物と無い物で最近は無いのが普通。


CPUが有るボードだと、コマンドさへ流せばデータの受送信を勝手にやってくれるのでかなり簡単に書けます。
CPUが無いボードだと、下位デバイスから全部自分で書かないといけないので大変ですよぉw

まず、LANボードって言うのは、シリアルインターフェイスボードです。
イーサに流れるアナログ信号をトランシーバで受けてシリアルチップにバッファリングします。
だいたいトランシーバはシリアルチップ越しにコマンド受け渡すので、このシリアルチップのコマンド体系さへ解ればOK。
シリアルチップの初期化が済めば後は割と簡単で、割り込みかDMAによってデータを受送信する部分を書きます。
CPUが有るタイプはこの辺まで全部面倒見てくれます、無いタイプは全部自分で書かないといけなくなります。
チップのコマンド表などは必須になりますので、利用ボードのチップデータシートは手に入れて下さい。

で、ここまでがデータの読み込み部分ですが、この上にOSIモデルを構築しないといけないんですけど…
作るのかなり大変なので、オープンソースでソケットレイヤーのドライバ持って来てくっ付けちゃえば利用できます。
僕は何回か書いた事有りますけど、そんなに難しいドライバでは有りませんが、シリアル通信の基礎知識は最低限必要です。

って、ものすごーくはしょった書き方しましたが解りますか?

この回答への補足

takuwanoshoさん、ご回答頂き誠にありがとうございます。

>PC/AT用のNICデバイスは大きくわけて2種類あって、CPUが有る物と無い物で最近は無いのが普通。

頂いた上記のご教授大変、勉強になりました。
確かに自分のNICを調べた際、CPUやチップに当たるものはありませんでした。

takuwanoshoさんは、CPUが無いタイプでのシリアルチップの初期化、割り込みまたはDMAによって送受信をする部分をコーディングされたという事ですが、もしよろしければその時、参考になさった、Webサイト、書籍等をお教え頂くと大変助かります。
(図々しくて、誠に申し訳ございません。)

OSI参照モデルに関しては、少しだけ教養があるので、構造や仕組みをもっと調べ、理解すれば実装できそうです。

シリアル通信の知識に関してはまったくなく、参考になさったWebサイト、書籍等ございましたら、お教え願います。

以上、大変申し訳ございませんが、もう一度だけご教授宜しくお願い致します。

補足日時:2010/11/02 13:26
    • good
    • 0

どこまでをもって「OS」と呼ぶか, って問題がありそうだけど, 原理的には不可能じゃないと思う.


これだけの情報で「最低限必要」といえるのは「NIC のデバイスドライバ」だけじゃない? ファイルシステムの必要性は理解できないし, (ぎりぎり言えば) TCP/IP で動いてるかどうかも不明. ATM なり IEEE1394 (... は「NIC」とは言わんか) 使ってたりして.

この回答への補足

Tacosanさん、ご回答頂き誠に感謝申し上げます。
「NICのデバイスドライバ」の必要性は仰る通り、必要だと思います。
ファイルシステムは必要ないんですね。。。

ちょっと安心しました。

この度はご教授頂き誠にありがとうございます。

補足日時:2010/11/02 13:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!