/ proc / sys vs / sys / модулі / mod / параметр


10

Останні кілька днів я цікавився, як саме це працює. Ми можемо встановлювати параметри виконання ядра за допомогою sysctl або, echo boolen 1> /proc/sys/module/exactParameterале /sys/modules/module/parameters/parameterтакож можемо встановлювати значення.

Чи параметри для модулів, /proc/sys/пов'язані тільки з жорстким чином, дотримуються в ядрі? чи можуть бути параметри для завантажуваних модулів ядра?

LKM після завантаження в запуск Kernel розкриває їх параметри в /sys/modules/module/paraeter/params. Це означає, що немає параметрів для модулів, зібраних у ядро?

У чому різниця між обома каталогами.

Відповіді:


5

Між /proc/sysта /sysіншим, окрім того, що обидва є інтерфейсами ядра та збігом імен, існує мало співвідношення .

/proc/sysє інтерфейсом до sysctl , які є параметрами конфігурації ядра. Читання або модифікація /proc/sys/foo/barеквівалентна отримання або встановленню foo.barsysctl. Значення Sysctl організовані за семантичними категоріями, вони не є внутрішньо пов'язаними зі структурою ядра. Багато значень sysctl - це параметри, які присутні у кожній системі Linux незалежно від того, в яких драйверах чи функціях зібрано; деякі стосуються додаткових функцій (наприклад, певних мережевих протоколів), але ніколи не стосуються конкретних апаратних пристроїв.

/sys/moduleє, як вказує ім'я, інтерфейсом до модулів ядра. Кожен каталог відповідає одному модулю ядра. Ви можете читати та інколи змінювати параметри модуля foo, записуючи на /sys/module/foo/parameters/*.

Компоненти, завантажені в ядро, зчитують їх параметри з командного рядка ядра. Ці параметри неможливо встановити під час виконання (принаймні, не через автоматично створений інтерфейс, наприклад /sys/module: компонент може відкрити для цього спеціальний інтерфейс).


Отже, для модулів, зібраних у ядро, я можу додавати параметри лише через командний рядок ядра (наприклад: / proc / cmdline). Немає іншого способу змінити їх під час виконання? Я правильно зрозумів? Отже, які саме ці параметри ядра (конфігурації)? Я думав , що вони мінливі параметри деяких модулів , зібраних в Kernel
аст

@ast Параметри sysctl задокументовані в документації Documentation/sysctl/*.txtна ядро ​​Linux. Це набір параметрів, які в основному застосовуються незалежно від того, які функції та драйвери компілюються в певне ядро.
Жил "ТАК - перестань бути злим"

велике спасибі, я намагався повністю зрозуміти ці стосунки і витратив 3 дні на читання багатьох речей, щоб знайти відповідь.
ast

3

Документ " Файлова система sysfs " Патріка Мохеля дасть вам набагато кращий огляд мети та історії, /sysніж вміститься в цьому полі. Цитуючи реферат:

sysfs - це функція ядра Linux 2.6, яка дозволяє коду ядра експортувати інформацію в користувацькі процеси через систему пам'яті. Організація ієрархії директорій файлів є чіткою і заснована на внутрішній організації структур даних ядра. Мережі, що створюються в fi лесистемі, - це (здебільшого) ASCII fi les з (зазвичай) одним значенням на полі. Ці функції забезпечують точність та доступність доступної інформації, що експортується, що робить sysfs однією з найбільш інтуїтивно зрозумілих та корисних функцій ядра 2.6.

Відповідаючи на ваше конкретне запитання "Чи отримує представлення модуль ядра /sys?" відповідь "так, якщо автор модуля надає інтерфейс". Це можна легко продемонструвати, показавши, скільки завантажених модулів мають відповідні записи/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

що в моїй системі показує, що 73 з 73 завантажуваних модулів мають відповідний запис /sys/module.


Я знайшов інформацію, особливо про / sys / module /, що завжди є кожен LKM та module_param (ім'я, тип, perm) впливає на зовнішній вигляд параметрів каталогу. Але у мене ще є питання щодо sysctl та / proc / sys, де ми можемо встановити параметри виконання ядра. Чому не можливо використовувати / sys / модулі? І де ми встановлюємо параметри для компільованих модулів Kernel (/ sys / module / або в / proc / sys / too)? Може бути , я змішую параметри ядра з параметрами модуля (я думав , що вони такі ж) , так що з допомогою SYSCTL я повинен встановити модуль параметра або деякі функціональні можливості ядра
аст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.