カスタムOSを作成するためにLinuxソースコードの変更を開始する方法 [閉まっている]


14

ソースコードを変更することでLinux(Ubuntuなど)をカスタマイズし、まったく新しいOSを作成できると聞いたことがあります。Linuxカーネルのソースコードをwww.kernel.orgのWebサイトからダウンロードしました。しかし、それを見ると何も理解できません。非常に多くのディレクトリ、ファイル内のファイルがあります(1つの大きなプログラムがあると思います)。私は大学のプロジェクトとしてこれを行いたいし、必要な変更を加えてLinuxに貢献したい。しかし、サイトのいくつかでこの質問をした後、彼らはLinuxのソースコードが非常に大きいと言った。minixを試すことができます。今、私は非常に混乱しています。

(ソースコードを変更してLinuxをカスタマイズする)この旅をどのように始めるべきかについて、いくつかの初心者レベルの本とともに、必要な手順を詳しく説明してください。


あなたの目標は何ですか?どのように貢献したいですか?
スパイダーマン

(Linux)ソースコードを変更して独自のカスタムOSを作成し、OSがどのように機能し、また楽しくなるかを学ぶために
-dubex

Linuxという名前のカーネルはGnu / Linux(Ubuntu、Debian、RedHat、Suseなどdistrowatch.com)ではありませんが、ほとんどの人は混乱してLinuxという用語をGNU / Linux + X11 +を意味するために使用します。ただし、Linuxはカーネルの1つにすぎず、GNUやその他のオペレーティングシステムで使用できます。Ubuntuなどを変更する場合は、Linuxという名前のカーネルを変更することと同じではありません。
ctrl-alt-delor

回答:


29

unix.stackexchange.comへようこそ!

あなたの質問に対する簡単な答えはありません。私よりもはるかに優れた人々が、Linuxカーネルとオペレーティングシステム全般に関する本をすべて書いています。

プロジェクトの範囲について:オペレーティングシステムの記述は簡単な作業ではありません!Minixのような意図的に最小限のOSであっても、かなり複雑です!Linuxについてのアイデアを得るには、これまでに作成したCプログラムについて考えてください。平均的な大学の授業は、せいぜい数千行のCである傾向があります。私の最終年のプロジェクトは約30〜35,000行のC ++だったと思います。Linuxカーネルは約13,000,000行のCコードです。

すべてが別々のファイルになっているのはなぜですか?かなりのプロジェクトは、ロジスティックおよび実用上の理由から、個別のファイルに保存されます。13,000,000行のファイルをエディターに読み込むことを検討してください!Linuxのような巨大なプロジェクトに取り組む前に、「なぜ複数ファイルなのか」という質問自体が答えるところまでCスキルを磨く必要があります。また、単に書くだけでなく、Cコード読むことができるはずです。(最初に見えるよりも難しい)

あなたは間違いなくCに非常に熟練しているはずです。カーネルは何千人もの人々によって維持されており、それぞれの個人的なCイディオムを理解するために呼び出されます(かなり厳格なカーネルコーディング標準の範囲内ですが、独自の問題解決スタイル)。

C fuを入手したら、オペレーティングシステムを理解していることを確認してください。これは、コードを理解するのに役立ちます。Linuxのすべてが必須というわけではありません。適切なカーネルはかなり小さいです!それが膨らんでいるもの:

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

すぐに見つかる問題の1つは、これらのコンポーネントを取り外したり、変更したり、再び接続したりするのがそれほど簡単ではないことです。多くの相互関係があります。要するに、カーネルのビットを変更するのは難しいです。

人々があなたにMinixを提案した理由は簡単です:それは完全なオペレーティングシステムですが、Linuxのような複雑なシステムのニーズによって負担されません。コードは小さいですが、それでも完全な機能を提供します。結局のところ、Linuxの最初のバージョンはMinixに触発されました。

確かに、最近ではMinixのハードウェアサポートが少なくなっています。だから何?それは恩恵です!現代のコンピューターは非常にうまく仮想化されています。それを利用して、Minixを実行するVMが非常に軽量であるため、開発が困難になります。

プロジェクトでオペレーティングシステムを構築する場合は、Minixを勉強することから始めるよりも悪いことがあります。また、Minixが同行するために書かれた本「Andrew TanenbaumのModern Operating Systems」を購入して読むこともできます。

また、ターゲットを設定し、用語を正確に定義する必要があります。OSの独自の定義がMicrosoft(GUIと完全なソフトウェアスイートを備えたOS)である場合、非常に長いプロジェクトに参加する可能性があります。結局のところ、1960年代以来、何十万人もの人々が私たちを今の場所に連れて行ってくれました。

最後に、コンピューターサイエンティストの戦いの叫びを思い出してください。'(もちろん、学習の際に例外を設けたいと思います。そして、楽しみのために:))


1
[リンク](www.linuxfromscratch.org)が私の夢を完全に満たします...私の質問に興味を示してくれてありがとう
-dubex

LFSは、POSIXシステムのユーザー空間がどのように機能するかを学ぶのに最適です。私の知る限り、それはLinux固有であるため、(独自のカーネルを作成するときのように)異常な方向にカーネルを変更することは扱いません。ただし、カーネルがPOSIXから離れると、ユーザー空間は互換性がなくなり、移植または再実装する必要があるため、それは重要です。
アレクシオス

誤解して申し訳ありません...しかし、私は自分のカーネルを作成するつもりはありませんでした(私はあまり才能がないので:))。ソースコードを変更して、他のソースとは異なるように見えるようにし、それが自分の創造性のように見えるようにします。例えば:linux(たとえばubuntu)が音声認識ソフトウェアがインストールされた状態で起動しているとき、画面上にサウンド(私が作ったもの)を含むある種のアニメーションが必要です。もう一度ありがとう。
ダベックス

1
その場合、異なるオペレーティングシステムではなく、独自のLinuxディストリビューションを作成しています。LFS そのための適切なツールです。幸運を!
-Alexios

1
@Alexios、非常に良い説明的な回答、ありがとう。
0xAF

7

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


4

定義する必要がある最初のことは、「OSにもたらす変更は何か」だと思います。これを決定するまで、あなたは本当にどこにも行かないでしょう。学習の「ワンパス」はありません。

さらに、OSの意味をより明確に定義する必要があると思います。Ubuntuのソースコードの大部分(大部分)はLinuxの外部にあります。Linuxはカーネルのみであり(特に学界ではオペレーティングシステムと呼ばれることもあるため、混乱が生じます)、したがって、次の「単純な」ジョブを持っています。

  • リソースの管理。
  • ハードウェアとの通信。

コアユーザーランドユーティリティ(多くの場合utilsと呼ばれる)、GUI、ディストリビューションの基本的なアプリなど、他の変更は異なるレベルで発生します。

ただし、カーネルをハックする方法を学習する準備が整っている場合は、この質問、このサイトで最も投票数の多い質問から始めてください。


質問をするのがそれほど具体的ではないことを申し訳ありません...しかし、実際には、これらすべてについて詳しくはわかりません。実際には、Linux(ubuntuなど)が起動しているときに画面上に何らかのアニメーション(サウンド付き)が必要です...このすべてのフィールドを調査し、特定のフィールドにさらに移動する方法について教えてください(たとえば、ハードウェアと通信するgui )
...-ダベックス

始まる@dubex プリマスサウンドを再生するため、Linuxのライブラリで、ルック。SDL_mixerは簡単なものかもしれません。
sourcejedi

2

これは少し重要ではないかもしれませんが、Linuxカーネルについて学び、開発を開始したい場合は、カーネルの初心者を実際に調べる必要があります。これは、(Alexiosが優れた方法で行ったように)カーネルメカニズムについての洞察を提供するサイトですが、(カーネル管理者と呼ばれる)処理する小さなタスクを選択することもできます。それは学ぶための素晴らしい方法であり、私はそれを強くお勧めします!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.