본문 바로가기

자격증/리눅스 마스터 1급

Part2) 리눅스 시스템 관리 - 장치 관리 | 장치의 설치 및 관리

I. 장치의 설치 및 관리


커널 컴파일 및 설치

1) 커널의 정의: 운영체제의 핵심에 해당되며 하드웨어에 직접 접근하며 컴퓨터 시스템 내의 자원을 관리하고 운영체제의 다른 모든 부분에 여러가지 기본적인 서비스를 제공한다.

커널의 역할
-다양한 인터럽트 처리를 담당
-스케줄러, 슈퍼바이저가 포함
-프로세스의 처리 우선순위를 담당
-메모리나 저장장치 내의 운영체제의 주소 공간을 관리

 커널의 상세한 정보 확인 

 # 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]커널 패치하기

리눅스 커널 공식 배포 사이트: ftp:kernel.org/pub/linux/kernel의 각 버전별 디렉터리에서 다운 ▶ 커널 패치 레벨은 순서대로 적용
※ ex) 만약 커널 4.15.3에서 커널 4.15.6으로 업그레이드시 필요한 파일구성 ▶ [patch-4.15.4.gz, patch-4.15.5.gz, patch-4.15.16.gz]

-

 다운 받은 압축 파일이 "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 명령어로 커널 컴파일을 수행할 때 컴파일 하게될 항목들을 선택하는 것이다. 옵션 설정 방법은 아래와 같이 여러 종류가 있는데, 이 모든 방법들은 "/usr/src/linux/.config" 파일에 저장되어있다. 

◎make config(텍스트 문답 방식의 방법)

초기의 컴파일 옵션 설정 방법으로 가장 세부적인 설정을 할 수 있는 반면 모든 설정에 대해 일일이 답을 해야 하고 세부적인 하드웨어 내용을 알아야 정확한 설정이 가능해서 불편하다.


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 설정 파일에 커널을 등록

 




커널 매커니즘 모듈(Modules)


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


5. 리눅스 커널 컴파일시 사용가능한 네트워크 옵션
TCP/IP Version 6, IPX/SPX, Apple Talk



하드웨어 연결 및 주변 장치


※광범위 하므로 기출 문제 위주로 편성


1) 하드웨어 연결


리눅스에서 지원하는 하드웨어

-Sun SPARC, IBM Power-PC 등 인텔계열이 아닌 프로세서도 지원

-64bit 운영체제의 경우 4GB 이상의 메모리도 지원할 수 있다.

-하드웨어 손쉽게 이용하도록 Plug and play를 지원


PnP(Plug and Play)
-각종 하드웨어를 찾아낸 장소를 자동적으로 소프트웨어에 알려준다.
-물리적 장치와 이것을 조작하는 소프트웨어와 일치시키고, 장치와 드라이버 사이에 통신 "채널"을 만든다.
-I/O, IRQ, DMA 채널, 메모리 영역 등의 "버스자원"을 드라이버와 하드웨어 양쪽에 할당한다.
-버스자원을 분배시키면 /dev 디렉터리에 있는 장치의 파일을 사용할 수 있다.



리눅스 시스템 I/O Address, IRQ 및 DMA 채널

-I/O 주소를 사용하면 장치 드라이버가 외부장치에 데이터를 전달 할 수 있다.

-IRQ는 외부장치가 장치 드라이버에 신호를 전달하는 방법으로 각각마다 고유 번호를 가지고 있다.

-DMA는 외부장치로부터 메모리로 직접 바이트열을 보내는 기능이다.

하드웨어를 설치함에 있어 중복될 수 있는 자원 (DMA Channels, IRQs, I/O port Addresses [Slot는 X])


버스 마스터링에 대한 설명

-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)