カーネルモジュールのロードに問題があります。メモリのサイズが約2Gbの大きなデータ構造があります。テーブルを事前に割り当てているかどうかに関係なく、モジュールをロード時に.bssで表示しsize -A module.ko
ますvmalloc()
。ロードはで失敗しinsmod: error inserting 'module.ko': -1 Cannot allocate memory
ます。
ユーザーモードLinuxで問題をデバッグしようとしましたが、多数のsegfaultが発生します(gdbで続行できますが、コンソールメッセージが表示されます。overflow in relocation type 10 val <value in the ball park of 6G>
正しい'module' likely not compiled with -mcmodel=kernel
はずですよね?Kbuild
-mcmodel
したがって、質問は次のとおりです。
- Linuxカーネルモジュールのサイズに一般的な2Gの制限はありますか?
- usernode linuxのカーネルモジュールには特定の2G制限がありますか(過去に、大きなカーネルモジュールにはクリーンで連続的なメモリブロックが必要であることに気づいたと思います...)
- カーネルモジュールを指定
-mcmodel=large
して、それが機能することを期待できますか?
私はこれをdebiansqueeze、64ビット、2.6.32-5-amd64(ホスト)で8Gbのメモリを使用し、2.6.32をumlで4Gメモリを使用して試したので、これは通常のメモリ不足の問題ではありません。
そのような制限が存在する場合、制限を回避するための追加のクレジット:)