私のシステムでLZMA圧縮カーネルモジュールを使用したいと思います。残念ながら、Canoncialはカーネルとユーザースペースツールの両方でこの機能を無効にします。これまで私がしたことは次のとおりです。
現在のコンパイルとインストール14.04.05-LTSカーネル(v4.4.19):
CONFIG_MODULE_COMPRESS=y CONFIG_MODULE_COMPRESS_XZ=y
インストール後、複数の
.ko.xz
ファイルを見ることができます/lib/modules/4.4.19-37.56+/kernel/
。kmod_22
--with-xz
このオプションが設定されているXenial(16.04)からTrusty(14.04)にパッケージをバックポートします。これも効果があるようです。ランニング
update-initrams -u -k 4.4.19-37.56+
。
これまで働くこと:
圧縮されていないモジュール(DKMSで構築されたモジュールなど)でランダムな操作を実行します。
$ modinfo nvidia_370 filename: /lib/modules/4.4.19-37.56+/updates/dkms/nvidia_370.ko […]
フルパスで圧縮されたモジュールを表示します。
modinfo /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
フルパスを介して依存関係のない(欠落している)圧縮モジュールをロードします。
insmod /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
そのモジュールを取り外します。
rmmod jfs
うまくいかないもの:
アンインストール時に使用されます
modprobe -r
。パッケージ名のみを含み、パスは含まないその他の操作。例:
# insmod jfs insmod: ERROR: could not load module jfs: No such file or directory # modprobe jfs modprobe: FATAL: Module jfs not found in directory /lib/modules/4.4.19-37.56+
たとえば、依存関係がないモジュールの場合は、モジュールjfs
ファイルのフルパスを指定するための回避策がありますが、insmod
これは面倒で依存関係の解決を実行しませんmodprobe
。
私の考えでは、カーネルモジュールディレクトリが何らかの形で圧縮されたモジュールファイルを選択できないようです。圧縮カーネルモジュールを名前でロードする方法はmodprobe
?
答え1
あなたは実行する必要がありますdepmod
。
depmod
(デフォルト)以下のモジュールを読み/lib/modules/$(uname -r)
、エクスポートしたシンボルと必要なシンボルを見つけて、この情報を使用してモジュール間のシンボル(モジュール)の依存関係を作成し、それをファイルに保存して/lib/modules/$(uname -r)/modules.dep
バイナリハホープを生成します/lib/modules/$(uname -r)/modules.dep.bin
。
また、2 つの異なるファイルも生成されます。
/lib/modules/$(uname -r)/modules.symbols
(そしてバイナリハッシュです/lib/modules/$(uname -r)/modules.dep.bin
):各モジュールからエクスポートされたシンボルを含みます。/lib/modules/$(uname -r)/modules.devname
:モジュール名、項目名、メジャー番号、マイナー番号/dev
など、必要なモジュールに対して生成する必要がある項目が含まれています。/dev
depmod
特定のカーネルバージョンまたは特定のモジュールに対しても実行できます。を確認してくださいman depmod
。
答え2
あなた必要ㅏデフモードそしてリズママッピングと許可のサポート.xz 圧縮カーネルモジュールのロード
一部Depmod船いいえしたがって、カスタムビルドフラグで作成されたバイナリが必要になることがあります。--with-xz