夢を見ていると言えます。主な問題は RAM の制限です。
2004 年、Eric Beiderman は 2.5MB の RAM でカーネルを起動することに成功しました。 の機能が削除されました。
ただし、これは x86 での話であり、ARM について話しているのです。そこで、「汎用性の高い」プラットフォーム (最も単純なものの 1 つ) のために、可能な限り最小の ARM カーネルを構築しようとしました。 すべてをオフにしました 探しているもの(USB、WiFi、SPI、I2C)を含む構成可能なオプションを使用して、どれだけ小さくなるかを確認します。さて、ここではカーネルについて言及しているだけで、これには何も含まれていません ユーザー空間コンポーネント。
良いニュース:フラッシュに収まります。結果の zImage は 383204 バイトです。
悪いニュース:256kB の RAM では起動できません:
$ size obj/vmlinux
text data bss dec hex filename
734580 51360 14944 800884 c3874 obj/vmlinux
.text セグメントは利用可能な RAM よりも大きいため、カーネルは圧縮を解除できず、ブート用のメモリを割り当てることも、有用なものを実行することもできません。
回避策の 1 つは、システムがサポートしている場合 (つまり、フラッシュから直接命令をフェッチできる場合)、その場で実行サポート (CONFIG_XIP) を使用することです。ただし、これは、カーネルが圧縮されていない状態でフラッシュに収まる必要があり、734kB> 700kB である必要があることを意味します。また、.data セクションと .bss セクションの合計は 66kB で、他のすべて (つまり、カーネル内で動的に割り当てられたすべてのデータ構造) のために約 190kB が残ります。
それはまさにカーネルです。必要なドライバーやユーザースペースがありません。
そうです、もう少し RAM が必要になります。
IMO、あなたは夢を見ています。特に USB、ネットワーキング、および 802.11/wifi では。あなたにそれができるとは思えませんし、M3 は本当に無理です。
OpenWRT は、私が知っているネットワーク用の最小かつ最も組み込み可能な Linux ディストリビューションの 1 つであり、特に Wifi では 2MB 以下にするのは困難です。
それが本当に必要な場合は、ハイエンドの ARM チップを検討するか、現在ルーターで一般的に使用されている Broadcom または Atheros SoC を使用してください。
プロセッサに MMU はありますか?そうでない場合は、 http://www.uclinux.org/ を参照してください。これにより、言及されているよりもはるかに小さいカーネルサイズが得られるはずです。一部の CortexM3 Atmel チップで動作するため、あなたのチップでも動作する可能性があります。私はそれを使用していないので、これは推測にすぎません.Doh、私はちょうどその質問が更新されているのを見ました-MMUを持っていない場合(おそらく持っていない)、「通常の」カーネルを使用できず、 ucLinux を使用する必要があります。