問題タブ [bootloader]

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.

0 投票する
1 に答える
1603 参照

operating-system - ブートローダーの背後にある理論

osdev からいくつかのブートローダーをダウンロードし、カーネルを正常にロードしました。しかし、今はブートローダーの背後にある理論を学びたいと思っています。システムが起動する理由と、ブートローダー コードの背後にあるすべてを知りたいです。リンクまたは書籍へのリンクを教えてもらえますか? 前もって感謝します。システムはx86です。

0 投票する
2 に答える
425 参照

assembly - アセンブリコードの説明

私はアセンブリを学び始めました。私はこれらの線に出くわしました。

宣言「bpbBytesPerSector:DW512」の最初の行で混乱しています。ここで、DWは定義語だと思います。したがって、DW 512は、512ワードの定義が1024バイトを意味することを意味します。これで、ラベルは「bpbBytesPerSector」になります。セクターあたりのバイト数は512である必要があります(これは私が思うことです)。同様に、次の2行も理解できません。私はこれについて完全に混乱しています。誰か説明してもらえますか。よろしくお願いします。

0 投票する
5 に答える
3833 参照

assembly - アセンブリコードの説明

私は組み立てを学び始めました。私はこれらの線に出くわしました。

ここでコードの2行目で、コードセグメントはスタックにプッシュされます(私はこれだと思います)。私はそれを多くのコードで見ました。なぜこれを行う必要があり、DS = CSをどのように保証するのですか?3行目でDSがスタックから飛び出します(私はこれだと思います)。なぜそれが行われるのですか?スタックから飛び出しているということは、以前はスタックにプッシュされていたことを意味します。そのためのコードはありません。誰かが私にこれをすべて説明できますか?前もって感謝します。

0 投票する
3 に答える
7984 参照

assembly - BIOS割り込みを介してリアルモードでキーボードを処理する方法は?

計算機を実行できるオペレーティングシステム用にコーディングする必要があります。これはデスクトップ計算機のようなものです。このために私はブートローダーの第2段階を完了した壊れたとげのオペレーティング開発シリーズを読んでいますブートローダーはリアルモードです。この後、作者はプロテクトモードについて説明しています。プロテクトモードは使いたくない。そのための時間がありません。したがって、BIOS割り込みを使用して、リアルモードで計算機を記述したいと思います。出来ますか?ブートローダーの第2ステージで記述できると思います(わかりません)。つまり、カーネルを使用する必要がない(わかりません)。BIOS割り込みを使用してキーボードを処理する方法がわかりません。誰かが私にこれで私を助けるリンクを提供できますか?そして、私が上で仮定したwhatevetの何かが間違っているなら、私を訂正してください。よろしくお願いします。

0 投票する
2 に答える
305 参照

assembly - ブートローダーに関する質問

私は、ブートローダーについて研究するために、壊れたとげのあるオペレーティング開発シリーズをフォローしています。このページでは、次の3行のコードがあります。

2行目では、彼はフロッピーで7c00にBIOSをロードしました。なぜ0000にしないのですか?フロッピーイメージのブートローダーをどこに保存するかを確認しました。。ここでも同じことが言えます。しかし、その理由は説明されていません。誰かが私にこれを説明できますか?前もって感謝します。

編集:後のチュートリアルの同じサイトでコードが次のようになっているため、混乱しています:

そしてメインで

ここで、なぜ彼はorg 0を使用したのですか?そして、なぜ彼はそのアドレスをすべてのレジスタにコピーしたのでしょうか。これがばかげた質問ならごめんなさい。私はアセンブリプログラミングに非常に慣れておらず、ブートローダーについて読み始めたばかりです。

0 投票する
3 に答える
3542 参照

c - アプリケーションとブートローダー コードのベクトル テーブルの問題

ブートローダー コードにあるベクトル テーブル (割り込みテーブル) に問題があり、アプリケーション コードからアクセスできませんでした。主な問題は、ISR のアドレスがブートローダーとアプリケーション コードで異なることです。そのため、アプリケーションが起動しません。アプリケーション コードを作成して、Vector テーブルから正しい ISR ルーチン アドレスを見つける方法について何か提案はありますか??

HCS08とコードウォリアーを使用しています。プログラマーが FLASH にロードし、さらに USB 経由で S19 ファイルをロードする USB ブートローダです。つまり、私の FLASH には 2 つのプログラムが横たわっています。

0 投票する
9 に答える
955 参照

algorithm - ゼロからのOS

タイトルは私の質問の一部ですが、2番目の部分はそれほど単純ではありません。最初の部分:独自のオペレーティングシステムを作成したいとします。どうすればそれを行うことができますか?ブートローダーを作成する必要があることを理解しています。しかし、私はそこからどこに行きますか?別のプログラムに送信する必要がありますが、そのためには、そのプログラムがすでに存在している必要があり、メモリ空間のどこにあるかを正確に知る必要があります。ヒント/チュートリアルはありますか?

2番目の質問。私は現在メモリ管理を研究しており、配置アルゴリズムのより良い実装についての理論があると思いますが、理論以外で実際にテストする方法はありません。OSを作成できるようになったら(これは将来の参照用です)、実際にメインメモリをいじって、プロセスを移動するにはどうすればよいですか?

PS:また、独自のファイルシステムを作成する必要がありますか?

編集:現在のコメントを読んだ後、私が言ったことを修正したいと思います。「第二部はそれほど単純ではない」と言ったとき、それは言葉では悪い選択のようです。どちらも非常に難しい取り組みになることは承知していますが、それは私には関係ありません。私はただ新しいことを学ぶのを楽しんでいます。そして、私は誰かが私のためにチュートリアルを書くつもりはありませんでした。ただ私を正しい方向に向けるためです。

0 投票する
1 に答える
2873 参照

hid - PIC24ファームウェアブートローダーがロードされたプログラムを起動しない

これはこの質問に最適な場所ではないかもしれませんが、Microchipフォーラムを試しましたが、まだ回答がありませんでした。PIC24FJ64GB002を使用して構築したプロトタイプボードでHIDブートローダープロジェクトを動作させるように取り組んでいます。ボードで動作するようにサンプルのHIDBootloaderプロジェクトを変更し、ボードでも動作するようにサンプルのHIDMouseプロジェクトを変更しました。ブートローダーコードを使用してデバイスをプログラムすると、正常に実行され、Microchip Bootloader Windowsプログラムがデバイスを検出し、「デバイスが接続されています」と表示されます。しかし、マウスプログラムのhexファイルをデバイスにロードしようとすると、正常に完了したと表示されますが、マウスプログラムは実行されません。正しいリンカースクリプトを使用しているかどうかわかりません。

0 投票する
3 に答える
1805 参照

linux - ブートローダーからシリアル番号をキャッチ

U-Boot環境に書き込まれたシリアルナンバーをキャッチしたい。

ブートローダー:U-boot 1.2 カーネル:2.6.24 ツールチェーン:arm-linux-gcc-3.4.1 rfs:busybox-1.9.2

どうすればこれを行うことができますか教えてください。

どうもありがとう。

0 投票する
2 に答える
1066 参照

kernel - DのOSカーネル:一部の埋め込み文字列が機能しない

これは答えるのがかなり難しい質問だと思います。主な理由は、間違っている可能性のあるものが非常に多く、特定するのが難しいためです。しかし、私はできるだけ多くの情報を提供します。うまくいけば、それが役立つでしょう。

私はD言語とDigitalMarsDコンパイラを使用して独自のカーネルを書き始め、再配置可能なフラットバイナリを生成する方法を見つけるのに多くの問題を抱えた後、最終的に通常のPEファイルを生成するというアイデアを思いつきました。アドレス、およびそのすべてのヘッダーをバイト(NOPオペコード)0xC0000000に置き換えます。0x90これは完全にうまく機能し、16ビットアセンブリベースのブートローダーの助けを借りて、画面に物事を書き込んだり、ページングを設定したり、プロテクトモードに入るなどを完全にうまく行うことができました。

すべてが順調でした。つまり、カーネルで使用するためにDランタイムライブラリを移植することにしました。ライブラリのサブセットを抽出し、それを変更してアプリにコンパイルできるようにしました。次に、プログラムを実行しました。(注:ライブラリをまったく使用しませんでし た。私のコードは、起動後に実行される最初のコードでした。最初に発生したのは画面への印刷であり、その前にランタイムコードは呼び出されませんでした。)"Kernel"

AD配列(したがって、文字列は単なるaであるため、文字列char[])は、ポインタとサイズメンバーを持つ構造体にすぎないため、32ビットシステムでは8バイトの大きさになります。面白いことに、プログラムを実行すると、構造体のメンバーがゼロであることがわかりました。つまり、ポインターとサイズの両方がゼロでした。(ポインターの値と長さのメンバーを画面に出力することでこれを確認しました。どちらもゼロでした。)ランタイムのソースコードを削除するとすぐに(とにかく実行されませんでした)、正常に機能しました。 。

これを2つの可能性に絞り込みました。

  1. スタックが正しく設定されていませんでした。ランタイムライブラリがなくてもすべてが正常に機能するため、これを除外し、ファイルを逆アセンブルして、コードの前に他のコードが実行されていないことを確認しました。

  2. PEファイルセクションに何かおかしいことがあります。実行時のバージョンに2つのTLS(スレッドローカル)変数があることを確認しました。案の定、(スレッドローカルではなく)共有させたところ、コードは機能しました!ただし、別のファイルで記述したコードを呼び出したときに、コードで同じ問題が発生しましたkernel.d。スタートアップファイルである、のみが文字列で正しく動作しました。他のファイルでは、配列は再びゼロになりました。

さて、なぜこれが起こっているのかについて誰かが推測していますか?

さらに情報が必要な場合は、喜んで投稿します。

ありがとうございました!