I. 장치의 설치 및 관리
커널의 상세한 정보 확인 |
# uname -a //리눅스의 커널버전, 컴파일일자, 사용가능 플랫폼, 라이선스 정보 등 확인 |
커널의 버전만 확인 |
# uname -r |
커널이 설치된 Dir | |
커널 컴파일 작업 Dir | /usr/src/linux //컴파일시 설정한 .config 파일이 여기에 저장됨 |
2) 커널 컴파일 및 설치
커널 컴파일이란
-커널 컴파일을 통해 사용 목적에 최적화된 환경을 만들 수 있다.
-컴파일은 컴파일러를 이용하여 프로그램 소스로부터 수행 가능한 바이너리 코드를 만드는 과정이다.
-컴파일 환경 설정을 위해 하드웨어 정보를 미리 기록하여 참조한다.
일반적으로 리눅스 커널을 컴파일 해야 하는 경우
-신규 하드웨어에 대한 지원
-새로운 커널 보안 패치 적용
-버그를 수정하고 속도 개선
-기존 시스템 최적화, 성능 향상 및 관리기능 개선
[하드를 새로 추가했을 때와는 관계 없다]
[1]커널 컴파일 준비
준비 도구: 커널 소스코드, gcc 컴파일러, make 프로그램
[2]커널 다운 후 압축 해제
리눅스 커널 공식 배포 사이트: http://www.kernel.org ▶ 커널 소스 다운 ▶ 압축 해제 ▶ /usr/src 디렉터리에 위치 ▶ 커널 패키지 설치
- |
다운 받은 압축 파일이 "linux-4.15.6.tar.xz" 라고 가정 |
1 |
# tar -Jxvf linux-4.15.6.tar.xz //압축해제 |
2 |
# mv linux-4.15.6 /usr/src/ //디렉터리 이동 |
3 |
# ln -s /usr/src/linux-4.15.6 /usr/src/linux //심볼릭 링크 연결 |
4 |
/*커널 패키지 설치*/ # yum install kernel-source # yum install kernel-devel |
[3]커널 패치하기
- | 다운 받은 압축 파일이 "patch-4.15.6.xz" 라고 가정 |
1 | # mx patch-4.15.6.xz /usr/src/ //디렉터리 이동 |
2 | # unxz patch-4.15.6.xz | patch -p0 //압축해제 후 patch 명령 |
- | /*공식 커널에 제공되지 않는 외부 드라이버 패치*/ # cd /usr/src/linux # patch -p1 < /패치파일이 있는 디렉터리 경로/ide.2.6.x.patch.gz |
- | # /usr/src/linux-4.15.6/scripts/patch-kernel //patch-kernel 스크립트를 이용하는 방법 |
3 | 패치 성공시 원래 파일명에 .orig 확장자가 붙음 패치 실패시 실패한 대상 파일명에 .rej 확장자가 붙음 즉, 패치가 성공했음을 확인하기 위해선 *.rej 파일을 찾았을때 없으면 성공이다. |
# cd /usr/src/linux-4.15.6 # find . -name "*.reg" | |
4 | /*커널 이전 버전 정리*/ # cd /usr/src # rm -f linux # mv linux-4.15.5 linux.4.15.6 # ln -s linux-4.15.6 linux |
[4]커널 컴파일을 위한 작업장 청소작업
커널 컴파일을 하기 위해서 /usr/src/linux 에서 커널 컴파일 작업장 청소를 위해 "make mrproper"을 실행한다.
즉, 이 작업은 커널 컴파일시 문제가 되는, 이전에 생성되었던 오즈젝트 파일(*.o)들을 삭제하고 모든 설정과 커널의 소스를 초기 상태로 되돌리는 것이다.
# cd /usr/src/linux # make mrproper //오브젝트 및 .config파일 삭제 |
[5]커널 컴파일을 위한 커널 옵션 설정 - 환경 설정 인터페이스
초기의 컴파일 옵션 설정 방법으로 가장 세부적인 설정을 할 수 있는 반면 모든 설정에 대해 일일이 답을 해야 하고 세부적인 하드웨어 내용을 알아야 정확한 설정이 가능해서 불편하다.
◎make menuconfig(메뉴 형식의 방법)
이 방법은 ncurses 라이브러리가 설치되어 있어야 하며, 텍스트상에서 메뉴형식으로 키보드의 방향키를 이용하여 설정이 가능하다.
◎make nconfig(확장된 메뉴 형식의 방법)
메뉴 형식의 방법보다 관리자에게 더 많은 편리성을 제공하며, <F1> 부터 <F9>까지의 키를 활용한 기능이 추가 되었다.
◎make xconfig/make gconfig(X윈도우 형식)
X윈도우 모드로 설정할 수 있는 GUI환경이며, 마우스를 사용한다는 점을빼면 거의 make menuconifg방법과 흡사하다. 이 방법을 사용하려면 X 윈도우상 터미널에서 실행해야 한다. 그리고 Tcl/Tk라는 X 윈도우 그래픽 툴킷 라이브러리가 설치되어 있어야한다.
[6]커널 컴파일 및 설치(커널 컴파일 설정 이후의 커널 컴파일 과정에 관한 명령어)
이전 수행 내용 삭제와 커널 이미지 생성 |
|
||
X |
make dep |
커널 컴파일을 수행 시 의존성 관계를 설정하는 것 (커널 2.6이후에는 불필요한 과정) |
|
1 |
make clean |
이전에 수행했던 컴파일 과정에서 생성된 오브젝트 파일, 커널, 임시파일, 설정값 등을 삭제 |
# make all or # make ◀ 명령들 한번에 수행 (clean ~ m_install) |
2 |
make bzImage |
압축된 커널 이미지 생성 |
|
모듈 컴파일 및 설치 |
|||
3 |
make modules |
커널 환경설정에서 모듈로 설정한 기능들을 컴파일 (옵션 설정 단계에서 커널모듈로 선택했던 기능들) |
|
4 |
make modules_install |
컴파일된 모듈을 /lib/modules 아래에 설치 (/lib/modules/<kernel-version>/kernel) |
|
모듈의 의존성 검사 | |||
5 | depmod | 모듈의 의존성 검사 및 modules.dep 파일 생성 | |
커널 파일의 복사 및 GRUB 설정 파일 등록 | |||
6 | make install | 새로운 커널로 부팅하기 위해 커널 파일을 /boot 디렉터리로 복사 후 GRUB 설정 파일에 커널을 등록 |
1) 커널의 모듈
모듈의 개요
-리눅스는 커널의 모든 기능적인 요소들이 자신의 내부 자료구조와 함수들에 모두 접근할 수 있는 하나의 거대프로그램인 단일 커널로 이루어져있다.
-커널에 새로운 컴포넌트를 추가하기 위한 방법
<1>커널 설정을 바꾸고 다시 컴파일하기
<2>운영체제를 구성하는 컴포넌트들을 필요로 할때마다 동적으로 로드 또는 언로드하기
-사용자는 각종 명령어들(insmod, modprobe, rmmod)로 리눅스 커널 모듈을 명확하게 로드 또는 언로드 할수 있다.
-커널은 모듈을 로드할때, 엄격한 버전 검사를 통해 선택적으로 작업을 수행할 수 있도록 한다.
-모듈은 커널 코드와 똑같은 권한과 책임을 진다.
커널 모듈을 로드하기
-커널 모듈을 로드하는 방법
<1>modprobe 또는 insmod 명령을 사용하여 수동으로 모듈을 커널에 추가
<2>모듈을 필요로 할때 로드하는 것으로 이를 요구시 로딩(demand loading)이라고 함
-로드된 커널의 목록과 그들의 상관관계를 보고 싶으면 "lsmod 명령어"를 쓰면 된다. (/pro/modules를 참조해서 보여줌)
-새 모듈이 커널에 추가 시, 커널의 심볼목록을 갱신하고 새 모듈이 사용하는 모듈들을 수정해야한다.
-마지막으로 모듈의 상태는 실행중(RUNNING)으로 설정된다.
커널 모듈을 언로드하기
-rmmod 명령을 사용하여 제거된다.
-요구시 로드된 모듈은 더 이상 사용되지 않을 때 kerneld에 의해 시스템에서 자동으로 제거된다.
커널 모듈 명령어
lsmod: 커널에 적재된 모듈을 확인하는 명령어 (/proc/modules 를 참조)
insmod: 모듈을 수동으로 현재 실행중인 커널에 사용하기 위해 로드하는 명령어
rmmod: 모듈을 삭제하여 언로드하는 명령어
modprobe: 커널 모듈을 통합적으로 관리하기 위한 명령어
depmod: 타시스템에서 네트워크 카드에 관련된 드라이버를 새로 컴파일 하여 현재 시스템에 복사하여 적용할때 제일 첫 명령어
(모듈 사이의 의존성을 검사하여 modules.dep 파일을 생성하는 명령어)
modprobe에 의한 커널 모듈 통합관리
-부팅 중 자동으로 모듈을 메모리에 로딩하려면 /etc/rc.d/rc/localfdl 이나 /etc/modules.conf 파일에 설정한다.
-커널 모듈 파일들의 저장 위치는 /lib/modules/<kernel-version>/kernel/이다.
-현재 (메모리에) 로드되어 있는 커널 모듈 확인 명령어는 lsmod이다.
-현재 로드되어 있는 커널 모듈을 제거하려면 "rmmod <모듈명>"과 같이 실행한다.
-현재 로드되어 있지 않은 커널 모듈을 로드하려면 "modprobe <모듈명>"과 같이 실행한다.
modprobe 명령어 사용법
모듈 로드 |
# modprobe [ -a, -n, -v ] [ -C ] [ -t ] [모듈명] |
모듈 리스트 확인 |
# modprobe -l // "/lib/modules/<kernel-version>/kernel" 아래의 모듈 파일 출력 |
특정 커널 모듈 로드 |
# modprobe -a [모듈명] |
특정 커널 모듈 제거 [or autoclean] |
# modprobe -r [모듈명] //제거하려는 모듈이 의존성에 의해 제거되지 않는 경우에 사용 |
현재 사용되고 있는 커널 설정 확인 |
# modprobe -c |
부팅시 네트워크 관련 모듈 자동으로 로드하는 파일(/etc/modprobe.d) | # cat /etc/modprobe.d alias eth0 e1000 |
※(번외) 기출 커널 관련 문제
1. 모듈 기능을 이용해 커널에 포함되지 않는 기능을 필요할때만 동적으로 메모리에 적재하여 사용하는 것이 가능하게된 버전
커널 버전 1.2 이후
2. 커널에서 제공하는 파일 시스템 정보 확인할때 참고 하는 파일
/proc/filesystems
3. 리눅스 커널 설정에서 사용하지 않기로 설정한 하드웨어를 사용하기 위하여 하는 방법
-디바이스 드라이버를 모듈로 사용하도록 커널 설정 수정 후 커널 재컴파일
-디바이스 드라이버 모듈을 수동으로 직접 로드
-커널에 디아비스 드라이버 삽입 후 커널 재컴파일
4. 커널 2.6에서 사용할 모듈을 다루기위한 insmod, rmmod, lsmod, modprobe, depmod 등을 포함하는 패키지
module-init-tools-x.y.z.tar.gz
하드웨어 연결 및 주변 장치
※광범위 하므로 기출 문제 위주로 편성
1) 하드웨어 연결
리눅스에서 지원하는 하드웨어
-Sun SPARC, IBM Power-PC 등 인텔계열이 아닌 프로세서도 지원
-64bit 운영체제의 경우 4GB 이상의 메모리도 지원할 수 있다.
-하드웨어 손쉽게 이용하도록 Plug and play를 지원
리눅스 시스템 I/O Address, IRQ 및 DMA 채널
-I/O 주소를 사용하면 장치 드라이버가 외부장치에 데이터를 전달 할 수 있다.
-IRQ는 외부장치가 장치 드라이버에 신호를 전달하는 방법으로 각각마다 고유 번호를 가지고 있다.
-DMA는 외부장치로부터 메모리로 직접 바이트열을 보내는 기능이다.
버스 마스터링에 대한 설명
-DMA와 유사하며 PCI버스에서 사용
-데이터를 전송하는 장치는 일시적으로 버스 마스터로 동작한다.
-메인 버스가 DMA 전송에 사용되고 있을 때 CPU 동작이 제한될 수 있다.
하드웨어 관련된 정보가 나오는 파일 또는 명령어
명령어: lspci, dmidecode / 파일: /etc/sysconfig/hwconf
2) CPU
컴퓨터의 CPU에 대한 자세한 정보를 볼 수 있는 파일 ▶ "/proc/cpuinfo"
3) 메모리
메모리는 RAM(주기억장치, 하드디스크), ROM, PROM, EPROM로 구분
32bit 시스템에서 모든 메모리를 사용할 수 있도록 해주는 커널 2.6에 도입된 메모리 제어 기술 ▶ PAE(Physical Address Extenstion)
4) 사운드카드
1998년 Jaroslav Kysela에 의해 시작된 것으로 사운드 카드용 장치 드라이버를 제공하기 위한 리눅스 커널 요소이자 소프트웨어 프레임워크 ▶ ALSA
사운드 카드 설정 명령인 sndconfig이용시 설정 파일 ▶ /etc/modules.conf
시스템에 새로 장착된 사운드카드를 인식하여 사용하기 위해 리눅스에서 사운드카드 설정에 관련된 것 ▶ alsaconfig, sndconfig, kudzu
시스템에서 지원하지 않는 사운드카드 사용시 관련 설정
▶사운드카드설치 후 필요한 경우에는 플러그 앤 플레이 설정
▶사운드를 지원하도록 커널의설정 및 생성
▶사운드 장치 파일의 생성
▶새로 생성된 리눅스커널로 부팅 및 작동 확인
5) 마우스/키보드
레드햇 계열에서 gpm을 이용해 설정된 마우스 사용 시 관련파일 저장 위치 ▶ /etc/rc.d/init.d
6) USB
현재 USB 버스에 연결된 장치에 대한 정보를 보여주는 파일 ▶ /proc/bus/usb/drivers
USB /proc 드라이버에서 현재 USB 버스에 연결된 장치의 정보 표시에 대한 설명
T: ▶ 토폴로지 정보 [Lev: 장치의 레벨, Port: 상위장치 포트, Cnt:장치 번호, Dev#:버스 배열순서, Spd: 장치 작동수, MxCh: 연결가능 최대 장치 수]
D: ▶ 디스크립터 정보 [Ver: USB 사양 버전, Cls: 장치클래스, Sub: 수용 서브 클래스, MxPS: 패킷 최대 크기를 표시]
P: ▶ [ProclD: 제품 고유 코드를 표시]
C: ▶ [#If: 장치 인터페이스 수, Cfg#: 어떤 설정이 현재 사용, Atr: 장치 속성, MPwr: 현재 장치 설정에서의 최대 전력 사용 값을 표시]
7) 프린터
리눅스에서의 프린터: 쉘 프롬프트 상태에서 프린터로 파일을 인쇄 할 수 있다.
애플에서 개발한 오픈 소스 프린팅 시스템으로 유닉스 계열 운영체제의 시스템을 프린터 서버로 사용가능하게 해준다. ▶ CUPS [데몬명: cupsd]
CUPS 관련 파일 ▶ /etc/cups/cupsd.conf
프린터 관련 정보 저장된 파일 ▶ /etc/printcap [프린터 설정 파일로 lpd가 구동시 참조하는 파일], printconf, printtool, printenv [프린터 설정 유틸리티]
hp: 프린터의 이름을 정의
sh: 표기페이지(burst page)를 인쇄하는 설정
sd: spool directory를 말하는 것으로 프린트할 데이터를 프린터에 보내기 전에 임시로 저장할 디렉토리 (var/spool/lpd/<프린터이름>으로 설정)
mx: 인쇄가능한 최대 파일 크기를 나타낸다.
if: 입력 필터를 말한다.
lp: 프린터할 데이터,장치 목록을 표시
프린터 명령어
lp 명령어: 인쇄 명령어 | |
lpq 명령어: 프린트 작업 상태 점검 (작업 중일 때 "lp is ready and printing" 메세지 출력) |
|
lpstat 명령어 : CUPS인 경우, 프린터 작업 상태 점검 | |
lpr 명령어: 쉘 프롬프트에서 프린터로 파일을 인쇄 |
|
-P: | 사용할 프린터를 지정한다 |
-#[숫자] | 출력할 문서의 장수를 지정 ( ex. # lpr -#2 -P lj text.txt ) |
lprm 명령어: 실행한 프린트 작업을 취소 |
|
- |
수행한 인쇄 작업 모두 취소 ( ex. # lprm - ) |
[job번호] |
프린터 작업중 특정 작업 취소 ( ex. # lprm 3 ) |
lpc 명령어: 프린터가 현재 작업을 할 수 있는지 없는지 여부를 알려줌 |
|
pr 명령어: 텍스트 포맷을 출력 | |
lpadmin 명령어: 프린터와 장치를 정의하여 LP 인쇄 서비스를 구성 |
8) 스캐너
리눅스에서 스캐너를 사용하기 위해 설치하는 패키지 ▶ SANE [설치 시 yum install sane]
sane 설정 관련 파일 ▶ /etc/sane.d/dll.conf [스캐너 공유 시: /etc/services]
※(번외) 기출 하드웨어 관련 문제
1. VGA 그래픽 콘솔 등이 사용 불가한 상태에서 RS-232C 인터페이스로 물리 콘솔을 이용시 사용하는 장치파일로, 시리얼 포트는 나타내는 특수파일은?
/dev/ttyS0
2. 장치 파일명 종류가 나머지 셋과 다른 것은?
E-IDE [S-ATA, USB Memory, SCSI]
3. 현재 디바이스 드라이버가 어떤 인터럽트를 사용하고 있으며 그 인터럽트가 얼마나 많이 발생하는지 알기 위한 명령
more /proc/interrupts
4. 리눅스에서 지원하는 대부분의 터미널 정보가 저장되어 있는 파일
/etc/termcap
5. 리눅스 주변기기와 응용프로그램 연관
프린터(CUPS), 스캐너(SANE), 사운드카드(ALSA)
'자격증 > 리눅스 마스터 1급' 카테고리의 다른 글
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(2) | 시스템 보안 및 관리 (0) | 2018.03.05 |
---|---|
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(1) | 시스템 분석 (0) | 2018.03.05 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(3) | 프로세스 관리, S/W설치 및 관리 (0) | 2018.02.22 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(2) | 파일 시스템 관리 (0) | 2018.02.21 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(1) | 사용자 관리 (0) | 2018.02.20 |