組み込みソフトウェアの開発において、下位レイヤーを意識した開発はまだまだ現役です。
ドライバとHAL、それぞれの違いについて簡単に知っておくことで、設計時の選択肢も増えると思いますので、
どのようなものなのか、違いについてご紹介いたします。
ドライバとは何か?
ドライバは、特定のハードウェア(以下、HW)を制御するためのソフトウェア(以下、SW)です。
HWのレジスタ操作や割り込み制御などの処理を行い、特定のHWを直接制御します。
対象のHWに特化した制御を行うことを目的としており、そのHW固有の制御のみとなるので無駄がなく処理速度も高速です。
ただし、ドライバの処理内容はHWに依存するため、ドライバが上位SWに公開するインターフェースについてもHW依存となる傾向が強く、
HWが変更された場合、そのドライバを使用している上位SWにも修正が必要になることが多くなります。
HALとは何か?
HALはHardware Abstraction Layerの略で、「ハードウェア抽象化レイヤー」とも呼ばれ、
HWを抽象化することで、HWの違いを意識することなく動作できるようにするためのSWです。
HWにアクセスするためのAPIを提供し、上位のSWがこれを利用して操作することで、HWの違いを意識することなく制御することができます。
上位SWはHALとしかやり取りしていないのでHWに依存しておらず、ドライバ以下が入れ替わっても修正する必要がありません。
ただし、処理が増えるため処理速度の面ではドライバ単体よりも不利になります。
ドライバとHALの違い
ドライバは特定のHWに依存する処理を行って、直接的に制御する手段を提供し、 HALはHWに依存する処理を隠蔽して、共通的な制御を行う手段を提供します。
特長 | ドライバ | HAL |
---|---|---|
役割 | ハードウェアの直接制御 | ハードウェアの抽象化 |
抽象化レベル | 低い | 高い |
移植性 | 低い(ハードウェアに依存する) | 高い(ハードウェアに依存しない) |
提供するもの | ハードウェア固有の操作 | 機能単位の制御インターフェース(API) |
メリット | 処理速度が速い | 上位SWの変更コストを低く抑えられる |
デメリット | ハードウェアに依存する | 処理速度が低下する |
上記は1例です。実際の開発においては、HWやアーキテクチャ、設計によってドライバとHALの関係が逆転していたり、
同一の扱いとなっている場合もありますが、開発対象の構成がどのようになっているかを意識する事で、効率やメンテナンス性の高いSWの設計・実装に繋がります。
まずは知るというところから意識してみてはいかがでしょうか。