Инструменты пользователя

Инструменты сайта


linux:kernel:modules:main

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:kernel:modules:main [2024/01/07 10:41]
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 ​-
 +</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, поскольку эта команда не только находит файл модуля в файловой системе,​ но и загружает все его зависимости.
Строка 81: Строка 118:
 Здесь аналогично две команды - modprobe, позволяет удалить модуль если ей передать опцию -r, а также есть команда rmmod. Начнем с modprobe: Здесь аналогично две команды - modprobe, позволяет удалить модуль если ей передать опцию -r, а также есть команда rmmod. Начнем с modprobe:
  
-''​sudo modprobe -r vboxdrv''​+<code bash> 
 +sudo modprobe -r vboxdrv 
 +</​code>​
  
 Другая команда в этом случае выглядит немного проще: Другая команда в этом случае выглядит немного проще:
  
-''​sudo rmmod vboxdrv''​+<code bash>  
 +sudo rmmod vboxdrv 
 +</​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}}]]Если вы получили ошибку во время выгрузки модуля,​ например:​ **rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt**,​ значит он еще используется другими модулями,​ и сначала нужно выгрузить их. В данном случае это **vboxnetadp и vboxnetflt**. Правильно отработавшая команда не должна ничего возвращать.+{{ :linux:​kernel:​modules:​9.png |}}
  
-''​rmmod vboxnetadp vboxnetflt''​+Если вы получили ошибку во время выгрузки модуля,​ например:​ **rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt**, значит он еще используется другими модулями,​ и сначала нужно выгрузить их. В данном случае это **vboxnetadp и vboxnetflt**. Правильно отработавшая команда не должна ничего возвращать. 
 + 
 +<code bash> 
 +rmmod vboxnetadp vboxnetflt 
 +</​code>​
  
 ==== Блокирование загрузки модулей ==== ==== Блокирование загрузки модулей ====
Строка 95: Строка 140:
 Иногда,​ во время загрузки системы для используемых нами устройств,​ загружаются не те модули ядра Linux, они либо не поддерживают нужную функциональность либо конфликтуют с другими модулями. Ярким примером можно назвать загрузку драйвера b43 вместо brcmsmac для беспроводных адаптеров Broadcom. Чтобы решить эту проблему вы можете добавлять модули в черный список. Для этого достаточно добавить одну строчку в файл /​etc/​modprobe.d/​blacklist.conf:​ Иногда,​ во время загрузки системы для используемых нами устройств,​ загружаются не те модули ядра Linux, они либо не поддерживают нужную функциональность либо конфликтуют с другими модулями. Ярким примером можно назвать загрузку драйвера b43 вместо brcmsmac для беспроводных адаптеров Broadcom. Чтобы решить эту проблему вы можете добавлять модули в черный список. Для этого достаточно добавить одну строчку в файл /​etc/​modprobe.d/​blacklist.conf:​
  
-''​sudo vi /​etc/​modprobe.d/​blacklist.conf ''​+<code bash> 
 +sudo vi /​etc/​modprobe.d/​blacklist.conf 
 +</​code>​ 
 + 
 +<code ini> 
 +blacklist b43 
 +</​code>​
  
-''​blacklist b43''​+{{ :​linux:​kernel:​modules:​10.png |}}
  
-[[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}}]]Этот код добавит в черный список модуль b43.+Этот код добавит в черный список модуль b43.
  
 ==== Автозагрузка модулей ==== ==== Автозагрузка модулей ====
Строка 110: Строка 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 выходит за рамки данной статьи.
  
  
  
linux/kernel/modules/main.1704613288.txt.gz · Последние изменения: 2024/01/07 10:41 — werwolf