/ proc / sys 및 / sys / modules / mod / parameter


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)을 통해서만 매개 변수를 추가 할 수 있습니다. 런타임에 다른 방법으로 변경할 수 있습니까? 내가 올바르게 이해합니까? 그렇다면이 커널 (구성) 매개 변수는 정확히 무엇입니까? 커널로 컴파일 된 일부 모듈의 변경 가능한 매개 변수라고 생각했습니다.
ast

@ast sysctl 매개 변수는 Documentation/sysctl/*.txtLinux 커널 설명서에 설명되어 있습니다. 특정 커널로 컴파일되는 기능과 드라이버에 관계없이 주로 적용되는 매개 변수 세트입니다.
Gilles 'SO- 악한 중지'

고마워, 나는이 관계를 완전히 이해하려고 노력하고 답을 찾기 위해 많은 것들을 읽는 데 3 일을 보냈습니다.
ast

3

Patrick Mochel의 " sysfs Filesystem " 이라는 논문 /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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.