多くの人がすでにそうしているので、これは理論的な質問ではありませんが、基本的なプロセスに関する情報はほとんどありません。
私はカスタムMIPSベースのプロセッサを開発しており、ここでUbuntuを実行したいと思います。命令セットとコンピュータアーキテクチャ自体を設計した後、次に何をすべきかは非常に混乱しています。カーネルとオペレーティングシステムを実行できるはずですが、これらすべてがどのように結合されますか?
現在、私は適切なアセンブリ言語を生成するためにLinuxカーネル用のコンパイラを設計することに取り組んでいます。これは良いアプローチですか?次は何をすべきですか?
答え1
アーキテクチャの面では、単純な命令セットとコンピュータアーキテクチャ以上のものが必要です。また、以下が必要です。
- いくつかのタイプのCPU(シミュレータ、FPGA、シリコン...)。
- プロセッサの起動方法:起動時にプロセッサが実行されるメモリにオペレーティングシステムを配置する方法。ほとんどのプロセッサは、ある種のフラッシュメモリを開いて分岐するか、一部の記憶媒体の一部のコードをRAMにロードして分岐するROMに格納されたコードで起動します。次のステップはオペレーティングシステムのブートローダです。
- 一部の周辺機器 - 少なくともRAM、一種のメモリコントローラ、および一部の入出力デバイス。
ソフトウェアに関しては、次のものが必要です。
- コンパイラ。 MIPSアーキテクチャを使用しているので、既存のMIPS用コンパイラで十分です。命令セットがデフォルトのMIPS命令セットを拡張する場合(たとえば、追加のレジスタを使用)、それに応じてアセンブラを拡張する必要があるかもしれません。
- カーネル。 MIPS用のLinuxがすでに存在しています。アーキテクチャにブート、MMUなどのカスタム項目のサポートを追加する必要があります。
- ドライバー。既製以外のすべてのコンピュータアーキテクチャ用のドライバを作成する必要があります。
- ブートローダー。通常、ブートローダにはいくつかのアーキテクチャ関連のエントリがありますが、たとえばマシン定義を追加して既存のブートローダに必要なサポートを追加することもできます。USBブート。
- これだ。カーネルとブートローダがあると、ユーザーエリアプログラムは正常に動作します。既存のディストリビューションからカーネルとブートローダをパッチしてクロスコンパイルし、PCにインストールします。 UbuntuはMIPSをサポートしていませんが、ダーバンする(ミップスまたはミップセルバイト順序によって異なります)
答え2
と、この仕事に多くの努力を傾けたようですね(私に聞いてみると、長年のプロジェクトのように聞こえますね)。あなたは実際にそのすべてをしないでしょう、そうですか?
はい、次のステップは、ある種のコンパイラを作成(またはより良い:ポート)することです(まず、現在PCにあるクロスコンパイラを使用したいと思います)。
私の考えでは、gccのような既存のコンパイラを移植する方が簡単な作業かもしれません。 (すでに多くのアーキテクチャをサポートしていますが、私はそのようなことをしたことがありません。おそらくGCC内部文書お手伝いします)。
コンパイラをインストールして実行したら、基本的なマイクロコントローラに似たプログラム(たとえば、データポートのLEDの点滅など)といくつかのテストプログラムを試して、すべてが期待どおりに機能していることを確認します。
次のステップは、最終的にカーネルをロードするブートローダを実装することです。あなたのアーキテクチャがBIOS/EFIなどを使用するかどうかはわかりませんが、ブートローダを設計するときに考慮すべきもう1つのことです。
その後はカーネルに入る順番です。最小限のカーネル構成から始めて実行してみてください。カーネルをアーキテクチャに移植する必要があります(すべてのアーキテクチャ依存ヘッダ構成、ハードウェアにアクセスするためのモジュールを作成し、シェルにアクセスできるようにシリアルドライバなどを含む)。これは再びかなり広範なプロセスです。
注:あなたのアーキテクチャにメモリマッピングデバイスがあることを願っています。そうでなければ、後で深刻な問題に直面するでしょう(調査しないと)。µClinuxmmuのないカーネルを実行できますが、デスクトップ全体のOSを実行できるかどうかは深刻です。
組み込みデバイスで実行されているAndroidまたはOpenWRTカーネルを見たい場合もあります。
カーネルが移植されると(直接移植したい場合は数年後)、ユーザースペースは引き続き使用されます。まず、Bigbox、コンパイラ、openssh、cronなどのいくつかの基本的なUnixツールを移植しました。
次に(システムに動作するGPUが接続されていると仮定)、GPUドライバを作成し、Xサーバー(または代替ウェイランド)。 Ubuntuデスクトップを起動して実行するには、2D / 3Dアクセラレーションを実装する必要があることに注意してください。
結局のところ、作業はできるだけ多くのUbuntuパッケージをプラットフォームに移植することです。
要約すると、あなたはCPUアーキテクチャの開発に多くの時間を費やしましたが、今では本格的なLinuxディストリビューションの実行を始めました。実際に行うのではなく、プロセスの本を書いてほしい。なぜなら、今後数年間、過剰な作業量に備えなければならないからです。
しかし、プロセスの簡単な概要を教えてくれることを願っています。 (そして重要な内容を見逃さなかったらいいです。) 幸運を祈ります。