Модули драйвера загружены и разгружены автоматически?

Использование памяти процессом не является четко определенным понятием: существуют области общей памяти (совместно использованные библиотеки, несколько процессов, совместно использующих исполняемый файл, родитель/ребенок, совместно использующий неизмененные данные). Если Вы теперь берете потоки, по определению все потоки совместно используют ресурсы содержания процесса.

15
21.04.2015, 20:14
2 ответа

Когда ядро ​​обнаруживает новое устройство, он запускает программу ModProbe и передает его имя, которое идентифицирует устройство. Большинство устройств идентифицируются через зарегистрированные номера для поставщика и модели, например. PCI или USB идентификаторы. Программа MODPROBE MODPROBE программа консультирует таблицу псевдонимами модуля / lib / модули / версию /modules.alias , чтобы найти имя файла, который содержит драйвер для этого конкретного устройство. Аналогичный принцип применяется к драйверам для вещей, которые не являются аппаратными устройствами, такими как файловые системы и криптографические алгоритмы. Для получения более подробной информации см. Debian не обнаруживает серийный PCI-карта после перезагрузки

После того, как ModProbe определил, какой файл модуля ( .ko ) содержит запрошенный драйвер, он загружает файл модуля в ядро : код модуля динамически загружен в ядро. Если модуль успешно загружен, он появится в списке из LSMOD .

Автоматическая загрузка модулей происходит, когда ядро ​​обнаруживает новое горячее аппаратное оборудование, например, Когда вы подключаете USB-периферийное устройство. Операционная система также делает пропуск перечисления всего оборудования, который присутствует в системе ранним во время запуска, чтобы загрузить драйверы для периферийных устройств, которые присутствуют при загрузке.

Также возможно вручную запрашивать загрузку модуля модулем ModProbe или командование . Большинство дистрибутивов включают сценарий запуска, который загружает модули, перечисленные в / etc / модули . Другим способом для нагрузки модулей - это если они зависит от модуля: если модуль A зависит от модуля B, то ModProbe A нагрузки B перед загрузкой A.

Как только модуль загружен, Он остается загружен до тех пор, пока явно не загружен, даже если все устройства используют этот драйвер, были отключены. Давным-давно произошло механизм автоматической разгрузки неиспользованных модулей, но его удалили, если я правильно помню, когда Удев наступил на сцену. Я подозреваю, что автоматический разгрузка модуля не является общей особенностью, поскольку системы, которые, как правило, нуждаются в ней, являются в основном настольные ПК, которые в любом случае имеют много памяти (в масштабе кода драйвера).

13
27.01.2020, 19:50

Модули загружаются при загрузке системы через начальный RAM-диск, также известный как initrd . В разделе «Обоснование» говорится:

Многие дистрибутивы Linux поставляют один общий образ ядра Linux - тот, который разработчики дистрибутива создают специально для загрузки на разнообразном оборудовании. Драйверы устройств для этого общего образа ядра включены как загружаемые модули ядра, поскольку статическая компиляция множества драйверов в одно ядро ​​приводит к тому, что образ ядра становится намного больше, возможно, слишком большим для загрузка на компьютерах с ограниченным объемом памяти . Затем возникает проблема обнаружения и загрузки модулей , необходимых для монтирования корневой файловой системы во время загрузки, или, если это важно, определение того, где и что находится корневая файловая система.

Ubuntu, как и многие другие дистрибутивы, выбирает загрузку каждого драйвера устройства в этот initrd, независимо от того, нужен драйвер или нет, а также независимо от того, присутствует ли устройство в системе или нет. Как указал Джайлз, все это загружается в оперативную память, а затем используемые модули обнаруживаются при запуске, а неиспользуемые удаляются из оперативной памяти. Использование этого подхода гарантирует, что Ubuntu всегда будет запускаться в любой системе независимо от настройки. Ubuntu имитирует монолитное ядро, используя конструкции микроядра. См. Причина, по которой это работает.


  1. Модуль rt2800usb всегда будет загружаться при загрузке, потому что модуль был включен в initramfs , на которые ссылается Жиль. Initramfs является преемником initrd, поэтому он всегда будет отображаться с помощью lsmod .Обратите внимание, что вы можете вставить недавно скомпилированный модуль в ядро, используя modprobe , за которым следует имя модуля.

В качестве теста перезагрузите систему с отключенным беспроводным адаптером. Если все пойдет хорошо, модуль не будет указан в выводе lsmod , потому что во время загрузки процесс обнаружения, запущенный initramfs, и init sstem не нашли устройство во время проверки, и модуль был удален из ОЗУ.

  1. Чтобы удалить модуль во время работы системы, вы можете использовать такие команды, как rmmod или modprobe -r , за которыми следует имя модуля. При следующей загрузке модуль будет перезагружен. См. Выше. В большинстве случаев модуль не удаляется динамически, так как это отключит горячее подключение, то есть после удаления модуля устройство, использующее его, не может быть обнаружено снова при повторном подключении.

Чтобы удалить модуль из lsmod , вы должны удалить его из образа initramfs, созданного путем перекомпиляции ядра без выбранного модуля и последующей перестройки образа. Это отключает все обнаружение указанного модуля.

5
27.01.2020, 19:50

Теги

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