Как драйвер Linux обновляет работу?

При использовании awk не обязательно, я предпочитаю ruby для форматирования JSON. Намного дольше то, что пустое awk сценарий, но легче расширить его позже:

ruby -rjson -nae 'BEGIN{j={}};j["Memory"]="#{(100*$F[2].to_f/$F[1].to_f).to_i}%"if/^Mem/;END{puts j.to_json}' <(free -m)
7
27.08.2014, 14:07
2 ответа

Обновления на Linux требуют перезагрузки, если они влияют на ядро. Драйверы являются частью ядра. Иногда возможно обновить драйвер на Linux без перезагрузки, но это не происходит часто: периферический контроллер драйвера не может быть использован во время обновления, а новая версия драйвера должна быть совместима с выполненным ядром.

Обновление драйвера в бегущую систему, в которой используется периферийное устройство, управляемое драйвером, требуется, чтобы старый драйвер покинул периферию в состоянии, в том, что новый драйвер может начать с. Старый и новый водитель должен управлять передачей связей из клиентов. Это выполнимо, но сложно; Насколько сложно зависит от того, что водитель водит. Например, обновление файловой системы без размонтирования файловой системы требует передачи некоторых очень сложных структур данных, но легко справиться с аппаратной стороны (просто промойте буферы перед обновлением, и начните через пустой кеш). И наоборот, входной драйвер должен передавать только список открытых дескрипторов или тому подобное на стороне клиента, но аппаратная сторона требует, чтобы новый водитель знал, в чем находится периферийное устройство, и должно быть тщательно не потерять события.

Обновление драйвера в живой системе - это обычная практика во время разработки в операционных системах, где драйверы могут быть динамически загружены и разгружены, но обычно не при использовании периферийных устройств. Обновление водителя в производстве обычно не делается на ОС, таких как Linux и Windows; Я полагаю, что это сделано в системах высокой доступности, с которой я не знаком.

Некоторые драйверы не находятся в ядре (например FUSE файловых систем). Это позволяет легко обновлять их без обновления остальной части системы, но она все еще требует, чтобы водитель не был использоваться (например, экземпляры файловой системы предохранителя должны быть размонтированы и снова установлены, чтобы использовать новую версию драйверов).

Linux имеет механизмы для обновления ядра без перезапуска: Ksplice , kPatch , KPRAPT . Это технически сложно, поскольку обновленная версия должна быть совместима со старой версией в значительной степени; В частности, его структуры данных должны иметь точно такую ​​же двоичную планировку. Несколько дистрибутивов предлагают эту услугу для обновлений безопасности. Эти функции не (все же?) Доступны в основной ядре Linux. На главном ядре Linux драйвер может быть обновлен только в том случае, если он загружен в виде модуля, и если модуль можно разгрузить, и новый модуль совместим с запущенным ядром.

9
27.01.2020, 20:15

Я хотел бы добавить к ответу Жиль в заявлении о том, что в отличие от Windows, где драйверы выгружаются и загружаются при установке в большинстве случаев, в Linux установка драйверов в основном состоит из добавления двоиков и конфигурация к файловой системе и настройка их в качестве последней версии.

Это означает, что в отличие от Windows, которые сообщают вам перезагрузку, так как система вы находитесь в нестабильном / неизвестном состоянии, в Linux чаще всего вы только в том же состоянии, что вы были перед установкой драйвера.

Кроме того, добавление «новых» драйверов в Linux состоит из загрузки модулей ядра, поэтому при добавлении нового водителя нет необходимости перезагружаться обычно. В Windows большинство устройств обрабатываются универсальным драйвером, поэтому драйвер выгружен при добавлении новых устройств.

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

7
27.01.2020, 20:15

Теги

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