問題タブ [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 - 生のバイナリファイルを実行するための開始アドレスの設定
ブートローダーは2つのステージに分かれています。最初のステージはアセンブリで記述され、2番目のステージのみをロードし、2番目のステージはCにあります。Stage1はCのコードをアドレス0x0500:0にロードし、そこにジャンプします。Stage2は「hellomessage」を書き込んで停止する必要があります。
開始アドレスを次の人が作成した生のバイナリに設定するさまざまな方法を試しました:(しかし何も機能しませんでした)
リンカースクリプト
たぶん私はobjcopyで削除すべきではない何かを削除します。
では、どうすればこのstage2.binを実行できますか?
私が理解しているように、生のバイナリが16しか許可しない場合、32ビット長の命令を使用してCコードを記述しますか?
PSパラメータ-set-start(objcopy)はエラーを返します:無効なbfdターゲット。出力ファイルがバイナリだからですか?
回答ありがとうございます。
operating-system - メインシステムコールにぶら下がっているQemu
私はPintosプロジェクトに取り組んでいました。そして、適切な優先順位スケジューリングのために優先順位寄付メカニズムを実装しているときに、QEMUエミュレーターがハングアップしました(画像を添付しました。ピントのダンプは次のとおりです)。printfステートメントをデバッグして挿入しようとしましたが、リモートホストを介してqemuをデバッグしているときに、mainに入るとすぐに再びハングアップしました。誰かが私にこれらすべてのトラブルシューティングを行う方法を教えてもらえますか?それ以外の場合は、コード全体とqemu、およびその間のすべてを再インストールする必要があります。
ピントからのダンプ:
QEMUでエミュレートされたピントス
x86 - pteの変更は、通常のメモリアクセスと同じページテーブルを通過しますか?
通常のメモリアクセスはページテーブルを経由して、仮想アドレスから物理アドレスへの変換を行うことを知っています。しかし、pteの変更はどうですか?OSがプロセスのページテーブルエントリを変更したいとしますが、プロセスのページテーブルも通過しますか?言い換えると、ページテーブルにそれ自体を指すエントリがありますか?
x86-64 - AMD の MP 仕様、コードを使用して AMD に関してマルチプロセッサを起動する方法
マルチプロセッサをサポートする OS を作成しようとしていますが、AMD のマルチプロセッサをブートストラップする方法がわかりません。AMD のホームページを検索して MP 仕様を見つけましたが、見つかりませんでした。リンクを教えてもらえますか?住所?
c - クロス コンパイラ用の newlib のビルド中に「gettimeofday」の型が競合する
newlib 1.20.0をビルドしようとしている間...私はこのチュートリアルhttp://wiki.osdev.org/OS_Specific_Toolchain#newlib.2Flibc.2Fsys.2Fmyosに従いました
しかし、newlib をビルドしようとすると、次のエラーが発生します。
gettimeofday 宣言の sycalls.c:
time.h :
競合するタイプとは何ですか??助けてください....どんな助けも大歓迎です...
assembly - UEFI で OS を書く
最近は学校のせいであまりコーディングをしていませんでしたが、OS 開発の仕事を再開したいと思いました。しかし最近、EFI が BIOS の代わりになるという話を耳にしました。BIOS ではなく EFI を使用するプラットフォーム用の OS を開発したいと考えています。とはいえ、どこから始めればいいのか分からず困っています。誰かが私を正しい方向に向けることができますか? OS開発にとってEFIが何を意味するのかを説明し、使用できるテスト環境(できれば仮想)を教えてください。率直に言って、EFIが何であるかはよくわかりません。また、ARMアセンブリを調べるのに時間を費やす必要がありますか? 私は x86 Assembly を知っていますが、それも時代遅れになっているように感じます。私は本当に迷っており、あなたの意見を聞きたいです。
ありがとう
assembly - プロテクトモードにはるかにジャンプした後のGPF
ブートローダーとしてGRUBを使用して数週間作業した後、それらがどのように機能するかを理解できるように、自分でロールする必要があると判断しました。Brokenthornのチュートリアルをインターネット(現在はhttp://www.brokenthorn.com/Resources/OSDev9.html)で見つけました。プロテクトモードに切り替えようとすると、CPUハードウェアがファージャンプ後にリセットされます。私はbochsv。2.6を実行しています。
これは私の第2段階のブートローダーです(問題が解決すると思ったので、チュートリアルのほぼコピーですが、そうではありません)
私のGDT:
これは、このコードを試したときにbochsが返すエラーです。
この問題を解決するにはどうすればよいですか?
assembly - ブートローダーのクラッシュ
現在、ブートローダーを開発していますが、問題があります。
私はBochsを使用してブートローダーをテストし、ブートローダーをコンパイルしてディスクイメージを作成します。
これはbootloader.asmです:
そしてpostmbr.asm:
これはBochsのクラッシュログです。
そしてこれはBochsの設定ファイルです:
何が悪いのかわかりません。他のプラットフォームでブートローダーをテストしていません。
c++ - LibC osは存在しますか?
本質的にlibcだけの埋め込み可能なOSについて聞いたのを覚えています(多分それはc ++をサポートしていました)。カーネル、パイプ、またはOSに期待するその他のものはありませんでした。ウィキペディアで探してみましたが、リストに表示されませんでした。
そのようなOSは存在しますか?VMの外部と通信するために端末のみまたはC/C ++ +(tcp)ソケットのいずれかをサポートするOSはありますか?それはおもちゃとして私にとって役立つでしょう。
x86 - IA-32 での自己 IPI の目的
IA-32 アーキテクチャで、プロセッサがプロセッサ間割り込みを自分自身に送信する目的は何ですか?
Intel IA-32 Architecture Software Developer's Manual、Vol。3、Ch。10.1:
IPI は、ソフトウェア自己割り込み、割り込み転送、またはプリエンプティブ スケジューリングに使用されます。
しかし、プロセッサが INT 命令で自分自身に割り込むこともできるのに、なぜセルフ IPI を使用するのでしょうか? この機能は冗長なようです。