私はbuildrootを使用して、組み込みデバイスで実行されるアプリケーションコードを書くことができるカーネル、ルートファイルシステム、およびクロスコンパイラを正常に作成しました。現在、デバイスドライバを書く必要はなく、どうすればいいのかわかりませんが、今後は必要になるかもしれません。研究では、カーネルAPIがバージョン間で変更される可能性があり、ユーザーレベルのアプリケーションの作成とは異なり、デバイスドライバの作成はカーネルのバージョンによって異なることがわかりました。基本的に私は知りたいです:
- 上記の内容は正しいですか?
- 使用するカーネルのバージョンを決定する際にどのような要素を考慮する必要がありますか?
私がこの質問をする理由は、私がこのトピックについて読んだすべてのもの(そして組み込みLinuxコースを受講したもの)でカーネルの2.6.xバージョンに言及しているからです。 3.6.11カーネルを使用して組み込みシステムを構築していますが、なぜコースや文献でこれらの以前のカーネルを参照しているのか疑問に思います。以前のバージョンのカーネルを使用するとどのような利点がありますか、それとも最新のバージョンを使用するとどのような欠点がありますか?
答え1
3.xは2.xの連続です。 Linusはかつてそのバージョンの「x」部分が大きすぎると考えました。一般的に言えば、おそらく次のようなラベルが付いているかなり最新のカーネルが必要です。「長い」。アプリケーションによって多くの部分が異なります。カーネルのリモートセキュリティの脆弱性は非常にまれですが、ローカルの問題はより一般的です。
答え2
カーネルを選択することは制約の問題です:
- カーネルは、実行中のハードウェア(NICドライバなど)を確実にサポートするのに十分な新しいものでなければなりません。
- カーネルは、使用したいソフトウェア機能(iptablesなど)を確実にサポートするのに十分新しいものでなければなりません。
- カーネルはできるだけ多くの脆弱性を排除できるほど新しいものでなければなりません。
- カーネルは信頼性が証明されるほど長くなければなりません(「最先端」という言葉があります)。
- カーネルは長期間更新を受けることができるシリーズでなければなりません(一度配布されたシステムが更新される可能性がない場合はあまり問題ではありませんが、#4と#3をより深刻に受け入れる必要があります)。
リストを見ると、実際の要件を満たすカーネルのリストが非常に小さい傾向があるため、ソリューションが明確になることがよくあります。
答え3
最新の安定カーネルは利用できませんか?デバイスドライバの古いソースコードがある場合は、デバイス名が一致することを確認する必要があると思います(例:/dev/eth0
- /dev/enp2s0f0
>これがなぜ良いのかわかりません)。