Ubuntuで圧縮カーネルモジュールをロードする方法は?

Ubuntuで圧縮カーネルモジュールをロードする方法は?

私のシステムでLZMA圧縮カーネルモジュールを使用したいと思います。残念ながら、Canoncialはカーネルとユーザースペースツールの両方でこの機能を無効にします。これまで私がしたことは次のとおりです。

  1. 現在のコンパイルとインストール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/

  2. kmod_22--with-xzこのオプションが設定されているXenial(16.04)からTrusty(14.04)にパッケージをバックポートします。これも効果があるようです。

  3. ランニング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

おすすめ記事