問題タブ [boot]
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.
boot - 起動後のレジスタの状態
x86 マシンでブートローダーに取り組んでいます。
BIOS が MBR の内容を 0x7c00 にコピーし、そのアドレスにジャンプする場合、レジスタの内容に標準的な意味はありますか? レジスターには標準値がありますか?
セグメント レジスタは通常 0 に設定されていますが、0x7c0 になることもあります。他のハードウェアレジスタはどうですか?
boot - 低メモリ(OS以前)を予約するにはどうすればよいですか?
背景:オペレーティングシステムを起動する前に、0xA0000未満のメモリを予約する必要があります。これを行うには、KiBで使用可能な低メモリの量である0040:0013 (または0x413)ワードを変更します。
ただし、Windowsおよびその他のオペレーティングシステムはE820h / INT15hを使用してメモリレイアウトを照会し、一部のBIOS:esはE820h /INT15hBIOS機能に対する0x413の変更を反映しません。したがって、必要に応じてE820h関数もフックする必要があります。
質問: OSの前に低メモリを予約する別の(より信頼性の高い)方法はありますか?または、INT15hをフックする以外のE820h / INT15hの結果を変更する他の方法(おそらくEBDAを突くことによって?)
perl - システムの電源が入っているかどうかを確認するにはどうすればよいですか?
ネットワーク経由でシステムの電源を入れるスクリプトを書いています。そして、他のホストでいくつかのコマンドを実行する必要があります。システムの電源が入っているかどうかを確認するにはどうすればよいですか?
私のプログラミング言語は Perl で、ターゲット ホストは RHEL5 です。
システムの電源がオンになり、OS がロードされたことを示すカーネル割り込みまたはネットワーク ブート情報はありますか?
[別のシナリオでは] 念のため、マシンの電源を手動でオンにするかどうかも考えていました。電源が入ったと正確に言われているのはいつですか。また、ネットワークコマンドの実行など、ネットワーク関連の操作のためにOSが完全に起動したと想定されるのはいつですか。システムがDHCP上にある場合、リモートシステムはどのようにしてこのマシンを検索しますか[MACアドレスを介して可能だと思います. しかし、私が間違っている場合]。
情報を逃した場合は、お気軽にお尋ねください。タスクを簡単にするための提案がある場合は、それらを表面化してください:)
ありがとうございます
linux - クイック ブート Linux をセットアップするための最良/簡単な方法
願わくば、これがまだ StackOverflow の傘下にあることを願っています!
妻のためにクイック ブート Linux ラップトップを作成しようとしています。本当に必要なのは、インターネットを閲覧することだけです (フラッシュやビデオなどで)。
このために作成されたディストリビューション、または高速化するための良い方法を示すガイドはありますか? 「使用していないものをカーネルから削除する」必要があると読んだことがありますが、それは私のスキルセットから少し外れています。
ありがとう!
accessibility - 視覚障害者は、起動エラーやその他の低レベル環境をどのように処理しますか?
私は、視覚障害者が Windows やその他のオペレーティング システムでコンピュータを使用できるようにするための、スクリーン リーダーや同様のソフトウェアが存在することを知っています。
OS インストーラーや BIOS セットアップなど、下位レベルの環境でどのようなサポートが利用できるのか興味があります。
solaris - OpenSolaris x86 をシングルユーザーモードで起動するにはどうすればよいですか?
最新の OpenSolaris は、通常の起動時に root ログインを許可しないように構成されています。シングルユーザーモードでのみ可能です。ただし、オンラインの多くの指示では、デフォルトの grub ブート引数の最後に「-s」を追加するように単純に指示されています。これにより、ブートの進行状況がグラフィカルに表示されたまま無限ループになり、シングル ユーザー モードのコンソールに入ることがありません。
vxworks - Workbench から PXE 起動可能なブートローダーを構築するにはどうすればよいですか?
Workbench から PXE ブート可能な VxWorks ブート ローダーをビルドしようとしていますが、うまくいきません。私の環境の概要は次のとおりです。
- VxWorks 6.6 + 最新のパッチ
- Workbench 3.0 + 最新のパッチ
- モンテビーナ BSP リリース 2.0/1
ターゲットは Dell Precision M4400 ラップトップです。成功せずに私がやっていることは次のとおりです。
- プロファイル
VxWorks Image Project
を使用して、Montevina BSP に基づいて Workbenchで新規作成します。PROFILE_BOOTAPP
- 次のコンポーネントをカーネル構成に追加します (それ以外の場合、ビルドは失敗します):
-INCLUDE_TIMER_SYS
-INCLUDE_PCI_BUS
-INCLUDE_PCI_OLD_CONFIG_ROUTINES
-INCLUDE_PENTIUM_PCI
- コンソール表示用のカーネル構成にコンポーネントを追加し
INCLUDE_PC_CONSOLE
ます (ターゲットにシリアル ポートはありません)。 - ビルド仕様を に設定し、次の
default_romCompress
名前の新しいビルド ターゲットを追加します。vxWorks_romCompress.bin
vxWorks_romCompress.bin
ターゲットをビルドすると、対応するファイルが作成されます。- ファイルに PXE パディングを追加します。
cat $WIND_BASE/vxworks-6.6/target/config/montevina/pxeBoot.bin vxWorks_romCompress.bin > vxWorks_romCompress.pxe
- TFTP サーバーの適切な場所にコピー
vxWorks_romCompress.pxe
し、ターゲットから PXE ブートを実行します。
この時点で、ターゲットは TFTP サーバーからファイルを正常にダウンロードしますが、そこで停止し、何も出力されません。コンソールには何も表示されません。
およびは、Workbench プロジェクトで正しく設定されているように見えます (これらは、それぞれ および の従来の config.h ファイルの設定と一致しRAM_HIGH_ADRS
ます) 。RAM_LOW_ADRS
0x00108000
0x003080000
bootrom.pxe
(Montevina BSP にはビルド済みのブート ローダーが同梱されていることに注意してください。これにより、私は PXE ブートに成功しました。ただし、ブート ローダーにいくつかのコンポーネントを追加する必要があります。従来の config.h メソッドではなく、Workbench 環境です。)
Workbench プロジェクトのカーネル構成に含まれるコンポーネントをミラーリングして、従来の config.h 設定に可能な限り一致させることも試みましたが、成功しませんでした。これらは追加されたコンポーネントです (これらの依存関係に加えて):
INCLUDE_PLB_BUS
DRV_NVRAM_FILE
INCLUDE_GENERICPHY
DRV_INTCTLR_IOAPIC
INCLUDE_GEI825XX_VXB_END
DRV_TIMER_IA_TIMESTAMP
INCLUDE_MII_BUS
DRV_INTCTLR_MPAPIC
DRV_SIO_NS16550
INCLUDE_FEI8255X_VXB_END
DRV_TIMER_LOAPIC
INCLUDE_SIO_UTILS
VXBUS_TABLE_CONFIG
INCLUDE_INTCTLR_LIB
INCLUDE_DMA_SYS
INCLUDE_PARAM_SYS
INCLUDE_SW_FPP
だから、それが私が今いるところです。問題は上記の手順 4 ~ 6 にあると思いますが、ワークベンチ内からブート ローダーを PXE ブート可能にする適切な方法について、ドキュメントには何も記載されていません。
c - OSなしで実行
OSなしでRAMから直接実行できるように、 Cプログラムを有効なELF形式(またはRAW形式)にコンパイルするにはどうすればよいですか? RAM の任意の場所にコードをロードし、そのアドレスで実行を開始できるブートローダーが存在すると仮定します。正確には、コンパイラ( GCC )フラグは何ですか? マップファイルは必要ですか?
サンプルの helloworld アプリケーションは大歓迎です :)
私の要点を詳しく説明するために
、main() メソッドを空の無限 while ループにして、OS固有または標準のライブラリ呼び出しが使用されないようにします。目的の o/p はハングです。通常のGCCオプションを使用すると、ブートローダーは実行可能ファイルのロードに確実に失敗し、無効なELF形式であることが通知されます。ただし、リンカーに-dNオプションを渡すと、有効なELFになります。クラッシュせずにハングアップさせるには、より多くのコンパイラ/リンカーオプションが必要です!! これらのコンパイラ オプションとは正確には何ですか?
コンパイル
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o
ブートローダーはa.outを RAM にロードして実行します。
windows - 起動OSをプログラムで選択する方法は?
複数の Windows OS 間のデバイス接続をテストするテスト ベッドをセットアップしています。VM では実行できない (デバイスへのアクセスを仮想化できない) ため、かなりのマルチブート システムを使用しています。プロセスを自動化するスクリプトがありますが、次の OS を選択して起動し、そのテストを実行して、先に進んで終了したいと考えています。
1 つの問題は、XP/2K3 が boot.ini を使用し、Vista 以降では BCDEdit を使用することです。XP/2K3 ごとに 1 つずつ、boot.ini を編集するための 2 つのスクリプトを手動で作成できます。そして、Vista システム用の BCDEdit へ。ただし、テスト条件に応じて順序を変更したり、特定の OS をオフにしたりする必要がある場合は特に、それぞれをハードコーディングする必要はありません。
BCDEdit もエントリに GUID を使用します。つまり、別のマシンにセットアップするということは、次に移動する GUID を把握することを意味します。
考えやヒントはありますか?これを自動化するのに役立つユーティリティはありますか?
linux - parted を使用して特定のパターンに parted を持つデバイスをフォーマットする
これは実際には分割された使用上の質問ですが、これを達成する方法についての他のアイデアは大歓迎です。
次のように設定されたブート デバイスを作成する必要があります。
(最大 4MB の消去ブロック サイズ (EBS)):
32 セクター/トラックと 128 ヘッドを使用し、奇数の開始番号 (1 から数えます) を使用して、4MB ブロックに整列されたパーティション
MBR: syslinux MBR ブートローダー
パーティション 1: FAT16 (0x06)、32MB、標準レイアウト、syslinux セットアップ + カーネル
パーティション 4: パーティション 1 のコピー (はい、part2 の前に!)
パーティション 2: LVM、ディスクの残りの部分