0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HALとかBSPとかドライバとか

Last updated at Posted at 2025-04-25

質問:「HAL、BSP、ドライバの違いは?

以下はChatGPTの回答。


めちゃくちゃ良い質問です!
HAL・BSP・ドライバの違いって、初心者にも上級者にも混乱しやすいポイントなんですよね。

順を追って、わかりやすく整理します!


ざっくり定義から:

用語 役割・意味
ドライバ ハードウェアを直接制御するコード(レジスタ操作など)
HAL ハード依存の処理を共通化・抽象化したインターフェース層
BSP 特定のボードに依存した初期化コードや設定集(起動に必要)

1. ドライバ(Driver)

ハードウェアを直接制御するソフトウェア

  • 最も下層、レジスタを直接操作してLEDを点けるとか、UARTを初期化する処理を書く
  • 書き方もチップによって全然違う
  • 移植性は低い(=チップが変わると書き直し)

例(擬似コード):

*(volatile uint32_t*)(GPIO_BASE + OFFSET) |= 0x01;  // LED ON

2. HAL(Hardware Abstraction Layer)

ドライバをラップして、誰でも使いやすくした共通インターフェース

  • ドライバの上に乗る抽象レイヤー
  • 同じAPIで、違うチップでも同じように動くようにする
  • アプリ開発者は、HALだけ知っていればOK!

例(STM32):

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

3. BSP(Board Support Package)

特定のボード(開発基板)向けに準備された設定・初期化コードのセット。

  • CPUだけじゃなく、ボード全体(クロック、外部フラッシュ、GPIO配置)を初期化
  • OSが起動するための最低限の「基板に依存したコード」
  • HALやドライバをこのボード用にまとめて使えるようにしたもの

関係性を図で表すと:

[アプリケーション]
       ↓
     HAL(APIを提供)
       ↓
   ドライバ(レジスタ操作など)
       ↓
    ハードウェア

↑ BSPは、この構成を「特定のボード向け」にまとめたパッケージ

イメージ比較表:

項目 ドライバ HAL BSP
抽象度 低い 高(ボード全体)
対象範囲 ペリフェラル単位(GPIO, UARTなど) 同上 ボード全体
移植性 低い 高い 低め(ボード依存)
提供内容 実装 API + 実装 初期化 + 設定ファイル

まとめ

  • ドライバ:ハードを直接叩く層(生の制御)
  • HAL:ドライバをラップして抽象化したAPI層(共通的に使える)
  • BSP:そのボードでソフトを動かすために必要な設定・初期化コード集

もし興味あれば、STM32やPico SDKの中で「これはHAL」「これはドライバ」みたいな具体例も一緒に見ていけますよ!やってみる?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?