カスタムオペレーティングシステムを作成するためのLinuxソースコードの変更をどのように開始しますか? [閉鎖]

カスタムオペレーティングシステムを作成するためのLinuxソースコードの変更をどのように開始しますか? [閉鎖]

ソースコードを変更してLinux(Ubuntuなど)をカスタマイズし、まったく新しいオペレーティングシステムを作成できると聞きました。 www.kernel.org WebサイトからLinuxカーネルのソースコードをダウンロードしました。ところがいざ見たら何も理解できませんね。ファイル内のディレクトリ、ファイルが多すぎます(大きなプログラムがあると思いました)。私はそれを大学のプロジェクトとして完了したいと思い、また必要な変更を通してLinuxに貢献したいと思います。ところが、一部のウェブサイトでこのような質問をした後、Linuxのソースコードが途方もないと言いました。ミニックスを試してみてください。今私は混乱しました。

このレッスンを始める方法(Linuxをカスタマイズするためのソースコードの変更)と必要な手順の詳細については、初心者レベルの本を提案してください。

答え1

unix.stackexchange.comへようこそ!

ご質問に対する簡単な回答はなく、遠く私よりも良い人は、通常、Linuxカーネルとオペレーティングシステムのトピックに関する完全な本を書いています。

プロジェクト範囲情報:オペレーティングシステムを作成することは小さな作業ではありません! Minixのような意図的に最小限のオペレーティングシステムでもかなり複雑です! Linuxに関するアイデアを提供するには、これまでに書いたCプログラムを検討してください。平均的な大学コースには、最大数千行のC言語しかありません。私の最後の年のプロジェクトは約30〜35,000行のC ++コードでしたようです。 Linuxカーネルには約13,000,000行のCコードがあります。

なぜすべて別々のファイルにありますか?論理的で実用的な理由から、大規模なプロジェクトは別々のファイルに保存されます。 13,000,000行のファイルをエディタにロードすることを検討してください。 Linuxなどの大規模なプロジェクトを始める前に、「なぜファイルが複数あるのか」という質問に答えることができるまで、C技術を磨く必要があります。また、できることが必要ですCコードを読む、ちょうど書くより。 (最初は思ったより難しい)

確かにCに上手でなければなりません。カーネルは何千人もの人々によって維持されており、各個人のCイディオムを理解する必要があります(もちろんかなり厳しいカーネルコーディング標準内では、しかしまだ誰もが独自のトラブルシューティングスタイルを持っています)。

Cfuを取得したら、オペレーティングシステムを理解していることを確認してください。これはコードを理解するのに役立ちます。すべてのLinuxが必要なわけではありません。コア自体は非常に小さいです!この腫れは何ですか?

  • さまざまなデバイス用の数千のハードウェアドライバ。
  • APIとドライバの作成を簡素化するためのさまざまなデバイスクラスの抽象化階層。たとえば、ファイルシステム用のVFS、入力デバイス用のイベントレイヤーなどがあります。
  • Linuxを実行するさまざまなアーキテクチャに対して、条件付きでコンパイルされたコードとファイルの量が驚くほど多くあります(すべてのLinuxシステムがIntel PCではない、一部信じられないあなたが期待するものとは異なります)。カーネルはこれらの違いを処理する必要があり、これはより多くのコードを意味します。

すぐに気付くことができる1つの問題は、これらのコンポーネントを取り出し、交換、再接続するのが簡単ではないことです。多くの相互関係があります。つまり、カーネルのビットを変更するのは難しいです。

人々がMinixを推薦する理由は簡単です。 Minixは完全なオペレーティングシステムですが、Linuxの複雑なシステム要件に負担をかけません。コードは小さいが、まだ完全な機能を提供します。結局のところ、Linuxの最初のバージョンはMinixに触発されました。

もちろん、今日のMinixはハードウェアのサポートが少ない。だから何?これは祝福です!最新のコンピュータは仮想化が非常に良いです。利点を活用してください。 Minixを実行しているVMは軽すぎるため、開発が面倒になる可能性があります。

あなたのプロジェクトがオペレーティングシステムを構築することであれば、Minixを勉強するよりも悪いことをするかもしれません。 Minixに付属の書籍を購入して読むこともできます。Andrew Tanenbaumの最新のオペレーティングシステム'。

また、目標を設定して用語を定義する必要があります。正確に。オペレーティングシステムの定義がMicrosoft(GUIと完全なソフトウェアスイートを備えたオペレーティングシステム)であれば、非常に長いプロジェクトに直面する可能性があります!結局、1960年代から数十万人の人々が私たちを今の位置に上がるように努めてきました。

最後に、コンピュータサイエンティストの戦いの叫びを思い出してください。ホイールを再発明しないでください!((もちろん、私たちは学習するときに例外を置くのが好きです。そして楽しみのために:))

答え2

確認する最初からLinuxプロジェクト。名前が示すように、これには独自のLinuxディストリビューションを構築するために必要なすべての詳細が含まれています。

答え3

最初に定義する必要があるのは、「オペレーティングシステムにどのような変化をもたらしたいのか」と思います。この決断をしないとどこにも手に入らない。学習には「シングルパス」はありません。

また、オペレーティングシステムの意味をよりよく定義する必要があると思います。 Ubuntuのソースコードの大部分はLinuxの外にあります。 Linuxはただコア、(時々呼び出しオペレーティングシステム、特に学界では混乱を招く)「シンプル」働く:

  • リソースを管理します。
  • ハードウェアと通信します。

他の変更は、コアユーザーエリアユーティリティ(しばしば呼ばれる)などの他のレベルで発生します。公益事業)、GUI、ディストリビューションの基本アプリケーションなど

しかし、まだカーネルをクラックする方法を学ぶ計画であれば、おそらく次のように始める必要があります。この問題、このサイトで最も投票された質問です;)

答え4

少し話題から逸脱しているかもしれませんが、Linuxカーネルを理解して開発を始めるには、実際に見てください。カーネルの新機能。このサイトでは、カーネルメカニズム(Alexiosのように)に関する詳細な情報を提供するだけでなく、作業する小さなタスク(いわゆるカーネルゲートキーパー)を選択することもできます。これは学ぶのに最適な方法であり、強くお勧めします!

関連情報