web-dev-qa-db-ja.com

Linuxカーネルとユーザープログラムのみを実行する

オペレーティングシステムの代わりにプログラムをロードするシステムでLinuxカーネルのみを実行することは可能ですか?

LinuxカーネルでRaspberryPiを使用したいと思います。 Raspberry Piでサーバーとクライアントプログラムを作成しようとしています。このために必要なのは、ネットワークドライバーで動作するカーネルだけです。

Raspberry Piをオンにしたときに、自分のプログラムのみを実行したい。残りのオペレーティングシステムは必要ありません。

6
K K SAI

Linuxカーネルが起動すると、プログラム/sbin/initが実行されます。 (それは initrd または initramfs の後にあります)、場所はinitparameter で構成できます。 init プログラムには特別な役割があります。プログラムは永久に実行され続け(SIGKILLを使用しても強制終了されないようにする特別なルールがあります)、 孤立したプロセス を採用します。もちろん他のプログラムを起動(および監視)することになっています。

独自のプログラムをinitとして指定できます。その後、何を実行するかは完全にあなた次第です。

ただし、これを行うと多くの損失が発生します。たとえば、プログラムを提供しない限り、物理的なアクセスなしにデバイスを再構成することはできません(ネットワーク構成の変更やブートローダーの設定の変更など)。少なくとも最小限のツールセットを実行することをお勧めします。

  • BusyBox 、これはinit実装、シェル、その他のコマンドラインツールを含むシステムツールのスイートです。いずれにせよ、BusyBoxツールの少なくともいくつかが起動時にネットワークをセットアップすることをお勧めします(ifconfigroute、…)。
  • IPtables 、BusyBoxに含まれていない基本的なファイアウォール構成ツール。
  • Dropbear 、SSHサーバー。これにより、デバイスにリモートでログインできます。
  • おそらく 他の小さなツール 、特に [〜#〜] ntp [〜#〜] クライアント(時計を設定するため)および dnsmasq 、 DNSキャッシュ。

これらのツールはすべてフットプリントが小さく、約10MBのRAMおよび3MBの圧縮ストレージに快適に収まります。これはRaspberryPiでは無視できます。RPiで削減しても何も得られません。 Linuxカーネルを使用して1つのプログラムを起動するだけで、非常に限られたデバイスに役立つ場合がありますが、RPiはそれより少なくとも2桁上です。

最も簡単な方法は、多くの 組み込みLinuxディストリビューション のいずれかを使用することです。または、 Buildroot などのツールを使用してカスタムシステムを構築することもできます。これは小さなシステムには便利ですが、RPiには少しやり過ぎです。