본문 바로가기

Linux

장치의 설치 및 관리

 

리눅스 커널

1) 커널의 개요

 

  • 유닉스를 바탕으로 리눅스 토발즈가 개발하고 GNU GPL v2 라이선스 하에 모두에게 무료로 공개.
  • 모놀리틱 커널
  • uname -r 으로 현재 커널 버전 확인

2) 커널 컴파일 순서

1. 커널 소스코드 다운로드

 커널 소스코드를 위한 타르볼 tarball 이나 gitbub 를 통해 다운로드 가능

보통 /usr/src 에 다운

$wget https://git.kernel.org/tovalds/t/linux-4.17-rc2.tar.gz

 

$tar xvzf linux-4.17-rc.tar.gz

$cd linux-4.17-rc2

 

2. 커널 컴파일에 필요한 필수 도구 설치

yum 명령어를 통해 커널 컴파일에 필요한 컴파일러 및 설치도구 설치

$sudo yum update

$sudo yum install -y ncurses-devel make gcc bc bison flex elfutils-libelf-devel openssl-devel grub2

 

3. 커널 환경설정

커널 환경설정을 하기전 기존 오브젝트파일, config 파일등 모두 제거.

$make mrproper

 

기존 커널 설정파일을 복사해 필요한 부분만 수정.

cp /boot/config-$(uname -r) .config

 

make menuconfig 명령어를 통해 커널의 기능을 활성화하거나 비활성화

 

4. 커널 컴파일

  • 커널 이미지를 생성하기 위해 컴파일.
    zImage는 1MB 미만의 작은 커널 크기일때 유용함.
    bzImage는 그 이상의 크기 커널을 컴파일할때 사용. 커널 생성후 bzip2로 압축.
    $make bzImage
  • 커널에서 사용할 모듈을 컴파일
    $make modules
  • 컴파일 완료된 모듈을 /lib/modules/kernel-version 이하에 설치
    $sudo make install
  • 커널 이미지 복사 및 부트로더 환경설정 grub.conf 등 커널을 시스템에 설치
    $sudo make modules_install
  • 시스템을 재부팅
    $sudo reboot
    $uname -r

3) 그 외 커널 컴파일 명령

1. 클린 타겟

남아있는 파일로 인해 새로운 컴파일에 영향을 줄 수 있으니 깨끗하게 지워준다.

make clean  커널 환경설정을 제외한 대부분의 파일을 모두 제거
make mrproper 커널 환경설정을 포함해 모든 파일을 모두 제거
make distclean mrproper의 동작을 모두 수행하고 추가로 백업 및 패치 파일도 모두 제거

 

2. 커널 환경설정

make config 텍스트 기반 환경설정 도구
make menuconfig 텍스트 기반 컬러 메뉴, 목록, 다이얼로그를 통한 환경설정 도구
make nconfig 좀 더 향상된 텍스트 기반 컬러메뉴를 통한 환경설정 도구
make xconfig X윈도우 환경의 Qt 기반의 환경설정 도구
make gconfig X윈도우 환경의 GTK+ 기반의 환경설정 도구

 


모듈 Module

 

1) 모듈의 개요

 

1. 모듈의 정의

커널의 기능을 확장하기 위해 메모리에 동적으로 로드 가능한 커널 오브젝트 파일.

시스템 중단 없이 메모리에 동적으로 로드하고 언로드 할 수 있음. LKM Loadable Kernel Module

 

2. 모듈의 필요성

모듈을 사용하면 커널은 그대로 두고 사용자가 필요할 때만 모듈을 메모리에 로드했다가 필요 없을때는 메모리에서 제거할 수 있음.

필요한 기능이 있으면 모듈로 작성하여 시스템 중단없이 운영체제가 동작 상태에서 모듈을 동적으로 메모리에 올려 사용.

 

3. 모듈의 특징

시스템 재시작 없이 모듈을 로드하고 필요가 없어지면 메모리에서 삭제

시스템 모듈은 일반적으로 /lib/modules/kernel-version/kernel 이하에 위치

 

2) 모듈 관련 명령어

 

1. Ismod

현재 로드된 모듈의 리스트와 정보를 출력

/proc/modules 파일의 내용을 기반으로 보기좋게 출력

 

2. insmod

커널에 모듈을 로드함. 

경로를 지정하지 않고 모듈의 파일명만 입력하면 /lib/modules/$(uname -r) 에서 모듈을 찾아 로드.

(일반적으로 모듈의 의존성을 고려하는 modprobe를 주로 사용. modprobe는 내부적으로 insmod 구현)

Ismod [filename][module-options ...]

 

모듈의 전체 경로를 통해 로드

$sudo insmod /home/francis/Desktop/dummy.ko

 

3. rmmod

커널에서 모듈을 언로드. 

보통 의존성을 고려하는 modprobe -r 옵션을 통한 모듈 언로드 선호.

rmmod [filename]

 

4. modprobe

모듈의 의존성을 고려해 모듈을 커널에 로드하거나 언로드.

의존성이 있는 모듈이 있다면 해당 모듈을 먼저 로드하고 그 다음 대상이 되는 모듈을 로드.

모듈의 의존성은 depmod 명령어에 의해 생성된 modules.dep 파일을 참조.

내부적으로 insmod 와 rmmod를 사용해 모듈을 로드하거나 제거.

 

modprobe [option] filename

 

-l, --list 로드 가능한 모듈의 리스트를 출력
-r, --remove 모듈을 제거
의존성이 있는 모듈이 존재하고 참조가 없다면 자동으로 언로드
여러 모듈 지정 가능
-c, --showconfig 모듈 관련 환경설정 파일의 내용을 모두 출력

 

5. modinfo

지정한 모듈에 대한 정보를 출력.

 

modinfo [option] filename

 

e1000 모듈의 정보를 출력

$ modinfo e1000

 

3) 모듈 관련 설정 파일

 

1. /etc/modprobe.d

modprobe 명령을 위한 환경설정 디렉터리.

해당 디렉터리 이하에 *.conf 파일을 생성.

 

2. modules.dep 

depmod 명령을 사용해 생성한 모듈 의존성 파일.

/lib/modules/${uname -r} 디렉터리 이하 모듈을 검사해 디렉터리 안에 modules.dep 파일을 생성.

modprobe는 modules.dep 파일을 바탕으로 모듈간 의존성을 파악하고 모듈을 로드.

 

 

 

 

 

'Linux' 카테고리의 다른 글

시스템 분석  (0) 2020.09.12
주변장치 관리  (0) 2020.09.06
리눅스 설치 및 관리. 일반운영  (0) 2020.08.30
리눅스 프로세스 관리  (0) 2020.08.28
파일시스템 관리  (0) 2020.08.23