Как обновление ядра влияет на пользовательские модули?

Мне любопытно, что произойдет, когда вы запустите

sudo apt-get update && sudo apt-get upgrade

, если у вас установлены собственные модули ядра.

Есть ли хуки для переустановки вашего пользовательского модуля? Являются ли модули полностью незатронутыми обновлением?

Я спрашиваю об этом, потому что каждый раз, когда я делаю обновление, я боюсь, что модули, которые я установил из исходного кода, сломаются. На данный момент у меня еще не было проблем, но я бы хотел узнать больше о том, что происходит с модулями, когда вы обновляете свое ядро ​​с помощью регулярных обновлений.

5
задан 30 January 2013 в 23:53

1 ответ

Это действительно зависит от , как был установлен этот модуль. Механизм DKMS специально создан для автоматической перекомпиляции с новым установленным ядром.

Модули простого ядра создаются только для той версии, для которой они были скомпилированы, и продолжают работать, когда обновления не нарушают ABI . Однако обновления 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 просто устанавливает один конкретный модуль ядра и требует, чтобы вы каждый раз перекомпилировали его.

Если вы этого не сделаете, модуль ядра просто не будет найден после обновления. Он не будет смотреться в старом каталоге, и если вы заставите его загрузить, он, вероятно, не сможет вставить. В случае если установка перезаписала системную по умолчанию, она также может загрузить нестандартную.

Я не собираюсь включать сюда упаковку DKMS, так как я думаю, что уже ответил на ваш вопрос.

0
ответ дан 30 January 2013 в 23:53

Другие вопросы по тегам:

Похожие вопросы: