리눅스 커널
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 |