별의 공부 블로그 🧑🏻‍💻
728x90
728x170

모듈 (modules.dep, depmod)

모듈(Module)

  • 모듈의 사전적 의미
    • 프로그램이나 하드웨어 기능 단위
    • 교환 가능한 구성 부분
  • 모듈을 사용하면 시스템 메모리를 절약할 수 있다.
    • 커널 모듈이 필요할 때, 커널 이미지에 합류
    • 커널 모듈이 필요하지 않은 경우, 커널에서 빠져 나와 모듈 형태로 존재
  • 보통 모듈이 로드되었다는 것은 커널 밖에 존재하던 해당 드라이버가 커널의 일부로 되었다는 것을 의미한다.
    • 언로드하면 다시 커널과 별도로 존재한다.

 

모듈 관리

  • 리눅스 시스템에서 시스템 장치를 제어하는 코드는 컴파일되어 커널에 포함될 수 있다.
  • 기본적으로 커널은 모놀리식(Monolithic) 방식으로 구성된다.
    • 모놀리식(Monolithic) : 시스템 장치를 제어하는 기능을 내장하고, 하나의 덩어리 형태로 구성되는 방식
  • 커널이 시스템의 모든 하드웨어를 관리하지만, 융통성이 뛰어나지 못해 시스템에 새로운 장치가 추가될 경우 커널을 새롭게 만들어야 할 필요가 있다.
    • 이러한 문제점을 해결하기 위해 모듈(Module)이 사용된다.
  • 리눅스 커널 모듈
    • C 컴파일러로 만들어진 오브젝트 파일
    • *.ko 형태로 생성된다.
    • 각 시스템에서 가능한 모듈은 /lib/modules/커널버전/kernel 디렉터리 안에 생성되어 있다.

 

# ls /lib/modules/3.10.0-1160.el7.x86_64/
build              modules.builtin      modules.modesetting  source
extra              modules.builtin.bin  modules.networking   updates
kernel             modules.dep          modules.order        vdso
modules.alias      modules.dep.bin      modules.softdep      weak-updates
modules.alias.bin  modules.devname      modules.symbols
modules.block      modules.drm          modules.symbols.bin

 

# ls /lib/modules/3.10.0-1160.el7.x86_64/kernel/
arch  crypto  drivers  fs  kernel  lib  mm  net  sound  virt

 

# ls /lib/modules/3.10.0-1160.el7.x86_64/kernel/drivers/acpi
acpi_extlog.ko.xz  acpi_pad.ko.xz  custom_method.ko.xz  nfit       sbshc.ko.xz
acpi_ipmi.ko.xz    apei            ec_sys.ko.xz         sbs.ko.xz  video.ko.xz

 

모듈 관련 명령어

① lsmod

  • 리눅스 커널에 적재된 모듈 정보를 출력하는 명령
  • 다음의 정보를 순서대로 출력한다.
    • 모듈명
    • 크기
    • 다른 모듈에서 사용 중인 수
    • 사용 중인 모듈

 

사용법

$ lsmod

 

② insmod

  • 커널에 모듈을 적재하는 명령
  • 해당 모듈은 자동으로 검색되고 삽입된다.
  • 이 명령을 사용하기 위해서는 해당 모듈 파일이 존재하는 디렉터리까지 이동해야 한다.
  • 의존성이 있는 모듈인 경우에는 적재할 수 없다.

 

사용법

# insmod 모듈파일명

 

사용 예

  • ip_tables.ko 모듈을 커널에 적재함.
# insmod ip_tables.ko

 

③ rmmod

  • 커널에서 모듈을 제거하는 명령
  • 다른 모듈에 의해 사용 중인 모듈은 제거할 수 없다.

 

사용법

# rmmod 모듈

 

사용 예

  • ip6table_filter 모듈을 제거함.
# rmmod ip6table_filter

 

 modprobe

  • 리눅스 커널에 모듈을 적재하거나 제거하는 명령
  • insmod rmmod 명령은 다른 모듈에 의존되어 있는 경우에는 사용 불가능하다.
    • modprobe 단일 모듈, 의존성이 있는 여러 모듈, 특정 디렉리의 모든 모듈들을 적재 할 수 있다.
      • 만일 모듈이 다른 모듈에 의존하고 있을 경우, 필요한 모듈을 먼저 적재한다.
      • 최상위 모듈 디렉터리에 존재하는 modules.dep 파일을 참고해 모듈간의 의존성을 해결한다.
  • modprobe 는 모듈에 '기호=값' 형식을 이용하여 매개 변수를 전달할 수 있다.

 

사용법

# modprobe [option] 모듈 [기호=값]

 

주요 옵션

옵션 설명
-l 사용 가능한 모듈 정보 출력
-r - 모듈을 제거할 때 사용하는 옵션
- 의존성이 있는 모듈을 찾아서 사용되지 않는다면 자동으로 제거함.
-c 모듈 관련 환경 설정 파일의 내용을 전부 출력

 

사용 예

  • 사용 가능한 모듈 정보 출력
# modprobe -l

 

  • ip6table_filter 라는 모듈을 제거하면서 관련 모듈(ip6_tables)도 같이 제거함.
# modprobe -r ip6table_filter

 

  • ip6table_filter 라는 모듈을 적재하면서 의존 모듈(ip6_tables)도 같이 적재함.
# modprobe ip6table_filter

 

 modinfo

  • 모듈 파일에 대한 정보를 출력하는 명령

 

사용법

$ modinfo [option] 모듈파일명

 

사용 예

  • 3c59x.ko 모듈에 대한 정보 출력 
$ modinfo 3c59x.ko

 

모듈 관련 설정 파일

  • 부팅 시 특정 모듈을 커널에 적재할 경우
    • 리눅스 커널 2.4 버전
      • /etc/modprobe.conf 파일에 등록해서 사용했다.
    • 리눅스 커널 2.6 버전부터
      • /etc/modprobe.d 디렉터리 안에 .conf 로 끝나는 모든 파일을 인식한다.
  • CentOS 7 버전부터는 /etc/modprobe.d  /lib/modprobe.d 디렉터리 내의 *.conf 파일 내용을 인식한다.

 

# ls /etc/modprobe.d
dccp-blacklist.conf     lockd.conf  nvdimm-security.conf  tuned.conf
firewalld-sysctls.conf  mlx4.conf   truescale.conf

 

주요 항목

항목 설명
alias  특정 모듈에 별칭을 부여할 때 사용
options  특정 모듈에 특정한 값을 전달할 때 사용
install - 모듈을 적재할 때, 특정 명령을 지정할 경우에 사용
- 보통 첫 번째 모듈 적재 명령이 실패할 경우를 대비해서 두 번째 명령도 같이 지정할 때 사용
remove  특정 모듈을 제거할 때 여러 상황을 지정하여 사용
blacklist blacklist  특정 모듈을 제한할 때 사용

 

모듈 의존성 파일 : modules.dep

  • 모듈 간의 의존성을 기록한 파일
  • /lib/modules/커널버전 디렉터리 안에 위치한다.
  • 이 파일에는 다음이 기록된다.
    • 모듈 파일명
    • 콜론(:) 이후에 의존성 있는 모듈 파일명이 차례로 나열된다.
  • 모듈 간의 의존성이 변경되면 modules.dep 파일의 내용이 변경되어야 modprobe 명령이 정상적으로 동작한다.
    • 이 파일을 갱신하고 관리해 주는 명령 : depmod

 

# cat modules.dep | more
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko.xz:
kernel/arch/x86/crypto/ablk_helper.ko.xz: kernel/crypto/cryptd.ko.xz
kernel/arch/x86/crypto/glue_helper.ko.xz:
kernel/arch/x86/crypto/camellia-x86_64.ko.xz: kernel/crypto/xts.ko.xz kernel/cry
pto/lrw.ko.xz kernel/crypto/gf128mul.ko.xz kernel/arch/x86/crypto/glue_helper.ko
.xz
kernel/arch/x86/crypto/blowfish-x86_64.ko.xz: kernel/crypto/blowfish_common.ko.x
z
kernel/arch/x86/crypto/twofish-x86_64.ko.xz: kernel/crypto/twofish_common.ko.xz
kernel/arch/x86/crypto/twofish-x86_64-3way.ko.xz: kernel/arch/x86/crypto/twofish
-x86_64.ko.xz kernel/crypto/twofish_common.ko.xz kernel/crypto/xts.ko.xz kernel/
crypto/lrw.ko.xz kernel/crypto/gf128mul.ko.xz kernel/arch/x86/crypto/glue_helper
.ko.xz
kernel/arch/x86/crypto/salsa20-x86_64.ko.xz:
kernel/arch/x86/crypto/serpent-sse2-x86_64.ko.xz: kernel/crypto/xts.ko.xz kernel
/crypto/serpent_generic.ko.xz kernel/crypto/lrw.ko.xz kernel/crypto/gf128mul.ko.
xz kernel/arch/x86/crypto/glue_helper.ko.xz kernel/arch/x86/crypto/ablk_helper.k
o.xz kernel/crypto/cryptd.ko.xz
kernel/arch/x86/crypto/aesni-intel.ko.xz: kernel/crypto/lrw.ko.xz kernel/crypto/
gf128mul.ko.xz kernel/arch/x86/crypto/glue_helper.ko.xz kernel/arch/x86/crypto/a
blk_helper.ko.xz kernel/crypto/cryptd.ko.xz
kernel/arch/x86/crypto/ghash-clmulni-intel.ko.xz: kernel/crypto/cryptd.ko.xz

 

모듈 의존성 관련 명령어 : depmod

  • 커널 모듈 간의 의존성을 관리하는 명령어
  • /lib/modules/커널버전/modules.dep 파일과 맵 파일을 생성한다.

 

사용법

# depmod [option] [파일명]

 

주요 옵션

주요 옵션 설명
-a - modules.dep 와 맵 파일을 새롭게 생성함.
- --all
-A - 새롭게 추가된 모듈이 있는 경우에만 갱신함.
- --quick
-h - 명령어의 사용법을 화면에 출력함.
- --help

 

사용 예

  • modules.dep 파일의 정보를 갱신함.
# depmod

 

  • modules.dep 파일과 같은 디렉터리 내에 있는 맵 파일들을 새롭게 갱신함.
# depmod -a

 

문제 해결 전략

  • 모듈 관련 문제가 나오면 modules.dep 파일과 depmod 명령어를 떠올린다.
    • find / -name "*modules.dep*" 명령을 사용하면 modules.dep 파일이 위치한 경로를 확인할 수 있다.
      • /usr/lib/modules/(커널버전)/modules.dep
  • man modules.dep 명령을 사용하여 메뉴얼을 보면서 문제를 해결한다.
  • man depmod 명령을 사용하여 메뉴얼을 보면서 문제를 해결한다.

 

문제 유형

① 모듈 관련 작업이 주어진 후, 각 작업을 실행하기 위한 명령어를 넣는 문제

가. 커널 모듈 간의 의존성 정보를 확인한다.
# cat (  /usr/lib/modules/(커널버전)/modules.dep  )

나. 모듈 간의 의존성 변경으로 인해 파일 정보가 갱신되어 관련 명령어를 실행한다.
# (  depmod  )
728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖