- Основы Linux от основателя Gentoo. Часть 2 (5/5): Модули ядра
- Модули ядра
- Знакомьтесь, «uname»
- Подробнее о uname
- Релиз ядра
- Введение в модули ядра
- Модули ядра вкратце
- lsmod
- Список модулей
- Сторонние модули
- depmod и компания
- Как получить модули
- Использование depmod
- Расположение модулей ядра
- insmod vs. modprobe
- rmmod и modprobe в действии
- Ваши помощники modinfo и modules.conf
- Структура modules.conf
- Итоги и ресурсы
- Итоги
- Ресурсы
- Об авторах
- Daniel Robbins
- Chris Houser
- Aron Griffis
- Howto: Linux Add or Remove a Linux Kernel Modules / Drivers
- Task: Add a Module (driver) Called foo
- Find out info about loaded module
- Task: List all loaded modules
- Task: Remove a module called foo
Основы Linux от основателя Gentoo. Часть 2 (5/5): Модули ядра
В заключительном отрывке второй части описаны основы управление модулями ядра Linux. Этот минимум неплохо знать всякому пользователю, однако, не стоит надеяться обнаружить в этом руководстве для начинающих информацию по сборке и конфигурированию модулей ядра.
Навигация по основам Linux от основателя Gentoo:
Часть I
- BASH: основы навигации (вступление)
- Управление файлами и директориями
- Ссылки, а также удаление файлов и директорий
- Glob-подстановки (итоги и ссылки)
Часть II
- Регулярные выражения (вступление)
- Назначения папок, поиск файлов
- Управление процессами
- Обработка текста и перенаправления
- Модули ядра (итоги и ссылки)
Часть III: 1, 2, 3, 4
Модули ядра
Знакомьтесь, «uname»
Команда uname дает множество интересной информации о вашей системе. Вот пример вывода на моей рабочей машине, после того, как я набрал uname -a, что говорит команде uname напечатать всю имеющуюся информацию:
$ uname -a
Linux inventor 2.4.20-gaming-r1 #1 Fri Apr 11 18:33:35 MDT 2003 i686 AMD Athlon(tm) XP 2100+ AuthenticAMD GNU/Linux
Подробнее о uname
Теперь, давайте посмотрим, какую же информацию о системе может дать uname
Интригующе! А что напечатает uname -a у вас?
Релиз ядра
А теперь небольшой трюк. Для начала выполните uname -r чтобы программа напечатала релиз ядра, которое работает в данный момент.
Теперь посмотрите в директорию /lib/modules и — опа! — Я уверен, что вы обнаружили каталог с точно таким же именем! OK, никакой магии, теперь самое время поговорить о значении каталогов в /lib/modules, а также объяснить, что такое модули ядра.
Ядро Linux это сердце того, что обычно называют «Linux» — это кусок кода, который напрямую взаимодействует с вашим железом и абстрагирует от него обычные программы. Благодаря ядру, вашему текстовому редактору не нужно беспокоиться на какой диск, SCSI или IDE, а может даже в RAM, он производит запись. Редактор просто записывает в файловую систему, а ядро заботится обо всем остальном.
Введение в модули ядра
Итак, что такое модули ядра? Они представляют собой часть ядра, которая сохраняется на диске в специальном формате. По вашей команде, они подгружаются в работающее ядро и добавляют в него новую функциональность.
Поскольку модули ядра загружаются по требованию, вы можете иметь ядро поддерживающее дополнительную функциональность, которая в обычном состоянии будет выключена и недоступна.
Но «раз в сто лет», эти модули окажутся очень полезными и смогут быть загружены — часто автоматически — для поддержки диковинной файловой системы или устройства, которое вы редко используете.
Модули ядра вкратце
В общем, модули ядра позволяют по требованию добавить возможностей в работающее ядро. Без модулей, вам бы пришлось компилировать новое ядро и перезагружаться для того, чтобы добавить поддержку чего-нибудь нового.
lsmod
Для просмотра загруженных модулей на вашей системе используйте команду lsmod:
Список модулей
Как видите, на моей системе загружено достаточно немного модулей. vmnet и vmmon модули, обеспечиваю необходимую функциональность для VMWare Workstation, которая позволяет мне запускать виртуальные машины в окне рабочего стола. Модуль nvidia выпущен NVIDIA corporation и позволяет использовать 3D-ускорение в Linux.
Дальше у меня есть набор модулей, которые используются для поддержки USB устройств ввода — mousedev, hid, usbmouse, input, usb-ohci, ehci-hcd и usbcore. Имеет смысл сконфигурировать ваше ядро для поддержки USB модулей. Почему? Потому что USB девайсы это «plug and play» (подключай и работай) девайсы и если у вас есть поддержка USB в модулях, вы можете спокойно пойти и купить новое USB устройство, подключить его, и ваша система автоматически загрузит соответствующие модули для этого устройства. Это удобный способ сделать что-то.
Сторонние модули
Завершают этот список модули: emu10k1, ac97_codec и sound, которые вместе обеспечиваю поддержку моей звуковой карты Audigy.
Следует отметить, некоторые из моих модулей доступны прямо в исходниках ядра. Например, все USB-модули были скомпилированы из стандартных исходных текстов ядра Linux. Однако, nvidia, emu10k1 и VMWare-модули были получены из других источников. Это подчеркивает другую важную особенность модулей ядра — возможность сторонних производителей добавлять необходимую функциональность в ядро и включать ее прямо в запущенное ядро. Без перезагрузки.
depmod и компания
В моей папке /lib/modules/2.4.20-gaming-r1/, есть несколько
файлов которые начинаются со строки «modules.»:
$ ls /lib/modules/2.4.20-gaming-r1/modules.*
/lib/modules/2.4.20-gaming-r1/modules.dep
/lib/modules/2.4.20-gaming-r1/modules.generic_string
/lib/modules/2.4.20-gaming-r1/modules.ieee1394map
/lib/modules/2.4.20-gaming-r1/modules.isapnpmap
/lib/modules/2.4.20-gaming-r1/modules.parportmap
/lib/modules/2.4.20-gaming-r1/modules.pcimap
/lib/modules/2.4.20-gaming-r1/modules.pnpbiosmap
/lib/modules/2.4.20-gaming-r1/modules.usbmap
Эти файлы содержат множество информации о различных зависимостях. В том числе, они содержат информацию о зависимостях для модулей — некоторые модули требуют загрузки других модулей перед тем как быть запущенными.
Как получить модули
Некоторые модули ядра разработаны для работы со специальными устройствами, как например emu10k1 — модуль для поддержки моей звуковой карты. Для этого типа модулей, приведенные выше файлы включают также информацию о PCI IDs и прочие идентификационные метки оборудования, которое они поддерживают. Эта информация может быть использована различными скриптами, например «hotplug» (который мы рассмотрим в следующих руководствах) для автоматического определения оборудования и загрузки соответствующих модулей.
Использование depmod
Информация о зависимостях может становиться не актуальной, особенно в случае установки новых модулей. Чтобы ее обновить, просто введите depmod -a. Программа depmod просканирует модули из вашей папки /lib/modules и обновит информацию о зависимостях. Она делает это сканируя модули в /lib/modules и проверяя так называемые «symbols» внутри модулей.
Расположение модулей ядра
Итак, как выглядят модули ядра? Для ядра 2.4, все файлы модулей обычно находятся в /lib/modules и имеют имя оканчивающееся на «.o» (для 2.6 «.ko» — прим. ред.). Чтобы увидеть все модули из /lib/modules, введите следующее:
# find /lib/modules -name ‘*.o’
/lib/modules/2.4.20-gaming-r1/misc/vmmon.o
/lib/modules/2.4.20-gaming-r1/misc/vmnet.o
/lib/modules/2.4.20-gaming-r1/video/nvidia.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/fat/fat.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/vfat/vfat.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/minix/minix.o
[список обрезан для краткости]
insmod vs. modprobe
Итак, как же подгрузить модуль в работающее ядро? Один из вариантов, использовать команду
insmod и указать ей полный путь к модулю, который вы хотите загрузить:
Хотя, обычно модули загружают используя команду modprobe. Одна из приятных вещей, которую делает modprobe это автоматическая загрузка всех необходимых зависимостей для данного модуля. Кроме того, вам не нужно указывать полный путь и расширение загружаемого модуля.
rmmod и modprobe в действии
Давайте выгрузим наш модуль fat.o и загрузим его обратно используя modprobe:
Как видите, работа команды rmmod очень похожа на работу modprobe, но имеет противоположный эффект — она выгружает указанный модуль.
Ваши помощники modinfo и modules.conf
Можете воспользоваться командой modinfo, чтобы узнать пару интересных вещей о своих любимых модулях:
Также обратите внимание на файл /etc/modules.conf. Он содержит настройки для modprobe и позволяет изменять поведение modprobe. Например, указывать какие модули загруть до/после загрузки остальных, запускать скрипты до и после загрузки модуля, и многое другое.
Структура modules.conf
Синтаксис и функциональность modules.conf достаточно сложны, и мы не будем в них сейчас углубляться (наберите man modules.conf чтобы узнать все подробности), но есть несколько вещей, которые вы должны знать об этом файле.
Во-первых, многие дистрибутивы генерируют этот файл автоматически из набора файлов в других директориях, таких как /etc/modules.d/. Например, в Gentoo Linux есть такая папка, и запуск команды update-modules прочитает все файлы из /etc/modules.d/ и объединит их в новый /etc/modules.conf. Поэтому, сделав свои изменения в файлах из /etc/modules.d/ запустите update-modules, если вы используете Gentoo. В Debian, процедура очень похожа, за исключением того, что папка называется /etc/modutils/.
Для ядер версии 2.6 аналогичные по функциональности файл и папка из каталога etc называются modprobe.conf и modprobe.d соответственно. Синтаксис там упрощен, смотрите man modprobe.conf
— Примечание редактора.
Итоги и ресурсы
Итоги
Мои поздравления; вы дошли до конца этого учебника по основам администрирования Linux! Надеюсь он помог вам немного систематизировать ваши знания о Linux. Пожалуйста присоединяйтесь к нам в следующем руководстве раскрывающем более продвинутые аспекты администрирования, такие как права доступа, управление пользователями, файловую систему, монтирование и многое другое. В следующем руководстве мы будем опираться на фундамент, заложенный здесь. И помните, продолжая изучать эту серию руководств, вы уже совсем скоро будете готовы сдаче экзаменов на получение сертификата LPIC Level 1 от Linux Professional Institute.
Ресурсы
Говоря о сертификации LPIC, если вы действительно в ней заинтересованы, то я настоятельно рекомендую вам изучить следующие источники, которые были тщательно выбраны для расширения знаний полученных в этом руководстве.
В сети есть множество хороших руководств по регулярным выражениям. Вот парочка:
Можете прочитать стандарт иерархии файловой системы (Filesystem Hierarchy Standard) на http://www.pathname.com/fhs/.
В серии Bash в примерах (будет перевод), я покажу вам как использовать инструкции bash для написания ваших собственных скриптов. Это серия (особенно первая и вторая части) будет хорошей подготовкой к экзамену LPIC Level 1:
Вы можете узнать больше о sed в серии руководств Sed в примерах (будет переведено). Если вы планируете сдавать LPI экзамен, убедитесь что прочитали первые две части этой серии.
Чтобы узнать больше об awk, обратитесь к серии Awk в примерах (перевод будет).
Если вы не знакомы с редактором vi, Я настоятельно рекомендую вам посмотреть мое руководство Vi — the cheat sheet method. Этот учебник станет легким, но и стремительным введением в этот мощный текстовый редактор. Считайте, что это материал необходимый к прочтению, если вы не знаете как пользоваться vi.
Спасибо Dmitry Minsky (Dmitry.Minsky@gmail.com) за перевод.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Источник
Howto: Linux Add or Remove a Linux Kernel Modules / Drivers
=> Under MS-Windows you use term device driver for modules.
=> Under Linux you use term modules for device drivers.
Tutorial details | |
---|---|
Difficulty level | Advanced |
Root privileges | Yes |
Requirements | modprobe/lsmod/modinfo utilities |
Est. reading time | N/A |
=> The Linux kernel has a modular design.
=> At boot time, only a minimal resident kernel is loaded into memory.
=> If you add new hardware you need to add driver i.e. modules.
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
=> The modprobe command intelligently adds or removes a module from the Linux kernel
=> Usually, all Linux kernel modules (drivers) are stored in the module directory located that /lib/modules/$(uname -r) directory. To see current modules, type:
$ ls /lib/modules/$(uname -r)
Output:
Use the following command to list all drivers for various devices:
$ ls /lib/modules/$(uname -r)/kernel/drivers/
Sample outputs:
Fig.01: Device drivers on my Linux based system
Task: Add a Module (driver) Called foo
Type the following command as root user:
# modprobe foo
In this example, I am loading a module called i8k, enter:
# modprobe -v i8k
Sample outputs:
Find out info about loaded module
You need to use the modinfo command to see information about a Linux Kernel module. The syntax is:
# modinfo -v
# modinfo i8k
Sample outputs:
Fig.02: Displaying information about a Linux Kernel module called i8k
Task: List all loaded modules
Use the lsmod command to show the status of modules in the Linux Kernel:
# lsmod
Sample outputs:
Task: Remove a module called foo
Pass the -r option to modprobe command to remove a module, type:
# modprobe -r foo
You can also use the rmmod command, which is simple program to remove a module from the Linux Kernel:
# rmmod foo
Recommended readings
- man pages – modinfo, lsmod, insmod, and modprobe
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
when the system is rebooted the module inside the kernel will not be present.But i want the modules to be seen permenently.what should i do.
Thanks alot for this, very helpful for teh newbz.
Thank’s first for the helpfull command , where can i get the new modules other then my OS,
how to build linux kernel module with new device driver module during build
Thanks a lot for the info…:) 🙂
Hi there…
I am trying to remove TCP IP from a linux kernel, and want to recompile the LINUX kernel. But being a novice with the administrations of the linux (UBUNTU 10.4), I know a little about it. Agter recompilation can I again design mu own TCPIP using the C language code?
Guys please help me out…waiting for the reply .
Regards…
Thanks for this very short but very clear information. That helps me to understand the concept (of add or remove module on Linux) very much.
One question remain: how do we check to know what modules are available to add on a existing system?
Thank you in advance!
One question remain: how do we check to know what modules are available to add on a existing system?
cd to /lib/modules/$(uname -r) directory and you can see the list of available modules (run as root):
The following will list all drives
To find out more info about a module called foo:
Hope this helps!
Hi
thanks for your comments, I am trying to write a printer driver for linux, what should I do?
Please help me on this task.
Does anyone knows step by step guide for how to install ip_conntrack support into kernel Linux linux 2.6.35.14-106.fc14.i686 #1 SMP Wed Nov 23 13:57:33 UTC 2011 i686 i686 i386 GNU/Linux
I am unable to remove the following modules after issuing the commands.
$ rmmod usbhid and
$rmmod hid..
After issuing the commands the modules are not shown in “lsmod” but as soon as a device is added they again get loaded.
thanks, very clear article.
Hello there. I have an old computer Celeron, 128MB RAM and 28MB of VGA. What I want to do is keep the drivers that are needed for my system. Like if I use the Realtek Chipset for Network Card why should the Atheros driver be present on the system? Is there any way to accomplish this task?
Regards.
I have a serious problem, my Linux does not have these comands:
apt-get
uname
modprobe
mknod
man
…etc… and also has not a lot of typical commands
And there is no /dev/loop*
And mount -o loop blablabla bleble say incorrect option, does not undertand loop.
Of course, all problem seem that Kernel has no loop device support.
How can i fix it?
Please have in mind Kernel is on ROM (a chip not writteable), it is not a flasheable chip, i can not modify it on any way, … read only memory chip!!
I wish if it could be possible to add loop device support at run time as a module…
But it does not have modprobe command… neither a lot of clasic Linux commands… so i got to fail.
Need some help, i am not an expert.
Step 1: try to create /dev/loop0 (it does not exists) with mknod but mknod command not found
Try to add such coomands with apt-get, wget, etc… all says such commands not exists
I am getting mad…
Please note it is an ARM processor based, and Kernel is on a ReadOnly chip not flashable.
Thanks in advance for any help… i am getting really mad…
If I were you, rather than finding Linux Kernel modulos to have “uname”, “modprobe”, “man” recovered (maybe you have played around some kernel rebuild and screwed up some basic binaries?), I will re-install the entire Linux OS from scratch. You can download CentOS (Red Hat) or SUSE, Fedora or whatever Linux to have all these basic utilities included.
trying to add slcan module to kernel 2.6.32-504.30.3.el6.i686 but having problems with the following response … question is how to get it added
FATAL: Module slcan not found.
Thank you so much…
i want to know how many mouldes in linus and brief explanation of them.i will glad if my question is been answered.
hi all,
iam unable to remove nvme module in primary drive(ssd) by using
following comment:
rmmod nvme
Источник