Обычной практикой является добавление драйверов ядра Linux (объектов объектов ядра) в исходный код, а также сборка и установка их на целевой компьютер. Например, драйверы дисплея NVIDIA и гостевые надстройки Oracle VirtualBox устанавливаются таким образом. Также часто получают новые версии ядра (с соответствующими заголовками) через обновление системы. Это требует перестройки и переустановки KO, иначе устройство перестанет работать после обновления.
В нашем скрипте запуска установки продукта мы хотим добавить шаг, чтобы сделать и установить KO при каждой загрузке. Пользователь может отказаться, и ему придется собирать и устанавливать KO вручную. Драйвер устройства связывается с устройством USB.
Уместные детали:
Фактическая пересборка произойдет только один раз, когда будет установлено новое ядро, потому что make не будет пытаться пересобрать файл, который уже существует и обновлен.
Пересборка драйвера занимает около двух секунд, а пропускает сборку во время обычной загрузки (не после обновления ядра), а за миллисекунды.
В маловероятном случае сбоя сборки она не должна приводить к сбою системы или ее нестабильной работе. Однако наше аппаратное устройство не будет работать.
Некоторые дистрибутивы могут позволять регистрировать хуки, выполнять действия с определенными событиями, например, обновление ядра. Тем не менее, мы пытаемся реализовать то, что будет работать в большинстве дистрибутивов единообразным способом. Наш установщик это скрипт +tar или скрипт +rpm. К сожалению, для этого выпуска у нас нет пропускной способности для подготовки собственных пакетов для всех дистрибутивов (например, в стиле Debian).
Вопросы:
Это приемлемое решение? Если нет, то почему?
Каковы потенциальные риски, связанные с этим подходом?
Какое правильное / предпочтительное место для запуска сделать во время запуска? rc.local или скрипт под init.d или другой? Цель состоит в том, чтобы заставить его работать на большинстве дистрибутивов, используя один и тот же метод (если это вообще возможно).