/ proc / sys vs / sys / modules / mod / parameter

10

Przez ostatnie kilka dni zastanawiałem się, jak to dokładnie działa. Możemy ustawić parametry środowiska uruchomieniowego jądra za pomocą sysctl lub, echo boolen 1> /proc/sys/module/exactParameterale /sys/modules/module/parameters/parametermożemy też ustawić wartości.

Czy parametry modułów /proc/sys/odnoszą się tylko do twardego są zgodne z jądrem? czy mogą też istnieć parametry ładowalnych modułów jądra?

LKM po załadowaniu do uruchomionego jądra ujawnia swoje parametry w /sys/modules/module/paraeter/params. Czy to oznacza, że ​​nie ma parametrów modułów skompilowanych w jądrze?

Jaka jest różnica między obydwoma katalogami.

ast
źródło

Odpowiedzi:

5

Niewiele jest relacja pomiędzy /proc/sysi /syspoza faktem, że oba są interfejsy jądra i zbieżność nazwisk.

/proc/sysjest interfejsem do sysctl , które są parametrami konfiguracji jądra. Czytanie lub modyfikacja /proc/sys/foo/barjest równoważne z uzyskaniem lub ustawieniem foo.barsysctl. Wartości Sysctl są uporządkowane według kategorii semantycznych, nie są wewnętrznie związane ze strukturą jądra. Wiele wartości sysctl to ustawienia, które są obecne w każdym systemie Linux, niezależnie od tego, w jakie sterowniki lub funkcje są kompilowane; niektóre są związane z funkcjami opcjonalnymi (np. niektóre protokoły sieciowe), ale nigdy z określonymi urządzeniami.

/sys/modulejest, jak sama nazwa wskazuje, interfejsem do modułów jądra. Każdy katalog odpowiada jednemu modułowi jądra. Możesz odczytać, a czasem zmodyfikować parametry modułu foo, pisząc na /sys/module/foo/parameters/*.

Składniki ładowane do jądra odczytują swoje parametry z wiersza poleceń jądra. Te parametry nie mogą być ustawione w czasie wykonywania (przynajmniej nie przez automatycznie generowany interfejs, taki jak /sys/module: komponent może udostępnić niestandardowy interfejs do tego).

Gilles „SO- przestań być zły”
źródło
Tak więc dla modułów skompilowanych w jądrze mogę dodawać parametry tylko poprzez wiersz poleceń jądra (jak: / proc / cmdline). Nie ma innego sposobu na ich zmianę w czasie wykonywania? Czy dobrze zrozumiałem? Czym dokładnie są te parametry jądra (konfiguracji)? Myślałem, że są one changable parametry niektórych modułów opracowanych w jądrze
ast
@ast Parametry sysctl są udokumentowane w Documentation/sysctl/*.txtdokumentacji jądra systemu Linux. Jest to zestaw parametrów, które najczęściej obowiązują niezależnie od tego, które funkcje i sterowniki są wkompilowane w określone jądro.
Gilles „SO- przestań być zły”
wielkie dzięki, starałem się w pełni zrozumieć ten związek i spędziłem 3 dni na czytaniu wielu rzeczy, aby znaleźć odpowiedź.
ast
3

Artykuł „ System plików sysfs ” Patricka Mochela zapewni znacznie lepszy przegląd celów i historii /sysniż mieści się w tym polu. Cytując streszczenie:

sysfs to funkcja jądra Linuksa 2.6, która pozwala na eksport kodu jądra do procesów użytkownika za pośrednictwem systemu plików w pamięci. Organizacja hierarchii katalogów plików jest rygorystyczna i opiera się na wewnętrznej organizacji struktur danych jądra. Pliki tworzone w systemie to (głównie) pliki ASCII o (zwykle) jednej wartości na plik. Funkcje te zapewniają, że eksportowane informacje są dokładne i łatwo dostępne, co sprawia, że ​​sysfs jest jedną z najbardziej intuicyjnych i przydatnych funkcji jądra 2.6.

W odpowiedzi na konkretne pytanie „Czy moduł jądra ładowalnego ma reprezentację /sys?” odpowiedź brzmi „tak, jeśli autor modułu zapewnia interfejs”. Można to łatwo wykazać, pokazując, ile załadowanych modułów ma odpowiednie wpisy/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
…

co w moim systemie pokazuje, że 73 z 73 modułów ładowalnych ma odpowiedni wpis w /sys/module.

msw
źródło
Znalazłem informacje, szczególnie o / sys / modules /, że zawsze jest LKM i moduł_param (nazwa, typ, perm) wpływa na wygląd parametrów katalogu. Ale wciąż mam pytania dotyczące sysctl i / proc / sys, w których możemy ustawić parametry środowiska wykonawczego jądra. Dlaczego nie można zatrudnić / sys / modułów? A gdzie ustawiamy parametry dla modułów skompilowanych z jądrem (/ sys / modules / lub in / proc / sys / też)? Może mieszać opcji jądra z parametrami modułu (myślałem, że są one takie same), więc przy użyciu sysctl należy ustawić parametr modułu lub niektóre funkcje jądra
ast