Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
linux:kernel:modules:main [2024/01/07 10:44] werwolf [Удаление модулей ядра] |
linux:kernel:modules:main [2024/01/07 11:10] (текущий) werwolf [Автозагрузка модулей] |
||
|---|---|---|---|
| Строка 7: | Строка 7: | ||
| Находятся все модули в папке /lib/modules/. Учитывая, что модули рассчитаны только для определенной версии ядра, то в этой папке создается отдельная подпапка, для каждой установленной в системе версии ядра. В этой папке находятся сами модули и дополнительные конфигурационные файлы, модули отсортированы по категориям, в зависимости от назначения например: | Находятся все модули в папке /lib/modules/. Учитывая, что модули рассчитаны только для определенной версии ядра, то в этой папке создается отдельная подпапка, для каждой установленной в системе версии ядра. В этой папке находятся сами модули и дополнительные конфигурационные файлы, модули отсортированы по категориям, в зависимости от назначения например: | ||
| - | ''ls /lib/modules/5.4.0.45-generic/kernel/'' | + | <code bash> |
| + | ls /lib/modules/5.4.0.45-generic/kernel/ | ||
| + | </code> | ||
| + | |||
| + | {{ :linux:kernel:modules:1.png |}} | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-55-37.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-55-37-1024x576.png?806x453}}]]Перед тем как переходить к практике, давайте коротко рассмотрим основные команды для управления модулями. | + | Перед тем как переходить к практике, давайте коротко рассмотрим основные команды для управления модулями. |
| * **lsmod** - посмотреть загруженные модули | * **lsmod** - посмотреть загруженные модули | ||
| Строка 24: | Строка 28: | ||
| В Ubuntu команда будет выглядеть вот так: | В Ubuntu команда будет выглядеть вот так: | ||
| - | ''dpkg -S *.ko | grep /lib/modules'' | + | <code bash> |
| + | dpkg -S *.ko | grep /lib/modules | ||
| + | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-57-22.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-57-22-1024x576.png?806x453}}]]Можно смастерить такую конструкцию с помощью find: | + | {{ :linux:kernel:modules:2.png |}} |
| - | ''find /lib/modules -name *.ko'' | + | Можно смастерить такую конструкцию с помощью find: |
| + | |||
| + | <code bash> | ||
| + | find /lib/modules -name *.ko | ||
| + | </code> | ||
| Можем искать только для текущего ядра: | Можем искать только для текущего ядра: | ||
| - | ''find /lib/modules/$(uname -r) -name *.ko'' | + | <code bash> |
| + | find /lib/modules/$(uname -r) -name *.ko | ||
| + | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-57-37.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-57-37-1024x576.png?806x453}}]]Также, все модули записаны в конфигурационном файле **/lib/modules/modules.aliases**, поэтому мы можем просто посмотреть его содержимое: | + | {{ :linux:kernel:modules:3.png |}} |
| - | ''modprobe -c'' | + | Также, все модули записаны в конфигурационном файле **/lib/modules/modules.aliases**, поэтому мы можем просто посмотреть его содержимое: |
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-58-05.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-58-05-1024x576.png?806x453}}]]Если хотим проверить установлен ли определенный модуль ядра Linux, отфильтруем вывод любой из команд с помощью grep: | + | <code bash> |
| + | modprobe -c | ||
| + | </code> | ||
| - | ''find /lib/modules -name *.ko | grep vbox'' | + | {{ :linux:kernel:modules:4.png |}} |
| - | (adsbygoogle = window.adsbygoogle || []).push%%({%%}); | + | Если хотим проверить установлен ли определенный модуль ядра Linux, отфильтруем вывод любой из команд с помощью grep: |
| + | <code bash> | ||
| + | find /lib/modules -name *.ko | grep vbox | ||
| + | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-59-01.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-59-01-1024x576.png?806x453}}]]==== Что загружено? ==== | + | |
| + | {{ :linux:kernel:modules:5.png |}} | ||
| + | ==== Что загружено? ==== | ||
| Все информация о загруженных модулях хранится в файле **/proc/modules**, мы можем ее вывести командой: | Все информация о загруженных модулях хранится в файле **/proc/modules**, мы можем ее вывести командой: | ||
| - | ''cat /proc/modules'' | + | <code bash> |
| + | cat /proc/modules | ||
| + | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-59-40.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-17-59-40-1024x576.png?806x453}}]]Но для этого дела есть более цивилизованные методы. Это утилита lsmod и modinfo. Чтобы посмотреть загруженные модули ядра linux выполните: | + | {{ :linux:kernel:modules:6.png |}} |
| - | ''sudo lsmod'' | + | Но для этого дела есть более цивилизованные методы. Это утилита lsmod и modinfo. Чтобы посмотреть загруженные модули ядра linux выполните: |
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-00-20.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-00-20-1024x576.png?806x453}}]]Удобно проверять загружен ли модуль с помощью grep: | + | <code bash> |
| + | sudo lsmod | ||
| + | </code> | ||
| - | ''sudo lsmod | grep vbox'' | + | {{ :linux:kernel:modules:7.png |}} |
| + | |||
| + | Удобно проверять загружен ли модуль с помощью grep: | ||
| + | |||
| + | <code bash> | ||
| + | sudo lsmod | grep vbox | ||
| + | </code> | ||
| А более подробную информацию о каждом модуле можно получить с помощью утилиты modinfo: | А более подробную информацию о каждом модуле можно получить с помощью утилиты modinfo: | ||
| - | ''modinfo fuse'' | + | <code bash> |
| + | modinfo fuse | ||
| + | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-00-55.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-00-55-1024x576.png?806x453}}]]Здесь вы можете увидеть файл модуля, его лицензию, автора и зависимости. Зависимости - это те модули, которые должны быть загружены для его нормальной работы. К сожалению, не для всех модулей доступно нормальное описание, но вы можете попробовать посмотреть описание зависимостей модуля. | + | {{ :linux:kernel:modules:8.png |}} |
| + | |||
| + | Здесь вы можете увидеть файл модуля, его лицензию, автора и зависимости. Зависимости - это те модули, которые должны быть загружены для его нормальной работы. К сожалению, не для всех модулей доступно нормальное описание, но вы можете попробовать посмотреть описание зависимостей модуля. | ||
| ==== Запуск модулей ядра ==== | ==== Запуск модулей ядра ==== | ||
| Строка 69: | Строка 102: | ||
| Загрузить модуль ядра Linux можно с помощью команд **modprobe** или **insmod**. Например, загрузим модуль vboxdrv | Загрузить модуль ядра Linux можно с помощью команд **modprobe** или **insmod**. Например, загрузим модуль vboxdrv | ||
| - | ''sudo modprobe vboxdrv'' | + | <code bash> |
| + | sudo modprobe vboxdrv | ||
| + | </code> | ||
| Чтобы загрузить модуль ядра linux с помощью insmod необходимо передать адрес файла модуля: | Чтобы загрузить модуль ядра linux с помощью insmod необходимо передать адрес файла модуля: | ||
| - | ''sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko'' | + | <code bash> |
| + | sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko | ||
| + | </code> | ||
| Напоминаю, что его можно узнать с помощью команды modinfo. Запуск модуля ядра Linux предпочтительно выполнять с помощью modprobe, поскольку эта команда не только находит файл модуля в файловой системе, но и загружает все его зависимости. | Напоминаю, что его можно узнать с помощью команды modinfo. Запуск модуля ядра Linux предпочтительно выполнять с помощью modprobe, поскольку эта команда не только находит файл модуля в файловой системе, но и загружает все его зависимости. | ||
| Строка 91: | Строка 128: | ||
| </code> | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-02-51.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-02-51-1024x576.png?806x453}}]] | + | {{ :linux:kernel:modules:9.png |}} |
| Если вы получили ошибку во время выгрузки модуля, например: **rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt**, значит он еще используется другими модулями, и сначала нужно выгрузить их. В данном случае это **vboxnetadp и vboxnetflt**. Правильно отработавшая команда не должна ничего возвращать. | Если вы получили ошибку во время выгрузки модуля, например: **rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt**, значит он еще используется другими модулями, и сначала нужно выгрузить их. В данном случае это **vboxnetadp и vboxnetflt**. Правильно отработавшая команда не должна ничего возвращать. | ||
| Строка 111: | Строка 148: | ||
| </code> | </code> | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-04-56.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-04-56-1024x576.png?806x453}}]] | + | {{ :linux:kernel:modules:10.png |}} |
| Этот код добавит в черный список модуль b43. | Этот код добавит в черный список модуль b43. | ||
| Строка 124: | Строка 161: | ||
| ''brcmsmac'' | ''brcmsmac'' | ||
| - | [[https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-15-34.png|{{https://losst.pro/wp-content/uploads/2016/05/Snimok-ekrana-ot-2020-09-04-18-15-34-1024x576.png?806x453}}]] | + | {{ :linux:kernel:modules:11.png |}} |
| ==== Установка модулей ядра Linux ==== | ==== Установка модулей ядра Linux ==== | ||
| - | Собранные для этой версии ядра модули вы можете просто скопировать в нужную папку, собственно, мы так и поступаем, когда собираем ядро из исходников. Но с проприетарными драйверами и другими внешними драйверами, не поставляемыми в комплекте с ядром дело обстоит иначе. Эти модули поддерживают несколько версий ядра, но для их установки используется специальная технология - DKMS (Dynamic Kernel Module Support). Причем модуль, установленный таким образом один раз, будет пересобираться для каждой новой версии ядра автоматически. Обычно такие модули поставляются в виде пакетов, которые устанавливаются как и все другие приложения пакетным менеджером. Ручная установка модулей с помощью dkms выходит за рамки данной статьи. | + | Собранные для этой версии ядра модули вы можете просто скопировать в нужную папку, собственно, мы так и поступаем, когда собираем ядро из исходников. Но с проприетарными драйверами и другими внешними драйверами, не поставляемыми в комплекте с ядром дело обстоит иначе. |
| + | |||
| + | Эти модули поддерживают несколько версий ядра, но для их установки используется специальная технология - DKMS (Dynamic Kernel Module Support). | ||
| + | |||
| + | Причем модуль, установленный таким образом один раз, будет пересобираться для каждой новой версии ядра автоматически. Обычно такие модули поставляются в виде пакетов, которые устанавливаются как и все другие приложения пакетным менеджером. Ручная установка модулей с помощью dkms выходит за рамки данной статьи. | ||