web-dev-qa-db-ja.com

Linuxはプロセッサ周辺のハードウェアとどのように通信しますか?

私の質問は、管理そのものではなく、Unix/Linuxの開発に関連しています。

管理者ではなく、Unix/Linuxの低レベルシステムプログラマー向けだと思います。カーネル開発を開始したり、Linuxシステム開発を理解したりするのに役立ちます

Linuxがハードウェア周辺機器やモジュールとどのように相互作用するかについて学び始めるには、ハードウェアについて具体的にどのような情報が必要ですか。たとえば、バスアーキテクチャやコントローラとの通信方法などです。

また、ほとんどの環境で、仮想マシンがLinuxで実行されるようになったことにも言及したいと思います。だから、その下のOSによって見られるものは、私が意味したことです。

いくつかの参考資料、またはそれについて学び始める方法が必要です。

私は基本的なx86命令を知っていますが、私の質問は、プロセッサ自体の周りのメモリとバスコントローラに関するものです。現代の並列プログラミング環境で私が意味するプログラマーモデル。

1
AbdAllah Talaat

それがどのように機能するかは、アーキテクチャ/マシンに大きく依存します。 Linux(カーネル)は、使用可能なデバイスと起動時の接続(およびプラグインされたデバイスの表示/非表示)をマッピングするツリーを作成します。情報の出所は、基盤となるハードウェアによって異なります。

同じマシンで実行されている他のオペレーティングシステムには、これを行う独自の方法があります。非常にポータブルであることが意図されている場合は、おそらく同様のアプローチを使用します。

たとえば、いじくり回します。オリジナルのPC(またはエミュレーション)を使用すると、いくつかの固定デバイスにアクセスでき、何らかの方法でアクセスできます固定(またはほぼ)。一部のUnicesは、システムのオブジェクトコードに同梱されており、デバイスの追加/再構成とは、いくつかのCファイルの編集、カーネルの再コンパイルと再リンクを意味していました。たくさんの楽しみ。

1
vonbrand

Z80プロトタイピングボードのようなものを手に入れて、シリアルポートからビットバンを試してみるか、dosでエミュレートされたibm pcを実行し、DOSirqを使用して同じことを実行してください。

メモリマップドテキスト表示を備えた古いZ80マシンでは、少なくともテキストを表示するのは簡単です。

アセンブラ、Pascal、Ada、C(これにC++を使用する理由)、BASIC、およびその他のかなりの言語を使用して、このようなことを(簡単に、または少し難しく、または非実用的に)行うことができます。仕事の !

かなりの量のメモリをサポートできるかなり現代的なプロセッサについては、C /アセンブラ/エイダ(i Pascalに考えてみてください。)これは、プロセッサのファミリがかなり単純なメモリアーキテクチャを備えているためです。

Grubのソースをチェックしてください!

起動時にプログラム(ブートローダー)をロードする方法に興味がある場合、またはスペースインベーダー(ベアメタル上で実行されるスペースインベーダーのクローン)のようなグラブ化されたゲームをチェックしてください。

仮想マシンでgrub-invaderを起動できます grub-invadersを参照

0
Stefan Skoglund