Модулі ядра linux
Як ви знаєте з статті що таке ядро Linux, ядро є монолітним. Це означає, що весь виконуваний код зосереджений в одному файлі. Така архітектура має деякі недоліки, наприклад, неможливість установки нових драйверів без пересборки ядра. Але розробники знайшли рішення і цієї проблеми, додавши систему модулів.
Ядро Linux дозволяє драйверам обладнання, файлових систем, і деяким іншим компонентам бути скомпільованими окремо - як модулі, а не як частина самого ядра. Таким чином, ви можете оновлювати драйвер не пересобірая ядро, а також динамічно розширювати його функціональність. А ще це означає, що ви можете включити в ядрі тільки найнеобхідніше, а все інше підключати за допомогою модулів. Це дуже просто.
У цій статті ми розглянемо модулі ядра Linux, основи роботи з ними, перегляд вже завантажених модулів, завантаження, установку і відключення модулів. А також повне відключення, додавання в чорний список і додавання нових модулів ядра.
Відео: Внутрішнє пристрій ядра Linux
основи
Модулі ядра Linux збираються тільки під певну версію ядра, є спосіб запуску модуля незалежно від версії ядра, якщо вони сумісні за допомогою dkms, але про це ми поговоримо пізніше.
Знаходяться всі модулі в папці / lib / modules /. З огляду на, що модулі розраховані тільки для певної версії ядра, то в цій папці створюється окрема підпапка, для кожної встановленої в системі версії ядра. У цій папці знаходяться самі модулі та додаткові конфігураційні файли, модулі відсортовані за категоріями, в залежності від призначення наприклад:
arch Documentation fs lib net soundcrypto drivers kernel mm security
Перед тим як переходити до практики, давайте коротко розглянемо основні команди для управління модулями.
- lsmod - подивитися завантажені модулі
- modinfo - інформація про модуль
- insmod - завантажити модуль
- rmmod - видалити модуль
Робота з модулями ядра Linux виконується, в основному, за допомогою цих команд, але можуть використовувати і інші.
всі модулі
Таке завдання виникає нечасто, але якщо ви хочете подивитися всі встановлені модулі ядра Linux в системі, робиться дуже просто. Всі модулі розташовані в папці / lib / modules, а тому дуже просто обчислити їх все однією командою, або навіть просто зайти в папку файловим менеджером і подивитися.
В Ubuntu команда буде виглядати ось так:
$ Find / lib / modules -name * .koЧи можемо шукати тільки для поточного ядра:
$ Modprobe -cЯкщо хочемо перевірити чи встановлений певний модуль ядра Linux, Отфильтруем висновок кожної з команд за допомогою grep:
Відео: Розробка модулів ядра Linux (0.8) | Трейлер
/lib/modules/4.1.20-11-default/weak-updates/misc/vboxnetadp.ko/lib/modules/4.1.20-11-default/weak-updates/misc/vboxvideo.ko
Що завантажено?
Всі інформація про завантажені модулях зберігається в файлі / proc / modules, ми можемо її вивести командою:
tun 32768 2 - Live 0xffffffffa07a9000vboxpci 28672 0 - Live 0xffffffffa07a1000 (O)
vboxnetadp 28672 0 - Live 0xffffffffa0632000 (O)
vboxnetflt 32768 0 - Live 0xffffffffa06f3000 (O)
af_packet 40960 8 - Live 0xffffffffa065b000
Але для цієї справи є більш цивілізовані методи. Це утиліта lsmod і modinfo. Щоб подивитися завантажені модулі ядра linux виконайте:
Module Size Used byctr 16384 2
ccm 20480 2
fuse 106496 3
bnep 20480 2
bluetooth 532480 5 bnep
Зручно перевіряти завантажений модуль за допомогою grep:
$ Modinfo fusealias: devname: fuse
alias: char-major-10-229
alias: fs-fuseblk
alias: fs-fuse
license: GPL
description: Filesystem in Userspace
author: Miklos Szeredi
alias: fs-fusectl
srcversion: 739DE4A12CE441C9FBD74C7
Тут ви можете побачити файл модуля, його ліцензію, автора і залежності. Залежності - це ті модулі, які повинні бути завантажені для його нормальної роботи. На жаль, не для всіх модулів є нормальне опис, але ви можете спробувати подивитися опис залежностей модуля.
Відео: Розробка модулів ядра на прикладі FreeBSD і Linux
Запуск модулів ядра
Завантажити модуль ядра Linux можна за допомогою команд modprobe або insmod.
Наприклад, завантажимо модуль vboxdrv
Щоб завантажити модуль ядра linux за допомогою insmod необхідно передати адресу файлу модуля:
$ Sudo modprobe -r vboxdrvІнша команда в цьому випадку виглядає трохи простіше:
rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt vboxpciЯкщо ви отримали помилку під час вивантаження модуля, значить він ще використовується іншими модулями, і спочатку потрібно вивантажити їх. Правильно відпрацювала команда не повинна нічого повертати.
$ Vi /etc/modprobe.d/blacklist.conf $ wget https://tenet.dl.sourceforge.net/project/e1000/ixgbe%20stable/4.3.15/ixgbe-4.3.15.tar.gz$ Sudo tar -xf ixgbe-4.3.15.tar.gz -C / usr / local / src
$ Sudo mv /usr/local/src/ixgbe-4.3.15/src /usr/src/ixgbe-4.3.15
Створимо конфігураційний файл:
PACKAGE_NAME = "ixgbe"PACKAGE_VERSION = "4.3.15"
BUILT_MODULE_NAME [0] = "ixgbe"
DEST_MODULE_LOCATION [0] = "/ kernel / drivers / net / ethernet / intel / ixgbe /"
AUTOINSTALL = "yes"
Додамо модуль в дерево ядра:
$ Sudo dkms build -m ixgbe -v 4.3.15І встановлюємо:
$ Dkms status | grep ixgbeвисновки
Швидше за все, вам рідко доведеться возитися з цими модулями. Але робота з модулями ядра буде необхідна, якщо ваш дистрибутив не підтримує апаратне забезпечення вашого пристрою з коробки, а також коли ви працюєте зі стороннім програмним забезпеченням, таким як VirtualBox, Vmware і т д. Але дуже корисно знати як поводитися з модулями, коли вам потрібно додати або видалити їх. Навіть якщо у вас немає необхідності в цьому зараз, ви можете протестувати, як все працює, щоб бути озброєним потім.
- Як правильно встановити xposed framework на андроїд
- Що таке ядро linux
- Що нового в linux kernel 4.9
- Як оновити ядро до 4.1 в ubuntu
- Як видалити старі ядра ubuntu
- Установка драйверів в linux
- Manjaro linux 15.12 отримає ядро 4.4 lts
- Віртуальна флешка в linux
- Оновлення драйверів ubuntu
- Реліз linux kernel 4.8 rc3
- Процес завантаження linux
- Лінус торвальдс повідомив про перший релізі linux 4.6 rc1
- Реліз ядра linux 4.8
- Adаta: нова серія високопродуктивних модулів пам`яті xpg v2
- Оновлення ядра centos 7
- Arm анонсувала мобільні ядра cortex-a73 і графічний прискорювач mali-g71
- Практикум: модулі ядра linux
- Встановлюємо параметри ядра в grub
- Оновлення ядра linux до нової версії
- Збираємо ядро linux
- Продуктивність ядра linux 4.8 vs 4.4