カーネル開発(デバイス)Linuxのカーネルの開発に関する世界観(デバイス)です。Linuxカーネルも参照のこと。第2版」を参考に執筆・編集して引用しました。カーネルは、I/Oデバイスを「デバイスドライバ」を通して操作する。・ハードディスク・キーボード・マウス・モニタ・ネットワークインターフェース・SCSIバスに接続されたデバイスなど、1つ以上のデバイスの制御を行う、データ構造と関数から構成されている。各ドライバは、特定のインターフェースを通して、カーネルの他の部分や他のドライバとやり取りする。BIOSBIOSは、起動時に最初に実行されてブートローダを読み込むだけではなく、接続された機器のI/Oを直接操作し、その操作の方法を共通したインターフェースを通じてOSが行うための基本的なI/O操作方式を提供する。現代的なOSでは、こうしたI/Oの共通インターフェースの提供はデバイスドライバを通じて行うことが多く、BIOSによるI/O操作はあまり行われなくなっている。デバイスドライバデバイスドライバは、この世界にあまたあるハードウェアデバイスそれぞれを共有のインターフェースで操作する仕組みで、デバイスドライバが用意されていないハードウェアについてはOSは操作することができない。Linuxカーネルの大部分のコードはデバイスドライバに充てられている。Linuxはプリンターなど一部のデバイスについては今でもドライバが十分ではなく、プリンターについては「ドライバレス」と呼ばれる新しい仕組みも開発されている。最近はLinuxカーネルもX11もモジュールを自動でロードするので、自分でデバイスドライバを導入したり設定したりすることは少なくなっている。組み込みシステム向けにLinuxカーネルを使う場合などは、カーネルを手動コンパイルすることで、必要のないモジュールを全て消去できる。リアルタイム向けのパッチを当てることで、プリエンティブルなRTOSの機能(要求が起きてからタスクを実行する時間を最短にする)を実現できる。自動車などLinux+Pythonの環境を組み込みでも使いたい場合など(人工知能を乗せるなど)の時は、PC向けの要らない機能(デバイスドライバだけではなくファイルシステムなど)は全部消去させることができる。Qiitaブロック型デバイスとキャラクタ型デバイスデバイスドライバには、大きく分けてブロック型デバイスとキャラクタ型デバイスがある。基本的に、ブロック型デバイスというのは、ハードディスクやCD-ROMのような「データ」を扱うためのもので、キャラクタ型デバイスというのは、モデムやプリンタやキーボードやマウスといった「やり取り」を行うためのもの。ブロック型とキャラクタ型の違いは、「好きな時に好きなところにアクセスできるかどうか」。ランダムに前後してデータを読み書きすることができる。デバイスファイルはデータの蓄積として扱われる。ファイルシステムが作成されたハードディスクの場合、ファイルシステムにマウントし、別々のファイルとしてデータを読み書きできる。ハードディスクなどがブロック型デバイスである。ランダムに前後してデータを読み書きすることができない。シーケンシャル(順序的)なアクセスだけが可能。デバイスファイルはストリームとして扱われる。プリンタやモデムはキャラクタ型デバイスである。このどちらにも当たらないネットワークインターフェースのデバイスドライバがあり、通信に利用する。デバイスファイルからの読み書きはできない。デバイスドライバによってデバイスがシステムに認識されると、現在のLinuxではudevを用いて/devディレクトリにデバイスファイルが自動作成される。プログラムがデバイスファイルにアクセスすると、デバイスドライバに対応するI/Oデバイスを用いて、デバイスを直接触ることができる。以下のサイトが参考になります。デバイスファイルを参照のこと。ドライバのロードドライバ(カーネルモジュール)のロードについては、Linuxカーネル(ソースコード)を参照のこと。