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

このQ&Aのポイント
  • OS無しでNICデバイスやLANカードをコントロールするプログラムを作成できるのでしょうか?
  • ファイルシステムとTCP/IPプロトコルの実装が必要で、NICのデバイスドライバも必要です。
  • OS無しのプログラムでネットワークデバイスを使用できる状態になるためには、さらなる学習が必要です。
回答を見る
  • ベストアンサー

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

OS無しの状態でのNICデバイスの認識について。 いつもお世話になっております。 小生、現在、x86アセンブリとBIOSコールを用いてOS無しのプログラムを走らせて、 PC/AT互換機の構造を勉強しています。 そこで、今回先輩方にご教示願いたいのは、 「OS無しでNICデバイス、LANカード等のデバイスをコントロールできるプログラムは作成する事が出来うるのでしょうか?」 です。 私の考えるところ、まずファイルシステムを実装し、その次にTCP/IPプロトコルを実装し、 NICのデバイスドライバを実装し、初めてネットワークデバイスを使用できる状態になると思うのですが。。。 まだまだ、勉強不足で足りなく、大変恐縮で申し訳ございませんが、 先輩方、ご教授頂けると誠に幸いです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 この辺を参考にしてみては如何でしょうか。 しかし、懐かしいなぁ、こんな下のドライバ触るなんてかなりコアな技術者しかいませんよぉ(笑

HackHack
質問者

補足

takuwanoshoさん、再度ご教授頂き誠にありがとうございます。 >最下位ドライバでは、これらトランシーバやシリアルチップに、どんなモードでどれくらいのバッファを使って読み書きして、それをどうやって上位に通知しろ、というような初期化設定を行う事が仕事になります。 上記のご教授誠に勉強になりました。 つまり、LANチップの仕様書をまず見て、OS無しの状態でLANチップをPCIから認識するコードを書く。 次にLANチップにあらかじめ書き込まれている、レジスタ命令と、PCのCPUの命令を駆使して、FIFOバッファの実装、FIFOバッファの書き込み、読み込みのタイミング(?)を実装する。 上記の手順で大体合致しているでしょうか? 先程、broadcom netxtreme gigabit ethernetの仕様書らしきものを手に入れたのですが、 前文英語で700ページ程もあり、愕然と致しました。 takuwanoshoさん、本当にご教授頂き誠に感謝申し上げます。 なんとか、OS無しでネットワークデバイスにアクセス、ネットワークデバイスの使用について糸口が見つかりました。 これから、更に調査を進め、実装に向けて進みたいと思います。 本当にありがとうございます。

その他の回答 (3)

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.3

Novell NE2000の互換ボードであればBootROMを搭載した機種があります。そういうボードは、最低限の機能を持った状態でネットワークブートできます。これは、ネットワーク越しのインストールに対応した機能ですが、少なくとも、インストーラーは動くと言うことに成ります。 これは、PCMCIAのNE2000互換カードですが http://euc.jp/os/rpl.ja.html ですから、ISAに挿すNE2000互換ボードを探すのが一番手っ取り早いでしょう。 ただ、日本ではほとんど使われなかった機能だし、つかえるプロトコルがIPX/SPXだけだったようなかすかな記憶が・・。

HackHack
質問者

補足

ultraCSさん、ご回答頂き誠にありがとうございます。 >Novell NE2000の互換ボードであればBootROMを搭載した機種があります。 大変、勉強になりました。 しかし、使えるプロトコルが限られた種類となるとやはり自分で実装した方がよさそうです。 貴重なご教授誠に感謝申し上げます。 以上、お忙しい中大変申し訳ございませんが、ご確認の程宜しくお願い致します。

回答No.2

PC/AT用のNICデバイスは大きくわけて2種類あって、CPUが有る物と無い物で最近は無いのが普通。 CPUが有るボードだと、コマンドさへ流せばデータの受送信を勝手にやってくれるのでかなり簡単に書けます。 CPUが無いボードだと、下位デバイスから全部自分で書かないといけないので大変ですよぉw まず、LANボードって言うのは、シリアルインターフェイスボードです。 イーサに流れるアナログ信号をトランシーバで受けてシリアルチップにバッファリングします。 だいたいトランシーバはシリアルチップ越しにコマンド受け渡すので、このシリアルチップのコマンド体系さへ解ればOK。 シリアルチップの初期化が済めば後は割と簡単で、割り込みかDMAによってデータを受送信する部分を書きます。 CPUが有るタイプはこの辺まで全部面倒見てくれます、無いタイプは全部自分で書かないといけなくなります。 チップのコマンド表などは必須になりますので、利用ボードのチップデータシートは手に入れて下さい。 で、ここまでがデータの読み込み部分ですが、この上にOSIモデルを構築しないといけないんですけど… 作るのかなり大変なので、オープンソースでソケットレイヤーのドライバ持って来てくっ付けちゃえば利用できます。 僕は何回か書いた事有りますけど、そんなに難しいドライバでは有りませんが、シリアル通信の基礎知識は最低限必要です。 って、ものすごーくはしょった書き方しましたが解りますか?

HackHack
質問者

補足

takuwanoshoさん、ご回答頂き誠にありがとうございます。 >PC/AT用のNICデバイスは大きくわけて2種類あって、CPUが有る物と無い物で最近は無いのが普通。 頂いた上記のご教授大変、勉強になりました。 確かに自分のNICを調べた際、CPUやチップに当たるものはありませんでした。 takuwanoshoさんは、CPUが無いタイプでのシリアルチップの初期化、割り込みまたはDMAによって送受信をする部分をコーディングされたという事ですが、もしよろしければその時、参考になさった、Webサイト、書籍等をお教え頂くと大変助かります。 (図々しくて、誠に申し訳ございません。) OSI参照モデルに関しては、少しだけ教養があるので、構造や仕組みをもっと調べ、理解すれば実装できそうです。 シリアル通信の知識に関してはまったくなく、参考になさったWebサイト、書籍等ございましたら、お教え願います。 以上、大変申し訳ございませんが、もう一度だけご教授宜しくお願い致します。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

HackHack
質問者

補足

Tacosanさん、ご回答頂き誠に感謝申し上げます。 「NICのデバイスドライバ」の必要性は仰る通り、必要だと思います。 ファイルシステムは必要ないんですね。。。 ちょっと安心しました。 この度はご教授頂き誠にありがとうございます。

関連するQ&A

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

    (再)OS無しの状態でのNICデバイスの認識について。 いつもお世話になっております。 今回質問させて頂きたいのは、 以前、ご質問させて頂いた、 「OS無しの状態でのNICデバイスの認識について。」 の追加質問になります。 以前のご質問で、 先輩方にLANチップにレジスタがある事、LANチップの通信方法をご教授頂き、 一つの道は開けました。 感謝の意を込めてお礼申し上げます。 本当にありがとうございます。 しかし、もう一つ疑問が出てきて、自分でも調べていたのですが、 中々、情報が見つからずこちらに質問させて頂きました。 その疑問というのは、 CPU側からオンボードLANチップにアクセスする際、メモリマップドI/Oからアクセスする事は可能なのでしょうか? それとも、BIOSサービスを使い、LANチップにアクセスするのでしょうか? BIOSサービスを調べても、シリアル通信の欄には、パラレルポート、シリアルポート、モデムにアクセスする方法しか掲載されていません。(DOS/Vプログラミングガイドという書籍です。) 本当にお世話になり誠に申し訳ございませんが、先輩方もう一度だけご教授お願い致します。 宜しくお願い致します。

  • CentOS5.2でNICが認識されない。

    Linuxサーバの勉強のために、CentOS5.2をインストールしていますが、NICが認識されずに行き詰っています。 ■環境 MB:VIA VT82C694X Apollo Pro133A CPU:Pentium III 1G MEM:768MB HDD:80GB NIC:Realtek RTL8139 と Realtek RTL8269SC OS:CentOS 5.2 (2.6.18.92.e15) 試したコマンドと結果。 ---- lspci → 結果無し cat /proc/ioports | grep Rther → 結果無し cat /proc/interrupts | grep Rther → 結果無し ---- これらのことから、カーネルがPCIスロット自体を認識しておらず、PCIに刺しているNICも当然認識されていないと推測しています。 つい先日までWindows 2000が実稼動していたマシンなので、MBやPCI、NICの不具合ではないと思います。 Googleでかなり調べてみたのですが、検索ワードが悪いのか、解決策が見つかりません。 確認手順などアドバイスがありましたらご教授下さい。 宜しくお願いします。

  • XPでNIC(その他)が認識されません

    OEM版 XP Home(以下XP)とVistaのデュアルブートを試みようとしています。 最初の流れから説明致しますと、Vista搭載パソコンをBTOで購入しました。 そこへデュアルブートがしたい為、初期は1つだったHDDを1つ追加してパーティションD:へ割り当てました。 そしてD:をフォーマットした後に、XPをC:へクリーンインストールをしました。 次にD:へVistaをインストールしました。 インターネットは光回線をルータで繋いでパソコンまで持ってきています。 なので、Vistaはインストール直後から設定無しでインターネットに繋ぐ事ができました。 しかし、XPの方はドライバがインストールされていない為、当然ですが サウンドやグラフィックやNICが認識されていませんでした。(表示すらされていない) そこで、MSIのドライバをサウンドとグラフィックとNICの3つともインストールしました(自信はありませんが)。 次にデバイスマネージャを開いてみると、サウンドのHigh Definition Audioデバイスに!マークが付いていたため、プロパティからドライバの更新をクリックしました。 コンピュータ内にサウンドドライバが入っていた為か、自動で更新が始まり、サウンドが正常に出るようになりました。 ですが、その他のNICやグラフィックカード等はデバイスマネージャに表示すらされていない状態です。 この状態を改善する方法を自分では分からなかったため、教えていただきたく質問させていただきました。 どうかよろしくお願い致します。 問題のOS:Windows XP Home Edition ディスプレイアダプタ:NVIDIA GeForce 8800 GTS ネットワークアダプタ:Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC (NDIS 6.0)(オンボード) マザーボード型名:Intel P965 Express マザーボード(MSI製 P965NEO-F / ATX / USB2.0 ,SerialATAII,PCI-Exp.対応) ハードは上記の物です。 以上の情報で足りないものがありましたらお手数ですが、ご指摘下さいますよう、よろしくお願い致します。 特にインターネットに繋げられない件で困っております。

  • C言語のsocket関数で、複数NIC実装PCはどうなるのでしょうか?

    UNIX-C言語で、TCP/IP通信を勉強していて、疑問にぶつかったのですが、 複数のNIC(もしくはIPアドレス)を実装しているPCは、 自分のIPアドレス(gethostby***関数などで)を取得したばあい、 どのように見えるのでしょう? また、そのPCがC/S構成におけるserver側だった場合、 bind()関数に設定するIPアドレスはデータ通信したい側のNICの IPアドレス一つでいいのでしょうか。 NIC2枚挿しのPCが身近にないので、実験できません(^^;) どなたかご教授いただけませんでしょうか m(_ _)m

  • 『新しくデバイスを認識しました』となってしまう

    初めまして。 色々と調べたりしてみたのですがどうにも分からなくなってしまい、お知恵をお貸しいただけたらと思います…。 ◆困っていること デバイスは正しいはずなのに、パソコンを起動すると『新しくデバイスが認識されました』となってしまう。 ドライバをインストールをして元に戻るのだが、再起動をするとまた元に戻ってしまう。 問題が起きる以前の状態にシステムを復元をすると、何事も無かったかのような状態になるのですが、シャットダウンして次に起ち上げたら、再び『新しくデバイスが認識されました』となってしまいます。 ちなみにその時に新しく認識されましたとなって出てくるデバイスは PCI device Microsoft UAA Bus Driver for High definition Audio PCR→EDIROL社のMIDI入力キーボードです UA101→EDIROL社のオーディオインターフェースです の4つです。 ◆やりたいこと 問題が起こっていない状態に戻したい ◆問題のプログラム 分からないです。 海外のサイトで楽譜を探してる時に、『あなたのパソコンに問題が起きました、すぐにウイルス対策ソフトをダウンロードしてください』というポップアップが出たのですが、すぐにウィンドウを消しました。ウイルスチェックをしましたが何も問題はありませんでした。 しかしながらその時から上記の問題が起きています。 ◆トラブル起き始めたとき 4日ほど前です ◆トラブルの頻度 システムの復元で元に戻してからパソコンを消して再び起ち上げたときに毎回です。 ◆エラー情報 デバイスはちゃんと入ってるはずなのに、PC起動時に『新しくデバイスが認識されました』となってしまいます。 デバイスドライバをダウンロードしても次に起動したときに元に戻ってしまいます。 問題が起きている状態の時はデバイスの所に『!』のマークが付いています。 デバイスマネージャからデバイスの状態を見たのですが、デバイスは正常に動作しているのですが、『このデバイスのドライバはコンピュータの再起動時にアンインストールされます。このデバイスに行った変更は保存されません。』というメッセージがデバイスの状態の覧に載っています。 ◆思い当たる点 上記に書いてるように、インターネットを使っていた時だったので、ウイルスなのかなとは思うのですがウイルスバスターでは何も出てきませんでした ◆自分でやったこと ・デバイスドライバをダウンロード ・Dell Diagnostics診断プログラムによりテスト ・ドライバを削除してから再起動 ◆メーカー DELL ◆製品名 DIMENSION 9150 ◆OS Windows XP professional(Build 2600)SP 2 ◆メモリ 2GB ◆ウィルス対策ソフト ウィルスバスター2007 ◆プロバイダー ケイオプティコム ◆インターネット回線 光回線 

  • サウンドデバイスが認識されません

    初めて利用させていただきます。 現在ASUS A8N-EのマザーボードについているRealtek AC97 Audioを使っているのですが、突然音が鳴らなくなりデバイスマネージャーをみたところ、!や×のマークはなかったのですがサウンドエフェクトとあった項目が消えており診断ツールを使ったところ再生デバイスが消えていました。 プログラムの追加と削除で1度アンインストールして入れなおしても数時間するとまた音がならなくなり今度は入れないしてもなぜだかAC97が認識されません。 OSの入れ直しを行ったのですがやはり同じ状態になってしまい非常に困っています。どなたかお詳しい方いましたらご教授お願いします。

  • インターネットプロトコル(TCP/IP)の追加について

    誤ってインターネットプロトコル(TCP/IP)を ローカルエリア→プロパティ→インターネットプロトコル(TCP/IP)→削除 の手順で消してしまいました。 色々調べた中で、誤って削除してしまった場合 ローカルエリア→プロパティ→インストール→プロトコル→インターネットプロトコル(TCP/IP) の手順で復元できるあったのですが、インストールの欄にインターネットプロトコル(TCP/IP)がありません。 追加の欄にあるのは Apple Talkプロトコル DLCプロトコル NetBEUIプロトコル NWLink IPX/SPX/NetBIOS互換トランスポートプロトコル ネットワークモニタドライバ の5つです。 もらい物のPCでOSのCDがありません。なので再インストールが出来ない状態です。 OS再インストール以外の方法での解決方法を教えてください。よろしくお願いします。

  • サウンドデバイスが正しく認識されません

    OS:Windows XP Professional ディスプレイアダプタ:NVIDIA GeForce 8800 GTS ネットワークアダプタ:Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC (NDIS 6.0)(オンボード) マザーボード型名:Intel P965 Express マザーボード(MSI製 P965NEO-F / ATX / USB2.0 ,SerialATAII,PCI-Exp.対応) の環境にて、チップセット>グラフィックドライバ>オーディオドライバ>NICドライバの順でインストールを実施したのですが、インターネットに繋げられる状態になり、グラフィックドライバも正常にインストールできたようなのですが、オーディオドライバをインストールしてもサウンドデバイスが正常に認識されません。 インストールしたのは「Realtek High Definition Audio DriverR1.91」です。 インストールするドライバを間違えたのでしょうか? それとも手順を間違えたのでしょうか。 他の方の過去の質問を調べてみたのですが、イマイチ解決に辿り着きませんでした。 どなたか分かる方、お願い致します。 その他必要な情報等がございましたらご指摘下さい。

  • カーネルのプロトコルスタック開発

    カーネル初心者です。 カーネルに実装されているTCP/IPプロトコルスタックを開発・デバッグしたいのですが、まったく手順が分かっておりません。。 カーネルの構築方法は分かるのですが、下記に示すように実装されている個々のプロトコルを開発・デバッグしてから、カーネルに組み込みたいと考えています。 1.TCP/IPプロトコルを開発・デバッグ 2.上記モジュールをカーネルに組み込みデバッグ #それともそもそもこんな手順でやらない? したがって、カーネル実装のプロトコルスタックについて、以下の2点をどなたかご教授いただけないでしょうか。 ・開発環境の作り方 ・デバッグの方法 開発のサンプルや参考ページもあわせて教えていただけると幸いです。(自力で探すことができませんでした。。) 英語サイトでも大丈夫です。 現在考えているのはLinuxかBSD系のOSですが、種類は問いません。 どうかよろしくお願いいたします。

  • Linux os

     不使用になったPCを使って、Linux OS を勉強したいと思っております。PCはドライブクリーナーで工場出荷状態(OSはありません)になっております。まずは、適切なLinux OSを教えていただきたい。尚、小生は素人です、専門用語は分かりませんのでよろしくお願いします。