- ベストアンサー
OS無しの状態でのNICデバイスの認識について
- OS無しでNICデバイスやLANカードをコントロールするプログラムを作成できるのでしょうか?
- ファイルシステムとTCP/IPプロトコルの実装が必要で、NICのデバイスドライバも必要です。
- OS無しのプログラムでネットワークデバイスを使用できる状態になるためには、さらなる学習が必要です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
OSIモデルを知ってるなら、こう言えば解るかな? まず物理層とデータリンク層が大凡のシリアル通信を行っている部分です。 例えばラインから受信すると言う事は… 電気信号の強弱をクロックに合わせてBIT毎にFIFOバッファに貯めるのが先に書いたトランシーバの役目です。 このトランシーバからbyte単位にデータを吸い上げて来てデータをバッファリングするのがシリアルチップの役目です。 これらラインに流れてる一本の信号からデータの受信を行う事を、シリアル通信と呼びます。 ラインへ送信する時はこの逆を行います。 最下位ドライバでは、これらトランシーバやシリアルチップに、どんなモードでどれくらいのバッファを使って読み書きして、それをどうやって上位に通知しろ、というような初期化設定を行う事が仕事になります。 1度設定してしまえば、後は勝手にデータをドンドン読み書きしてくれます。 データがラインから読み書き出来てしまえばこっちのもの、読み書きしたフレームデータを処理するのが、ネットワーク層から上のドライバーの役目に成ります。 僕達はBIOSも無い様な組み込み世界でやってるので、逆に素通しでこの辺を触ってしまうんですけど… 最近のNICボードなら大抵NE2000の互換モード持ってるのが普通だと思いますし、この辺のAPIを叩いた方が簡単かな。 何か参考にしたいなら、フリーソースのドライバを見る方が早いかもしれません。 http://wiki.monaos.org/pukiwiki.php?mones2%2F21.NIC%A5%C9%A5%E9%A5%A4%A5%D0%B0%DC%BF%A2 この辺を参考にしてみては如何でしょうか。 しかし、懐かしいなぁ、こんな下のドライバ触るなんてかなりコアな技術者しかいませんよぉ(笑
その他の回答 (3)
- ultraCS
- ベストアンサー率44% (3956/8947)
Novell NE2000の互換ボードであればBootROMを搭載した機種があります。そういうボードは、最低限の機能を持った状態でネットワークブートできます。これは、ネットワーク越しのインストールに対応した機能ですが、少なくとも、インストーラーは動くと言うことに成ります。 これは、PCMCIAのNE2000互換カードですが http://euc.jp/os/rpl.ja.html ですから、ISAに挿すNE2000互換ボードを探すのが一番手っ取り早いでしょう。 ただ、日本ではほとんど使われなかった機能だし、つかえるプロトコルがIPX/SPXだけだったようなかすかな記憶が・・。
補足
ultraCSさん、ご回答頂き誠にありがとうございます。 >Novell NE2000の互換ボードであればBootROMを搭載した機種があります。 大変、勉強になりました。 しかし、使えるプロトコルが限られた種類となるとやはり自分で実装した方がよさそうです。 貴重なご教授誠に感謝申し上げます。 以上、お忙しい中大変申し訳ございませんが、ご確認の程宜しくお願い致します。
- takuwanosho
- ベストアンサー率36% (59/163)
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サイト、書籍等ございましたら、お教え願います。 以上、大変申し訳ございませんが、もう一度だけご教授宜しくお願い致します。
- Tacosan
- ベストアンサー率23% (3656/15482)
どこまでをもって「OS」と呼ぶか, って問題がありそうだけど, 原理的には不可能じゃないと思う. これだけの情報で「最低限必要」といえるのは「NIC のデバイスドライバ」だけじゃない? ファイルシステムの必要性は理解できないし, (ぎりぎり言えば) TCP/IP で動いてるかどうかも不明. ATM なり IEEE1394 (... は「NIC」とは言わんか) 使ってたりして.
補足
Tacosanさん、ご回答頂き誠に感謝申し上げます。 「NICのデバイスドライバ」の必要性は仰る通り、必要だと思います。 ファイルシステムは必要ないんですね。。。 ちょっと安心しました。 この度はご教授頂き誠にありがとうございます。
補足
takuwanoshoさん、再度ご教授頂き誠にありがとうございます。 >最下位ドライバでは、これらトランシーバやシリアルチップに、どんなモードでどれくらいのバッファを使って読み書きして、それをどうやって上位に通知しろ、というような初期化設定を行う事が仕事になります。 上記のご教授誠に勉強になりました。 つまり、LANチップの仕様書をまず見て、OS無しの状態でLANチップをPCIから認識するコードを書く。 次にLANチップにあらかじめ書き込まれている、レジスタ命令と、PCのCPUの命令を駆使して、FIFOバッファの実装、FIFOバッファの書き込み、読み込みのタイミング(?)を実装する。 上記の手順で大体合致しているでしょうか? 先程、broadcom netxtreme gigabit ethernetの仕様書らしきものを手に入れたのですが、 前文英語で700ページ程もあり、愕然と致しました。 takuwanoshoさん、本当にご教授頂き誠に感謝申し上げます。 なんとか、OS無しでネットワークデバイスにアクセス、ネットワークデバイスの使用について糸口が見つかりました。 これから、更に調査を進め、実装に向けて進みたいと思います。 本当にありがとうございます。