問題タブ [osdev]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - GCC4.6.2での不思議なスタックの問題
私は大学でPintosおもちゃのオペレーティングシステムに取り組んでいますが、GCC4.6.2を使用すると奇妙なバグがあります。システムコール引数をプッシュすると(インラインアセンブリでは3プッシュ)、いくつかの不思議なデータもスタックに表示され、引数の順序が間違っています。-fno-omit-frame-pointerを設定すると、奇妙なデータが削除されますが、引数の順序はまだ間違っています。GCC4.5は正常に動作します。どの特定のオプションがこれを修正できるか考えていますか?
注:問題は-O0でも発生します。
kernel - osdevを学習するのに十分な小さなカーネルはありますか?
osdevについてもっと知りたいです。そこで、osdevをより良くするために、他の小さなカーネルから学ぶことを考えました。osdevを学習するための良いカーネルはありますか?もちろん、ソースコードにアクセスして自由に変更できるように、GPLである必要があります。
osdev - PoCの空のOSはありますか?
楽しみのために、OSlessハードウェアで実行されるコードを書きたいと思います。VM(VMwareやvirtualboxなど)で実行されるコードを書くのは良いことだと思います。しかし、私は最初から始めたくありません。C++ランタイムを利用できるようにしたいと思います。読み取り/書き込みを可能にするもの(おそらくFAT32ファイルシステムコード)。テキスト用のグラフィックスと、画面上に描画するためのグラフィックスができる場合(ピクセルごと。sdlのサポートはボーナスですが、必須ではありません)。
必要に応じて、独自のスレッドを作成します。OSに必要な他のすべて(使用したいもの)を記述します。基本的なファイルシステム、gfx、キーボード/マウスのサポートが必要です。
dynamic - ランタイム ライブラリ ローダーの実装
Cライブラリさえ存在しない組み込みプロジェクトの1つのライブラリのように、dlopen()、dlsym()、dlclose()、dlerror()を書くことを考えていました(そのため、すでに独自のC / C ++を書いています)そのためのライブラリは、ここ www.libcaprice.com で見つけることができます)。しかし、私を悩ませているのは、この動的ライブラリ ローダーの実装です。http://www.sco.com/developers/devspecs/gabi41.pdfの論文を見てみましたが、再配置と GOT の初期化方法について頭を悩ませているようには見えません。
最初は、ライブラリを fopen() し、ELF ヘッダーを調べて、それが正しい動的ライブラリであることを検証し、dlsym() が使用されているときにいくつかのシンボルを検索するのは簡単だと考えました。これに関する問題は、ライブラリ自体、またはより具体的にはGOTを初期化する必要があることです。また、物事が特定の境界と配置内にあることを確認するために、いくつかの再配置を行う必要があります。
この機能のユーザー空間での実装をいくつか調べましたが、それらはかなり長く、複雑で、文書化されていないようです。したがって、私の質問は本当に次のとおりです。許可されたライセンス、MIT、またはパブリックドメインの下でライセンスされているdydlのスタンドアロンのオープンソース実装はありますか. そうでなければ、何もなく、自分で実装する必要がある場合、誰かが私がどこから始めればよいか正しい方向に向けることができますか?
Application V Binary Interface Specification をリンクしないでください。動的リンクとロードに関する部分は既に読みましたが、再配置の概念を理解できる方法で説明しているものはないようです。
osdev - メモリマップドI/Oアドレスはどこから来ますか?
私はいくつかの愛好家のOS開発をいじっていて、メモリマップドI/Oアドレスについて少し混乱しています。メモリマップドI/Oの概念全体を理解していますが、開発者がハードウェアを操作するためのアドレスを取得する方法を理解しようとしています。
アドレスはハードウェアベンダーによって指定されていますか、それともすべてのコンピューターの標準アドレスのようなものですか?たとえば、テキスト印刷用のVGAメモリはアドレス0xB8000から始まります。これはすべてのx86マシンの標準ですか?もしそうなら、誰がその基準を設定しましたか?たとえば、イーサネットカードと通信したい場合、通信に使用するアドレスまたはポートをどのように知ることができますか?
前もって感謝します。
debugging - Ubuntu 11.10 用のオペレーティング システム デバッガー
私は (Linux カーネルを構築するのではなく) オペレーティング システムの開発を行ってきましたが、最新の OS 用にデバッガーが必要になるところまで来ました。Bochs (Win 7 パーティションの下) を試しましたが、USB が認識されません (フォーマットされていないため、現在特定のセクターを読み取っています)。
Ubuntu 11.10 用のカスタム ビルド OS をデバッグできるデバッガーはありますか?
gcc - SSEレジスタのロード
OS開発クラスの宿題プロジェクトに取り組んでいます。1つのタスクは、割り込み時にSSEレジスタのコンテキストを保存することです。これで、コンテキストの保存と復元が簡単になりました(fxsave / fxsave)。しかし、私はテストに問題があります。同じサンプル日付をレジスタの1つに入れたいのですが、取得するのはエラー割り込み6だけです。コードは次のとおりです。
私は解決策をインターネットで検索しました。私が得たのは、それが効果的なアドレス空間と関係があるかもしれないということだけです。しかし、それが何であるかはわかりません。
cross-compiling - autotools: C コンパイラは実行可能ファイルを作成できません
OS X で x86_64-elf カーネルをビルドしています。ビルド システムは autotools です。OS X で x86_64-elf 用に gcc を正常にコンパイルしてクロスコンパイルしました。autotools から生成された構成スクリプトを実行すると、次のような問題が発生します。
だから私は config.log を見て、次のことを確認します。
これは完全に理にかなっています。関連するランタイムがないため、クロスコンパイラは実行可能ファイルを生成しません。しかし、コンパイラが実行可能ファイルを生成する必要はありませんし、望んでもいないので、ブートローダー用に適切にリンクします。これをチェックしないように autotools に指示するにはどうすればよいですか?
operating-system - 一般保護違反 (x86) で障害のあるアドレスを特定する
x86 で一般保護違反 (GP#13) の ISR を作成しようとしています。例外の原因となっている障害のあるアドレスを見つける方法について、インテルのドキュメントからはわかりません。ページ フォールト例外 (GP#14) の場合、cr2 レジスタがフォールト アドレスを保持していることを知っています。どんな助けでも大歓迎です。
operating-system - entry() は、エルフに設定したエントリ ポイントから別のアドレスに入る
最近OSについて勉強中です。そして、リアルモードをプロテクトモードに変更し、シンプルなカーネルをロードするシンプルなブートローダーを書きたいと思っています。
しかし、エントリーアドレスの問題がわかりません。
まず、ブートローダーを OS.img(qemu) の最初のセクターに配置し、次にカーネルを 2 番目のセクターから開始します。
カーネルの readelf の結果
は次のとおりです。エントリ ポイント アドレスは 0x800c です。
LMA と VMA は次のとおりです。
elf タイプのカーネルを読み取り、エントリ ポイント アドレスである entry() に入るブートローダの一部。
ただし、ブートローダーを逆アセンブルすると、entry() は次のように
なります
。 *0x800c ではなく、*0x8018 を呼び出します。
なぜこれが起こるのかわかりません。手伝っていただけませんか?