/ proc / sys vs / sys / modules / mod / параметр


10

Последние несколько дней мне было интересно, как именно это работает. Мы можем установить параметры времени выполнения ядра, используя sysctl или, echo boolen 1> /proc/sys/module/exactParameterно /sys/modules/module/parameters/parameterмы также можем установить значения.

Параметры для модулей /proc/sys/связаны только с жестким соответствием в ядре? или также могут быть параметры для загружаемых модулей ядра?

LKM после загрузки в работающее ядро ​​показывает их параметры в /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

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

Большое спасибо, я пытался полностью понять эти отношения и потратил 3 дня на чтение множества вещей, чтобы найти ответ.
аст

3

Статья Патрика Мохеля «Файловая система sysfs » даст вам гораздо лучший обзор цели и истории, /sysчем уместится в этом окне. Цитирую аннотацию:

sysfs - это функция ядра Linux 2.6, которая позволяет коду ядра экспортировать информацию в пользовательские процессы через файловую систему в памяти. Организация иерархии каталогов файловой системы является строгой и основана на внутренней организации структур данных ядра. Файлы, созданные в файловой системе, являются (в основном) файлами ASCII с (обычно) одним значением на файл. Эти функции гарантируют, что экспортируемая информация является точной и легко доступной, что делает 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 / modules /, о том, что всегда есть каждый LKM, и module_param (name, type, perm) влияет на появление параметров каталога. Но у меня все еще есть вопросы о sysctl и / proc / sys, где мы можем установить параметры времени выполнения ядра. Почему нельзя использовать / sys / modules? И где мы устанавливаем параметры для модулей, скомпилированных ядром (/ sys / modules / или в / proc / sys / тоже)? Может быть, я смешиваю параметры ядра с параметрами модуля (я думал, что они одинаковы), поэтому, используя sysctl, я должен установить параметр модуля или некоторую функциональность ядра
ast
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.