YU2TA7KA's BLOG

派生開発、組み込み開発周りのこと。

Board Support Package(BSP)とは

はじめに

最近Board Support Package(以下、BSP)開発的なことをしています。このBSPという言葉の範囲は非常に広いので自分の理解をまとめておきます。

BSPとは

以下のWebサイトを引用します。

ボード·サポート·パッケージ(Board Support Package;BSP)は、CPU上ボードで、OSを実行させるために必要なソフトウェアライブラリであり、ハードウェアの初期化処理、メモリマッピング処理、ブートローダ、シリアルやタイマなどのデバイスを動作させるためのコンフィギュレーションコードとデバイスドライバ(限定されたハードウエアを動作させるソフトウエア)などから構成されます。

このことは、低レベルのシステム·ソフトウェアの深い知識、ハードウェアを完全に理解し、OSの内部の深い知識が必要となります。ポジティブワンでは、これらの設計における豊富な専門知識を持ったエンジニアがおり、ニーズに答えることが可能です。
ポジティブワン株式会社

この定義より、BSPの役割はCPUやHWの仕様をBSPというFW*1で吸収すること、となります。アプリケーションはBSPが用意したAPIを利用することで、HWの仕様を気にせずメモリ確保やデバイスの利用ができるようになります。
また、「ハードウェアの初期化処理、メモリマッピング処理、~中略~などから構成されます。」とあり、この範囲は非常に広いです。例えば、コンフィギュレーションコードとデバイスドライバの開発は、基板上に載っているデバイス毎に必要になるため、各デバイス毎の知識が必要になります。基板上に多くのデバイスが載っていたら、その分だけ必要な知識は増加します。デバイスの知識獲得として、一般的なデバイスであれば仕様や制御方法などをWeb上で調べることができます。しかし、ある製品に向けた特注デバイスの場合、仕様はWeb上にはなくそのデバイスベンダーが提供する情報が頼りとなります。ただし特注のため、仕様書の記述ミスやそもそもHWに不具合が残っていることなども想定されます。
以下にBSPの位置づけイメージ図を示します。
f:id:yuji-tanaak:20180916100333p:plain

こちらのサイトでもBSP含むシステムのイメージ図が掲載されております。どのようなイメージ図が妥当なのか捉え方によって異なると思います。BSPはOSの一部とも考えられるような気もします。

BSPの開発

製品開発においては、HW、FW(BSP)、SW(アプリケーション)はそれぞれ前モデルの環境をベースとすることが多いです*2。そのため、変更差分に注目する開発となります。しかし、前モデルの環境をベースにするといっても、基板上にこれまでなかったデバイスが載る場合、そのデバイスに対するBSP開発という観点では新規開発となります。そのため、BSP開発では派生開発と新規開発の両方の側面を持っています。
f:id:yuji-tanaak:20180916100640p:plain

おわりに

BSPに関してまとめました。ポイントとしては、BSPはHWの各デバイス毎に機能を開発すること、派生開発と新規開発両方の側面を持っていることの2点と考えます。
Packageと名前がついているため、各デバイス毎に対応し包括的な機能を提供するのは当然なのですが、開発としてはすげぇ大変だよなぁと思う次第です。だからこその面白さや開発の価値があるとも思います。



*1:ハードウェアを制御するソフトウェア

*2:いわゆる派生開発となる