1

arm Linux カーネルの machine_init 関数からメモリを動的に割り当てたいと考えています。ただし、私のテストでは、kalloc を呼び出すと、システムの起動が完全に失敗する場合があることが示されています。

私のデバッグ ツールは非常に限られているため、エラーに関する詳細情報を提供することはできません。

簡単に言えば、ARM Linuxkallocの関数から呼び出すことは合法machine_initですか?そうでない場合、代替手段はありますか?

ほとんどの場合、起動プロセスの早い段階でメモリを割り当てるのは間違っていると理解しています (この種の作業はデバイス ドライバで行う必要があります)。ただし、私の特定のプロジェクトではそれが必要であると確信しています。

4

2 に答える 2

3

machine_init がどこから呼び出されているのかわかりませんが、間違ったことをしようとしていると思わずにはいられません。

デバイスドライバーやその他のサブシステムには独自の初期化時間があり、非常に早い段階で何かを行おうとすると、通常は間違いになります (必要なものがまだ開始されていないため)。デバイスドライバーの初期化中に間違いなく kmalloc を呼び出すことができます (少なくとも、ほとんど。コンソールドライバーは異なる場合があります)。

いずれにせよ、ARM を使用しているという事実は、それが組み込みシステムであることを示唆しているため、さまざまなハードウェアを扱う必要はほとんどありません。可能な限り多くの要素を持つ配列を静的に割り当てることはできませんか (それを超えるとエラーが発生します)。

于 2010-03-27T23:28:34.247 に答える
0

Kmalloc は、最上位のスラブ/スロブ/スラブ メモリ フレーム作業のカーネル API です。これらのフレームワーク (カーネルで使用されるもの) のいずれかが初期化されると、kmalloc は正常に動作します。スラブ/スロブ/スラブの初期化後に呼び出しを確認してください

乾杯

于 2014-09-22T05:07:50.603 に答える