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 는 모듈에 '기호=값' 형식을 이용하여 매개 변수를 전달할 수 있다.
사용법
# 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 로 끝나는 모든 파일을 인식한다.
- 리눅스 커널 2.4 버전
- 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
- find / -name "*modules.dep*" 명령을 사용하면 modules.dep 파일이 위치한 경로를 확인할 수 있다.
- man modules.dep 명령을 사용하여 메뉴얼을 보면서 문제를 해결한다.
- man depmod 명령을 사용하여 메뉴얼을 보면서 문제를 해결한다.
문제 유형
① 모듈 관련 작업이 주어진 후, 각 작업을 실행하기 위한 명령어를 넣는 문제
가. 커널 모듈 간의 의존성 정보를 확인한다.
# cat ( /usr/lib/modules/(커널버전)/modules.dep )
나. 모듈 간의 의존성 변경으로 인해 파일 정보가 갱신되어 관련 명령어를 실행한다.
# ( depmod )
728x90
그리드형(광고전용)
'Certificate > Linux Master' 카테고리의 다른 글
[리눅스마스터 1급 실기] yum (0) | 2022.05.11 |
---|---|
[리눅스마스터 1급 실기] rpm (0) | 2022.05.11 |
[리눅스마스터 실기] 압축 유틸리티 정리 (tar, compress, gzip, bzip2, xz, zip, gcc) (0) | 2022.05.11 |
[리눅스마스터 1급 실기] 스왑(Swap) (0) | 2022.05.10 |
[리눅스마스터 1급 실기] 디스크 쿼터(Disk Quota) (0) | 2022.05.10 |
[리눅스마스터 1급 실기] 디스크 관련 정보 (UUID, blkid) (0) | 2022.05.10 |
[리눅스마스터 1급 실기] 텔넷(telnet) (0) | 2022.05.10 |
[리눅스마스터 1급 실기] 프록시(Proxy) 서버 관리 (squid) (0) | 2022.05.10 |