web-dev-qa-db-ja.com

カーネルの更新はカスタムモジュールにどのように影響しますか?

私はあなたが走ったときに何が起こるかについて興味があります

Sudo apt-get update && Sudo apt-get upgrade

カスタムカーネルモジュールがインストールされている場合。

カスタムモジュールを再インストールするためのフックはありますか?モジュールはアップグレードによって完全に影響を受けませんか?

アップグレードを行うたびに、ソースからインストールしたモジュールが壊れるのではないかと心配しているので、これをお願いします。現時点ではまだ問題はありませんが、定期的な更新でカーネルを更新すると、モジュールがどうなるかについて詳しく知りたいと思います。

5
Caustic

これは本当にhowこのモジュールがインストールされたことに依存します。 DKMS のメカニズムは、インストールされた新しいカーネルに対して自動的に再コンパイルするために特別に作成されています。

プレーンカーネルモジュールは、コンパイルされたまさにそのバージョン用にのみビルドされ、更新がnotABI を壊したときに機能し続けます。ただし、Ubuntuの更新プログラムはABIを非常に頻繁に破損するため、カーネルモジュールを再コンパイルする必要があります。これは非常に退屈で繰り返しの多い作業であるため、DKMSはこれを克服するために考案されました。 APTにフックを挿入して、新しいバージョンのコンパイルとインストールをトリガーします。

DKMSを使用してインストールされた現在のカーネルモジュールを表示するには(例):

dkms status
nvidiabl, 0.79, 3.5.0-22-generic, x86_64: installed
nvidiabl, 0.79, 3.7.5-030705-generic, x86_64: installed
nvidia-current, 313.09, 3.5.0-22-generic, x86_64: installed
nvidia-current, 313.09, 3.7.5-030705-generic, x86_64: installed
vboxhost, 4.2.6, 3.5.0-22-generic, x86_64: installed
vboxhost, 4.2.6, 3.7.5-030705-generic, x86_64: installed

ここで、いくつかのカーネルモジュールをDKMSにインストールしたことがわかります。自分でnvidiablのみ、その他はNvidiaドライバーパッケージとVirtualboxパッケージによってインストールされました。

モジュールは、各カーネルバージョンの特定のディレクトリに配置(インストール)されます。

/lib/modules/
├── 3.5.0-22-generic
│   ├── build -> /usr/src/linux-headers-3.5.0-22-generic
│   ├── initrd
│   ├── kernel
│   │   ├── Arch
│   │   ├── crypto
│   │   ├── drivers
│   │   ├── fs
│   │   ├── lib
│   │   ├── net
│   │   ├── sound
│   │   └── ubuntu
│   └── updates
│       └── dkms
└── 3.7.5-030705-generic
    ├── build -> /usr/src/linux-headers-3.7.5-030705-generic
    ├── initrd
    ├── kernel
    │   ├── Arch
    │   ├── crypto
    │   ├── drivers
    │   ├── fs
    │   ├── lib
    │   ├── mm
    │   ├── net
    │   └── sound
    └── updates
        └── dkms

DKMSがサポートされていないカスタムカーネルモジュールを取得するには、自分でやらなければならない「パッケージング」が必要で、毎回それを再コンパイルする必要があります。つまり、「典型的な」./configure; make; Sudo make installは特定のカーネルモジュールを1つだけインストールし、毎回それを再コンパイルする必要があります。

そうしないと、更新後にカーネルモジュールが見つかりません。古いディレクトリは検索されず、強制的にロードすると、おそらく挿入に失敗します。インストールがシステムのデフォルトを上書きした場合、カスタムでないものもロードする可能性があります。

ここまでにあなたの質問に答えたと思うので、ここにDKMSパッケージを含めるつもりはありません。

5
gertvdijk