Модулі ядра linux

Як ви знаєте з статті що таке ядро ​​Linux, ядро ​​є монолітним. Це означає, що весь виконуваний код зосереджений в одному файлі. Така архітектура має деякі недоліки, наприклад, неможливість установки нових драйверів без пересборки ядра. Але розробники знайшли рішення і цієї проблеми, додавши систему модулів.

Ядро Linux дозволяє драйверам обладнання, файлових систем, і деяким іншим компонентам бути скомпільованими окремо - як модулі, а не як частина самого ядра. Таким чином, ви можете оновлювати драйвер не пересобірая ядро, а також динамічно розширювати його функціональність. А ще це означає, що ви можете включити в ядрі тільки найнеобхідніше, а все інше підключати за допомогою модулів. Це дуже просто.

У цій статті ми розглянемо модулі ядра Linux, основи роботи з ними, перегляд вже завантажених модулів, завантаження, установку і відключення модулів. А також повне відключення, додавання в чорний список і додавання нових модулів ядра.

Відео: Внутрішнє пристрій ядра Linux

основи

Модулі ядра Linux збираються тільки під певну версію ядра, є спосіб запуску модуля незалежно від версії ядра, якщо вони сумісні за допомогою dkms, але про це ми поговоримо пізніше.

Знаходяться всі модулі в папці / lib / modules /. З огляду на, що модулі розраховані тільки для певної версії ядра, то в цій папці створюється окрема підпапка, для кожної встановленої в системі версії ядра. У цій папці знаходяться самі модулі та додаткові конфігураційні файли, модулі відсортовані за категоріями, в залежності від призначення наприклад:

arch Documentation fs lib net sound
crypto 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 0xffffffffa07a9000
vboxpci 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 by
ctr 16384 2
ccm 20480 2
fuse 106496 3
bnep 20480 2
bluetooth 532480 5 bnep

Зручно перевіряти завантажений модуль за допомогою grep:

$ Modinfo fuse
alias: 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

$ Sudo modprobe 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 і т д. Але дуже корисно знати як поводитися з модулями, коли вам потрібно додати або видалити їх. Навіть якщо у вас немає необхідності в цьому зараз, ви можете протестувати, як все працює, щоб бути озброєним потім.

Поділися в соціальних мережах:

Схожі
Драйвери пристроїв для linux, 3-е виданняДрайвери пристроїв для linux, 3-е видання
Установка драйверів в linuxУстановка драйверів в linux
Віртуальна флешка в linuxВіртуальна флешка в linux
Процес завантаження linuxПроцес завантаження linux
Як видалити старі ядра ubuntuЯк видалити старі ядра ubuntu
Arm анонсувала мобільні ядра cortex-a73 і графічний прискорювач mali-g71Arm анонсувала мобільні ядра cortex-a73 і графічний прискорювач mali-g71
Як оновити ядро ​​до 4.1 в ubuntuЯк оновити ядро ​​до 4.1 в ubuntu
Що таке ядро ​​linuxЩо таке ядро ​​linux
Оновлення драйверів ubuntuОновлення драйверів ubuntu
Оновлення ядра centos 7Оновлення ядра centos 7
» » Модулі ядра linux