0

私の理解では、PC/組み込みシステムが起動した後、OS は RAM 領域全体を占有し、RAM は次のようになります。

OS領域がRAM全体を占有

つまり、私が書いたプログラムを実行している間、すべての変数、スタック、ヒープなどに割り当てられた動的メモリは領域内に残ります。Firefox、ペイント、gedit などを実行すると、それらもこのリージョンで実行されます。(この理解は正しいですか?)

ただし、OS リージョンを縮小したいと考えています。以下は、RAMを分割する方法の図です。

OS リージョンは RAM 全体を占有せず、物理メモリの一部を使用できるようにします

これを行う理由は、ドライバーを介して外部から受信したデータを固定された物理的な場所に保存したいため、をCustom Region使用せずにユーザー空間から直接アクセスできるようにするためcopy_to_user()です。

u-boot を構成することでそれを行うことは可能だと思いますが、私は u-boot の経験がありません。どこから始めればよいか、次のような指示を誰か教えてもらえますか?またはenvironment variablesu-boot の変更で十分でしょうか?

または、これを行う代替方法はありますか?

どんな助けでも大歓迎です。ありがとう!

p/s: 私は TI ARM プロセッサを使用しており、SD カードから起動していますが、問題があるかどうかはわかりません。

4

3 に答える 3

4

プラットフォームはARMです。min_addr と max_addr はこれらのプラットフォームでは機能しません。これらは Intel 専用の実装のためのものだからです。

ARM プラットフォームの場合は、「mem=size@start」カーネル パラメータを確認してください。Documentation/kernel-parameters.txt と arch/arm/kernel/setup.c を読んでください。このオプションは、ほとんどの新しい Linux コード ベース (つまり 2.6.XX) で利用できます。

于 2012-01-10T00:41:46.533 に答える
3

次のパラメータを設定する必要があります。

max_addr=some_max_physical
min_addr=some_min_physical

'bootargs' u-boot 環境変数で uboot を介してカーネルに渡されます。

于 2012-01-03T04:08:06.070 に答える
0

OMAP4 プラットフォームで u-boot ではなく Barebox を使用しているにもかかわらず、最近、反対のことをしようとしていることに気付きました。

Barebox MLO の第 1 段階のブートローダーが余分な RAM を認識すると、カーネルがそれを検出し、 bootargs なしで同様に使用することがわかりました (少し驚いたことに) 。メモリ サイズはブートラインのどこにも渡されないため、ブートローダーによって設定されたメモリ マッピングをカーネルが検査して RAM サイズを判断しているとしか思えません。これは、すべての RAM をマップしないように u-boot を変更することが最善の方法であることを示唆しています。

boot-args に関しては、boot-line を使用して、OMAP4 システムで RAM のチャンク (フレーム バッファによって使用されますか?) をマップすることが推奨された時期がありました。これがまだ必要かどうかはまだ不明です。

于 2012-08-15T09:02:09.963 に答える