Мне любопытно, что произойдет, когда вы запустите
sudo apt-get update && sudo apt-get upgrade
, если у вас установлены собственные модули ядра.
Есть ли хуки для переустановки вашего пользовательского модуля? Являются ли модули полностью незатронутыми обновлением?
Я спрашиваю об этом, потому что каждый раз, когда я делаю обновление, я боюсь, что модули, которые я установил из исходного кода, сломаются. На данный момент у меня еще не было проблем, но я бы хотел узнать больше о том, что происходит с модулями, когда вы обновляете свое ядро с помощью регулярных обновлений.
Это действительно зависит от , как был установлен этот модуль. Механизм 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, так как я думаю, что уже ответил на ваш вопрос.