Saltar al contenido

Команда Linux / Unix: modprobe

2 de mayo de 2021

Ядро Linux переросло у велику частину програмного забезпечення. У чомусь це добре. В інших це робить його дещо негнучким. Рішення полягає в розбитті частин ядра на модулі. Ці модулі можна завантажувати чи ні, враховуючи конфігурацію комп’ютера та ваші потреби. Команда modprobe завантажує нові модулі ядра в систему Linux, дозволяючи вмикати нові функції та підтримку без перезавантаження.

Портрет молодого архітектора, використовуючи ноутбук в офісі

Westend61 / Getty Images

Змістовий покажчик

Використання Modprobe

Modprobe, як правило, простий у використанні. Дізнавшись модуль ядра, який ви хочете завантажити, передайте його команді modprobe. sudo modprobe rtl8723de

Це все. Модуль завантажується до перезавантаження системи. Якщо ви хочете видалити модуль без перезавантаження, повторіть команду за допомогою -r прапор. sudo modprobe -r rtl8723de

Здебільшого так ви будете працювати з modprobe. Щоб дізнатись більше, перегляньте технічну документацію нижче.

Технічна документація Modprobe

Команда modprobe виконує обробку завантажуваних модулів на високому рівні.

Конспект

modprobe [-adnqv] [-C config] модуль [symbol=value …] modprobe [-adnqv] [-C config] [-t type] візерунок modprobe -л [-C config] [-t type] візерунок modprobe -c [-C config] modprobe -r [-dnv] [-C config] [module …] modprobe -Вх

Варіанти

, –всі

Завантажте всі відповідні модулі замість зупинки після першого успішного завантаження.

-c, –showconfig

Показати поточну конфігурацію.

, –config конфігурація

Використовуйте файл конфігурація замість (необов’язково) /etc/modules.conf щоб вказати конфігурацію. Змінна середовища МОДУЛЕКОНФ також може використовуватися для вибору (і заміни) іншого файлу конфігурації, відмінного від типового /etc/modules.conf (або /etc/conf.modules який є застарілим). Коли середовище змінна UNAME_MACHINE встановлено, modutils використовує його значення замість машинного поля із системного виклику uname (). Це в основному корисно при компіляції 64-розрядних модулів у 32-розрядному просторі користувача або навпаки, встановленому UNAME_MACHINE типу модулів. Поточні модулі не підтримують повний перехресний режим для модулів, він обмежений вибором між 32-розрядною та 64-розрядною версіями хост-архітектури.

-d, –налагоджувати

Показати інформацію про внутрішнє представлення стека модулів.

, –допомога

Відобразіть зведення варіантів і негайно вийдіть.

, –autoclean

Встановіть авточистку на завантажені модулі. Використовується ядром, коли воно викликає modprobe для задоволення відсутньої функції (постачається як модуль). -q варіант передбачається . Ці параметри автоматично надсилаються на insmod.

, –шоу

Не виконуйте дії, лише покажіть, що було б зроблено.

-q, –тихо

Не скаржтесь на те, що insmod не вдалося встановити модуль. Продовжуйте як зазвичай, але мовчки, з іншими можливостями для тестування modprobe. Ця опція автоматично надсилається на insmod.

-r, –видалити

Видаліть модуль (стеки) або виконайте автоочищення, залежно від того, чи є в командному рядку згадані модулі.

-s, –syslog

Звіт через syslog замість stderr. Ця опція автоматично надсилається на insmod.

тип модуля; –тип тип модуля

Враховуйте лише модулі цього типу. modprobe розглядає лише модулі, шлях до каталогу яких точно включає / тип модуля /. тип модуля може містити більше одного імені каталогу, наприклад, драйвери / нет списки модулів у xxx / drivers / net / та його підкаталоги.

-v, –вербозний

Роздрукуйте всі команди під час їх виконання.

-V, –версія

Відображення версії modprobe. Назви модулів не повинні містити шляхи (no /), а також назва не може містити кінцевий результат .o. Наприклад, ковзання є дійсним ім’ям модуля для modprobe, /lib/modules/2.2.19/net/slip і slip.o недійсні. Це стосується командного рядка та записів у конфігурі.

Опис команди

Службові програми modprobe та depmod призначені для того, щоб зробити модульне ядро ​​Linux більш керованим для користувачів, адміністраторів та тих, хто підтримує розподіл. Modprobe використовує файл залежностей, схожий на Makefile, створений depmod, для автоматичного завантаження відповідних модулів із набору модулів, доступних у попередньо визначених деревах каталогів. Modprobe використовується для завантаження одного модуля, стека залежних модулів або всіх модулів, позначених заданим тегом. Modprobe автоматично завантажує всі базові модулі, необхідні в стек модулів, як описано у файлі залежностей module.dep. Якщо завантаження одного з цих модулів не вдається, весь поточний стек модулів, завантажених у поточному сеансі, вивантажується автоматично. Modprobe має два способи завантаження модулів. Один із способів (режим зондування) спробує завантажити модуль зі списку (визначеного візерунок). Modprobe припиняє завантаження, як тільки один модуль успішно завантажується. Це може бути використано для автоматичного завантаження одного драйвера Ethernet зі списку. Інший спосіб використання modprobe – це завантаження всіх модулів зі списку. З опцією -r, modprobe автоматично вивантажує стек модулів, подібно до способу rmmod -r робить. Використовуючи лише modprobe -r очищає невикористані автоматично завантажені модулі, а також виконує команди попереднього та подальшого видалення у файлі конфігурації /etc/modules.conf. Поєднання варіантів і перераховує всі доступні модулі певного типу. Варіант -c друкує поточну конфігурацію (файл за замовчуванням + конфігурація).

Конфігурація

Поведінку modprobe (і depmod) можна змінити (додатковим) файлом конфігурації /etc/modules.conf. Детальний опис вмісту цього файлу, а також конфігурацію за замовчуванням, яку використовують Depmod та Modprobe, див module.conf(5). Команди попереднього та подальшого видалення не виконуються, якщо модуль автоматично очищений kerneld. Натомість шукайте нову підтримку постійного зберігання модулів. Якщо ви хочете скористатися функціями перед та після встановлення, вимкніть autoclean для kerneld і замість цього поставте щось на зразок наступного рядка в crontab (це також використовується для систем kmod), щоб робити autoclean кожні 2 хвилини: * / 2 * * * * test -f / proc / modules && / sbin / modprobe -r

Стратегія

Ідея полягає в тому, що modprobe буде виглядати першим у каталозі, що містить модулі, скомпільовані для поточного випуску ядра. Якщо модуля там не знайдено, modprobe шукає каталог, загальний для версії ядра (наприклад, 2.0, 2.2). Якщо модуля все ще не знайдено, modprobe шукає у каталозі, що містить модулі, випуск за замовчуванням тощо. Коли ви встановлюєте новий Linux, модулі слід перемістити в каталог, пов’язаний з випуском (і версією) ядра, яке ви встановлюєте. Потім зробіть символічне посилання з цього каталогу на каталог за замовчуванням. Кожного разу, коли ви компілюєте нове ядро, це команда зробити module_install створює новий каталог, але не змінить посилання за замовчуванням. Коли ви отримаєте модуль, не пов’язаний з розподілом ядра, помістіть його в один із незалежних від версії каталогів під / lib / модулі. Це стратегія за замовчуванням, яку можна замінити /etc/modules.conf.

Приклади

modprobe -t net

Завантажте один із модулів, які зберігаються в позначеному каталозі чистий. Кожен модуль пробується до успіху.

modprobe -a -t завантаження

Всі модулі, які зберігаються в каталогах, позначені тегами завантаження завантажуються.

ковзання modprobe

Це намагається завантажити модуль slhc.o якщо він раніше не завантажувався, оскільки модулю ковзання потрібна функціональність модуля slhc. Ця залежність описана у файлі module.dep що було автоматично створено depmod.

modprobe -r ковзання

Це розвантажує модуль ковзання. Він також автоматично вивантажує модуль slhc, якщо він також не використовується іншим модулем (наприклад, ppp).

Дивитися також: depmod (8), lsmod (8), kerneld (8), ksyms (8), rmmod (8).

Безпечний режим

Якщо ефективна uid не дорівнює реальній uid, тоді modprobe ставиться до її вводу з крайньою підозрою. Останній параметр завжди трактується як ім’я модуля, навіть якщо він починається з . Ім’я модуля та параметри форми можуть бути лише одними змінна = значення заборонені. Ім’я модуля завжди трактується як рядок, мета розширення не виконується в безпечному режимі. Однак мета-розширення застосовується до даних, що зчитуються з конфігураційного файлу. euid може не дорівнювати uid, коли modprobe викликається з ядра, це стосується ядер 2.4.0-test11 та пізніших версій. В ідеальному світі modprobe міг довіряти ядру лише передавати допустимі параметри modprobe. Однак стався принаймні один локальний експлойт, оскільки код ядра високого рівня передавав неперевірені параметри безпосередньо від користувача до modprobe. Тож modprobe більше не довіряє введенню ядра. modprobe автоматично встановлює безпечний режим, коли оточення складається лише з цих рядків HOME = /
ТЕРМІН = Linux
PATH = / sbin: / usr / sbin: / bin: / usr / bin

Це виявляє виконання modprobe з ядра на ядрах 2.2, хоча 2.4.0-test11, навіть якщо uid == euid, як це робиться на попередніх ядрах.

Командування журналу

Якщо каталог / var / log / ksymoops існує, і modprobe запускається з опцією, яка може завантажити або видалити модуль, modprobe реєструє свою команду і повертає статус у / var / log / ksymoops / ‘date +% Y% m% d.log’. Немає перемикача для відключення цього автоматичного ведення журналу, якщо ви не хочете, щоб це відбувалося, не створюйте / var / log / ksymoops. Якщо цей каталог існує, він повинен належати root і бути в режимі 644 або 600, і ви повинні запустити скрипт insmod_ksymoops_clean щодня або близько того.

Необхідні утиліти

depmod (8), insmod (8). Використовувати людина команда (% людина), щоб побачити, як команда використовується на вашому комп’ютері.