問題タブ [bare-metal]
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.
c - Intel Galileo ベアメタル UART
Intel Galileoボードで小さな「hello world」ベアメタルアプリケーションをプログラムしたいと考えています。もちろん、UEFIを使用してテキストを(UART-1に)出力することはうまくいきますが、UEFIの助けを借りずに「手動で」UARTにアクセスしたいと思います。
QEMU では、私のコードはうまく動作します:
.h ファイル
.c ファイル
主要
スペックはあまり参考になりませんでした。Intel Galileo ボードの UART は、通常の/レガシー COM ポート 3F8h、2F8h、3E8h、または 2E8h を使用/エミュレートしていないと思います。
誰かが私が間違っていることを教えてくれますか、または最小限のベアメタルのハローワールドの例を投稿することさえできますか?
linker - GMP をベアメタル プログラムにリンクする
ライブラリ、つまり筑波大学楕円ペアリング ライブラリに依存するコードがいくつかあります。このライブラリ自体は GMP に依存しています。このプログラムを ARM コア、特にビーグルボーン ブラックでベアメタルで実行したいと考えています。
GMP は大規模なライブラリなので、可能であればクロスコンパイルしたいと考えています。また、GMP ソース コード全体を自分のプログラムと同じファイルに単純にダンプし、それを arm-none-eabi-gcc にプッシュするという「ブルート フォース」ソリューション以外の方法も好みます。
重要なライブラリをベアメタル コードにリンクするための標準的な方法は何ですか?
raspberry-pi - Raspberry Pi をセキュア モードで起動することはできますか?
現在、Raspberry Pi で小さな OS を開発しています。これは、SD カードのkernel.img
ファイルを置き換えてインストールします。/boot partition
私のコードが実行されるまでに、CPU はすでにノーマル モードになっているため、セキュア ワールド / トラストゾーン エリアにアクセスできません。
ラズベリーのブート プロセスを変更して、コードをセキュア モードで実行できるようにすることはできますか?
ベスト、V.
assembly - x86_64 で 64 ビットモードに入る方法
xv6 https://github.com/chrisdew/xv6/blob/master/bootasm.Sで、16 ビットから 32 ビット プロテクト モードに移行する方法を示す素敵なアセンブリを見つけました。
64ビットモードに入る同様の例を知っている人はいますか? (32ビットモードを使用するかどうかにかかわらず。)
c++ - C/C++ ベアメタル コンパイルと特定の OS (Linux) 用のコンパイルの違いは何ですか?
ARM アーキテクチャ用のバイナリを生成するクロス コンパイル ツール チェーンがあるとします。
ツールチェーンは次のようになります (Linux を搭載した X86_64 マシンで実行):
- arm-linux-gnueabi-gcc.exe : ARM で実行される Linux のクロス コンパイル用。
- arm-gcc.exe : ARM を対象とするベアメタル クロス コンパイル用。
...そして、ARM でのクロス コンパイル用の他のツールが多数あります。
私が興味を持っているポイントは次のとおりです。
- (E) バイナリ間の ABI の違い (ある場合)
- ベアメタルの場合の制限 (動的メモリ割り当て、C++ の場合の静的コンストラクタの使用、スレッド モデルなど)
- それぞれに固有の情報 (デバッグ情報のサポートなど) に関する 2 つのケース間のバイナリレベルの違い。
assembly - GDBがトラバースできるようにARMスタックフレームをセットアップする方法は?
ベアメタル (OS なし) で ARM 用の Linux 標準 C ライブラリを使用する小さなプロジェクトを行っています。実行プラットフォームとして qemu-system-arm を使用し、GDB をデバッグに使用しています。C ライブラリが行う SVC 呼び出しを処理するための小さなシステム コール ハンドラを作成しましたが、処理されていないシステム コール関数がスタックをトラバースして呼び出し元に戻ることができないという事実に混乱しています。ハンドラー コードは次のとおりです。
__in_syscall にブレークポイントを設定すると、スタック フレームが正常に表示されます。分岐を介して、または SVC_Table のポインターを介して間接的に Unhandled_SVC に入ると、プログラムが正しく実行されていても、GDB はスタック フレームの表示に混乱します。
私は何が欠けていますか?
これは私のELLCC 組み込みコンパイラプロジェクトの一部であり、完全なソースはここにあります。