Download presentation
Presentation is loading. Please wait.
1
5. 리눅스 커널 리눅스 디렉토리 구조와 커널에 대해 알아보자.
2
리눅스 커널 목 차 리눅스 파일 구조 리눅스 커널 리눅스 소스 구조 커널 업그레이드
3
리눅스 파일 구조
4
리눅스 파일 구조(1) Linux file structure
5
리눅스 파일 구조(2) / (root) /bin
루트 디렉토리는 최상위 디렉토리이며, 모든 디렉토리는 / 를 기준으로 생성된다. /는 모든 디렉토리의 출발점이자 다른 파티션의 연결점으로, 일반적으로 데이터를 저장하지 않는다. 예를 들면 CD-ROM과 같은 장치의 경우 윈도우에서는 D 드라이브와 같이 순차적으로 드라이브 이름이 할당되지만, 리눅스에서 CD-ROM을 사용하려면 마운트라는 절차를 통해 / 디렉토리 하부 디렉토리에 붙여서 사용하게 된다. (ex : #mount /mnt/cdrom/) /bin 시스템을 사용하기 위한 기본적인 명령어가 존재하며 싱글 모드로 부팅할 때 사용하는 명령어와 시스템을 복구할 때 사용하는 명령어와 시스템을 복구할 때 사용하는 필수 명령어 등이 존재한다. 시스템 관리자인 root 사용자의 홈 디렉토리. 일반 사용자와 구별하기 위해 /root 디렉토리가 존재하며 기본적으로 일반 사용자는 /root 의 내용을 볼 수 없다. /root 디렉토리에는 데이터를 저장하지 않는 것을 권장한다.
6
리눅스 파일 구조(3) /boot 부팅에 필요한 커널과 부팅할 때 필요한 핵심 파일이 들어있다.
일반적으로 8GB이상의 하드디스크는 실린더를 1024개 이상으로 형성하여 8GB 이상의 하드디스크를 구성한다. 과거의 8GB 이하의 하드디스크는 문제가 없으나 8GB이상의 하드디스크는 실린더 개수가 1024개를 넘어서며, 리눅스 커널이 실린더 1024이상을 넘어서는 곳에 위치할 경우 부트로더가 해당 커널을 불러들이지 못하는 문제가 발생하였다. 이러한 문제를 해결하기 위해 제일 먼저 생성한 최소한의 파일시스템을 /boot로 연결하여 커널이 항상 실린더 1024 안쪽에 위치하게 함으로 생성된 문제를 해결하고자 생성된 디렉토리 이다. 실린더라는 것은 각 디스크의 동일선 상에 놓인 트랙을 말한다. 따라서 실린더 수는 한장의 디스크의 트랙수라고 말할 수 있다. 실제로 BIOS 세팅에 가보면 사용자의 컴퓨터 하드디스크에 대한 정보를 알아볼 수 있는데 40GB의 경우 약 16383개 정도 된다. root 디렉토리에서 fdisk –l /dev/had 명령어를 통해 하드디스크의 파티션 정보와 실린더 정보를 알 수 있다.
7
리눅스 파일 구조(4) /dev /etc /home 리눅스에서 장치 사용할 떄 필요한 장치 파일이 위치한다.
이 디렉토리에는 파일을 저장하지 않으며 이러한 장치 파일은 아주 특별한 경우가 아니라면 스스로 생성하지 않으므로, 해당 디렉토리의 내용은 거의 변경되지 않는다. /etc 리눅스에서 사용되는 application과 서버 프로그램의 환경설정에 필요한 설정파일이 존재한다. 실행 파일은 존재하지 않으며, 편집기를 통해 해당 파일의 변경을 통해 시스템의 설정을 변경하는 디렉토리 이므로 수시로 백업해 두는 것이 좋다. /home 일반 사용자의 홈 디렉토리가 생성되는 곳이다. ftp, mysql, tomcat 등 별도의 공간을 요구하는 서비스를 위한 디렉토리로 사용할 수도 있다.
8
리눅스 파일 구조(5) /lib /lost+found
시스템 운영 및 프로그램 구동할 때 필요한 공유 라이브러리와 부팅할 때 사용되는 커널 모듈이 포함되어 있다. /lib 내부의 파일을 함부로 삭제하거나 변경하면 안된다. /lost+found 시스템을 부팅할 때 파일시스템의 이상 유무를 진단하여 문제가 있으면 구동되는 fsck(File System Check) 명령어가 사용되는 디렉토리로 개별 파일 시스템의 최상위 디렉토리마다 존재한다. 만약 파일시스템을 점검할 때 파일이 손상되었다면 해당 데이터를 해당 파일시스템에 존재하는 lost+found 디렉토리를 이용하여 복구 과정을 진행한다. 만약 손상된 데이터를 복구하지 못했다면 문제가 발생된 파일시스템에 존재하는 lost+found 디렉토리에 복구하지 못한 데이터 파일이 복사된다. (일반적인 상황에서는 이 디렉토리에 파일이 존재하지 않는것이 정상이다.)
9
리눅스 파일 구조(6) /misc /mnt /opt
시스템 아키텍처에 독립적인 자료들이 저장되는 디렉토리로 거의 사용하지 않는다. /mnt CD-ROM과 플로피 장치에 대한 기본 마운트 포인트를 제공한다. 일반적으로 해당 디렉토리는 비어 있으며 CD-ROM이나 플로피를 마운트한 후 해당 디렉토리로 이동할 경우 해당 매체의 내용을 볼 수 있다. Example :#mount /mnt/cdrom (CD-ROM일 경우) #mount /mnt/floppy (플로피의 경우) /opt add-on 패키지가 설치되는 디렉토리로서 표준 레드햇 리눅스 배포판에 존재하지 않는 패키지가 설치될 경우 이 디렉토리에 설치된다. (거의 사용하지 않는다.) 마운트는 시스템과 관련된 명령어로서 기본적으로 root와 같은 관리자만 가능하도록 되어 있으며 설정에 따라 일반사용자도 가능하다. 만일 /etc/fstab 에서 /dev/cdrom /cd iso9660 ro, user, noauto, unhide라고 적혀있다면 어떤 사용자든 mount /dev/cdrom 라고 입력하거나 mount /cd 라고 함으로써 각자의 씨디롬을 마운트 할 수 있다.(-o 옵션과 user 이용해서 설정…자세한것은 man mount 명령어로 참고) Mount 명령어를 사용하기 위해서는 기본적으로 해당 메체의 파일시스템타입, 해당 메체가 위치한 장치명, 해당메체를 연결할 디렉토리를 지정해야 한다. 리눅스에서 많이 사용하는 블록 장치에 대한 파일시스템 타입과 장치 이름을 마운트 포인트와 함께 /etc/fstab에 저장 /etc/fstab에는 필드 영역별로 장치명, 마운트 포인트, 파일시스템 타입, 옵션, 마운트 여부, 부팅할 때 하일시스템 점검 순서로 구성되며, 리눅스에서 기본적으로 사용할 마운트에 관련된 정보를 제공한다. 위의 Example은 간단히 줄인것이고 원래는 #mount –t iso9660 /dev/cdrom /mnt/cdrom 이다. /etc/fstab에서 정보가 있다면 위와 같이 간단히 줄인 명령어를 사용할 수 있지만 그렇지 않으면 파일시스템명과 장치명, 마운트 포인트를 모두 명시해주어야 한다. 리눅스는 다양한 파일시스템을 지원하므로 파일 시스템 유형을 명시해야 하며 man mount로 파일시스템 유형을 확인할 수 있다.
10
리눅스 파일 구조(7) /proc 프로세스와 시스템 정보를 제공하기 위한 목적으로 설계된 가상 파일 시스템을 사용하는 디렉토리이다. 프로그램을 구동하게 되면 /proc 에 해당 프로세스의 PID 번호에 해당하는 디렉토리를 생성하여 프로세스의 진행 상황을 추적하고 관리하기 위한 목적으로 생성되었다. 디렉토리내에 문자로 이루어진 이름의 디렉토리와 파일은 시스템 및 커널 정보를, 숫자로 이루어진 이름의 디렉토리는 현재 실행되고 있는 프로세스의 정보를 담고 있다. /proc 디렉토리의 파일은 cat 혹은 more 명령어로 읽을 수 있으며 특정 파일의 경우 echo 혹은 sysctl 과 같은 명령어로 내용을 변경할 수도 있다.
11
리눅스 파일 구조(8) /sbin /tmp 관리자가 사용하는 시스템 운영에 필요한 명령어가 존재하는 디렉토리.
(ex : /home/httpd2/bin 디렉토리에 htpasswd라는 명령어를 수행할 경우, 환경 변수에 /home/httpd2/bin 디렉토리가 정의되어 있지 않다면, 이 명령어를 실행할 때마다 /home/httpd2/bin/htpasswd 라는 절대 경로로 실행한다. ) /tmp 프로세스 생성 과정에서 발생되는 임시 파일을 저장하는 디렉토리. 수시로 파일이 생성되고 삭제된다. 시스템을 재구동 하는 경우, 이 디렉토리에 존재하는 파일은 모두 삭제되므로 파일을 저장하는 용도로 사용할 수 없다. 또한 이 디렉토리의 속성을 임의로 변경하지 않는 것이 좋다.
12
리눅스 파일 구조(9) /usr /var 프로그램을 설치할 때 패키지에 포함된 대부분의 파일이 이곳에 설치된다.
X 윈도우 관련 프로그램, 사용자 명령어, 프로그램 관련 문서, 게임, C 프로그램의 헤더파일, GNU info 파일, 라이브러리, 매뉴얼, 시스템 명령어, 커널과 패키지 소스가 이곳에 설치된다. /var 내용이 자주 변경되는 가변 자료가 저장된다. 시스템 운영할 때 발생되는 로그(log), 메일 송/수신할 때 임시로 저장되는 스풀(spool), 프린터로 전송하기 위해 임시로 저장하는 프린트 스풀 데이터, 레드햇 배보판에서 패키지로 제공하는 아파치(apache) 웹 서버 관련 자료(/var/www), MySQL의 데이터 베이스, FTP의 최상위 디렉토리 등이 그 대표적이 예이다. 만일 이러한 서비스를 제공하는 서버로 리눅스를 운영한다면, /var 디렉토리를 만드는 것이 좋다.
13
리눅스 커널
14
리눅스 커널 (1) ‘커널’이란? 운영체제에서 가장 기초적이고 핵심적인 기능을 담당하는 부분으로 기억장소에 상주한다.
기억장소, 메모리, 파일, 주변장치 등 시스템을 구성하는 중요한 자원 관리. 시간관리, 프로세서 관리, CPU 스케줄링, 입출력 제어 등 컴퓨터 운영에 필요한 핵심 사항 처리. 운영체제는 이러한 커널과 최소한의 필요한 도구들을 묶어 놓은 “소프트웨어 묶음(Software Bundle)”이라 할 수 있다.
15
리눅스 커널 (2) 커널 접근 방식 (a)하나의 커널에 필요한 모든 기능이 통합되어 있는 것.
(b) 필요한 기능들을 작은 서버 모듈로 나누어 설계하고, 이들 서버를 관리할 수 있는 최소한의 기능만을 커널 핵심부분으로 구현.
16
리눅스 커널 (3) Monolithic Kernel 하나의 커널에 필요한 모든 기능이 통합되어 있는 것.
같은 메모리 공간 안에 필요한 기능들이 존재하고 있기 때문에 모놀 리딕 커널은 함수 호출 (Function call)방식으로 커널에서 제공하는 기능 접근. 장점 : 구현이 간편하며, 시스템 자원을 효율적으로 이용 가능. 단점 : 구현된 커널을 다양한 하드웨어 환경이나 상이한 다른 시스템에서 포팅하기 어렵다. 기능이 확장되는 경우, 커널의 크기가 커지고 관리가 매우 어려워진다. 대표적 운영 체제 : Unixware, Solaris, AIX, IRIX, Linux 등
17
리눅스 커널 (4) Micro Kernel 필요한 기능들을 작은 서버 모듈로 나누어 설계하고, 이들 서버를 관리할 수 있는 최소한의 기능만을 커널 핵심부분으로 구현. 장점 : 하드웨어 환경에 따라 기능의 확장과 기능 재구성이 용이하고, 다른 시스템에서 재사용이 용이하다. 단점 : 서비스를 사용하는 과정에서 여러번의 메시지 전송과 컨텍스트 스위칭(context switching)이 발생하기 때문에 실용적인면에서는 속도가 느리다. 대표적 운영 체제 : Cray UNICOS/mk, CMU Mach OS, Digital UNIX, Linux Mk 등 초기 리눅스 커널 개발 당시 리눅스 토발즈는 마이크로 커널에 흥미를 느꼈지만, Unix 시스템과 호환을 가지기 위해서 모놀리딕 방식을 선택했다고 한다. 당시 리눅스 시스템은 모놀리딕 커널만으로도 충분히 소화. 그러나 오늘날 리눅스는 모놀리딕 커널의 단점을 보와하기 위한 선택으로 모듈이라는 제한적인 마이크로 커널의 일부 개념을 도입하여 2개의 접근 방식 중에서 장점을 취해 사용하고 있다. 이를 통해 모놀리딕 커널의 확장성과 재사용성의 한계를 극복해 나갈 수 있다.
18
리눅스 커널 (5) 커널 구조
19
리눅스 커널 (6) 프로세스 관리(Process Management) 메모리 관리(Memory Management)
프로세스의 생성 및 소멸 프로세스 간의 통신 CPU 스케줄링 동기화 제한된 자원에 대한 다중 프로세서의 효율적인 관리 기법 제공 메모리 관리(Memory Management) 가상 메모리 관리기법 제공 메모리 하드웨어의 효율적인 관리 네트워크 관리(Network Management) 통신 프로토콜 구현 네트워크 라우팅 및 주소 지정 네트워크 제어기 관리
20
리눅스 커널 (7) 파일 시스템 관리(File System Management)
가상 파일 시스템에 의한 여러 파일 시스템 타입 지원 디스크의 물리적 구조를 논리적 구조로 표현하는 기법 파일(정규 파일, 장치 파일, 파이프), 디렉토리 관리 블록 입출력을 위한 버퍼 캐시 관리기법 제공 디바이스 관리(Device Management) 입출력 요청 검증 입출력 요청 작업의 스케줄링 주변 장치와 메모리 간의 자료 전송 입출력 제어기 관리 인터럽트 요청 및 처리
21
리눅스 커널 (8) 커널 소스 (1) 커널 소스에는 시스템에서 사용되어지는 물리적 장치에 대한 정보 및 실행되는 프로그램에 대한 핵심적인 코드가 들어 있다. 리눅스는 많은 아키테처를 지원하며, 해당 아키텍처별로 사용되어지는 물리적 장치에 대한 정보가 커널 소스에 모두 들어있다. 예를 들면, MS윈도우즈에서는 특정 장치를 사용할 때, 해당 장치를 인식하기 위한 드라이버 디스크를 제공하여, 설치 후 사용할 수 있다. 리눅스에서는 해당 장치에 대한 정보가 커널 소스에 들어 있으며, 그 중 사용자의 시스템은 어떠한 장치를 사용한다는 정보를 뽑아내어 커널에 반영한다. 커널이 부팅할 때 메모리로 로딩되면서 해당 장치에 대한 제어 정보를 가지게 되어, 여러 가지 장치를 사용할 수 있는 OS의 기능을 한다.
22
리눅스 커널 (9) 커널 소스 (1) 일반적으로 커널 소스 파일은 linux-2.4.20.tar.gz와 같은 형태로 표시된다.
소스의 버전은 linux-x.y.z와 같은 숫자로 명시하며, ftp.kernel.org 에서 소스를 내려받을 수 있다. x : Major Version이라 칭하며, 커널 자체에 획기적인 영역이 추가 될 때 변한다. y : 홀수인지 짝수인지가 중요하며, 홀수는 새로운 기능이 추가되어 개발 중인 베타버전이며, 안정버전이 되면, +1을 한 짝수로 표시한다. z : 기능상 추가된 내용은 없지만 문제가 되는 버그를 수정한 횟수를 표시하는데 숫자가 높을 수록 많은 버그 수정이 되었다는 것을 의미한다.
23
커널 소스 구조
24
커널 소스 구조 (1) 커널 소스 구조
25
커널 소스 구조 (2) fs Init 논리적인 파일 시스템을 처리하는 부분
리눅스에서는 가상 파일 시스템을 사용하여 동시에 여러 가지 파일 시스템을 지원할 수 있다. 가장 중요한 파일 시스템은 proc과 ext2이다. Init 커널을 시작하는데 필요한 함수들이 있다. 그 중에서 start_kernel() 함수에 의해서 passing된 부팅 파라미터를 고려하여 커널을 초기화한다. Proc 파일 시스템 – 시스템 관리와 관력하여 사용 Ext2 – 일반 파일들을 관리하는 파일 시스템
26
커널 소스 구조 (3) arch 임베디드 시스템의 하드웨어 환경에 의존된 CPU에 따른 기능 구조를 제공한다. 즉, 지원하고 있는 타겟 보드에 따라 CPU에 의존적인 코드가 있다. 부팅과정, 메모리 관리 방법, 프로세스 처리 부분들이 모두 다르므로 가장 하드웨어와 밀접한 소스 코드가 집합되어 있다. 앞의 그림에서 CPU는 mips, alph, sparc, ppc, i386 을 제공 하며, 타겟 보드의 CPU는 StrongARM임에 따라 arm 디렉토리를 보면 된다. “arch/arm” 디렉토리에 개발 보드 CPU인 StrongARM에 대한 소스 코드가 작성되어 있다. Proc 파일 시스템 – 시스템 관리와 관력하여 사용 Ext2 – 일반 파일들을 관리하는 파일 시스템
27
커널 업그레이드
28
커널 업그레이드(1) 커널 업그레이드의 필요성 Linux CD에서 현재 설치된 Kernel source 가져오기
Web server에서 최신 커널 소스 다운로드 커널 업그레이드 (1) 커널 소스 풀기 (2) make menuconfig 실행 (3) .config 파일 복사 (4) 설정 영역 의존성 검사 (make dep) (5) 이전 커널 컴파일시 생성된 파일 삭제 (make clean) (6) 커널 생성 (7) 커널 복사 (8) 모듈 생성 (9) 모듈 설치 (10) 모듈 의존성 파일 생성 (11) grub.conf 파일 수정
29
커널 업그레이드(2) 커널 업그레이드의 필요성
일반적인 리눅스 배포판의 커널은 배포판을 이용하는 유저들이 어떤 하드웨어를 사용하는지 그리고 어떤 목적으로 사용할 것인지 알 수 없으므로 여러 다른 많은 종류의 하드웨어와 상당수의 설정들을 지원 하도록 설정되어 배포된다. 따라서 커널 이미지의 크기가 커질 수 밖에 없고, 사용하지 않는 여타 기능들이 많이 추가 되었으므로 시스템에 최적화되지 못해 성능이 떨어지게 된다. 즉, 불필요한 기능을 커널에 포함시키거나 모듈로 설정하였을 경우 시스템이 전반적으로 무거워지고 많은 메모리를 소모하게 된다. 또한 정작 나에게 필요한 기능은 포함되지 않는 경우가 있어 특수한 기능을 이용하거나 나에게 필요한 기능만을 선택하여 사용할 수 있도록 하기 위해 커널 컴파일이 필요하다.
30
커널 업그레이드(3) Linux CD에서 현재 설치된 Kernel source 가져오기 (1)
리눅스를 처음 설치할 때, 개인 데스크탑으로 설치했기 때문에 커널 업그레이드에 필요한 패키지가 거의 없다. 따라서 패키지를 추가하기 위해 옆의 화면과 같이 메뉴를 선택한다.
31
커널 업그레이드(4) Linux CD에서 현재 설치된 Kernel source 가져오기 (2)
개발용 도구와 커널개발을 선택하여 체크한 후, [업데이트]를 누른다 이 패키지를 설치하면 /usr/src 디렉토리 밑에 linux 이라는 디렉토리가 생성된다.
32
커널 업그레이드(5) Linux CD에서 현재 설치된 Kernel source 가져오기 (3) [계속 진행]을 누른다.
33
커널 업그레이드(6) Linux CD에서 현재 설치된 Kernel source 가져오기 (4)
설치디스크 2번을 삽입하고 [확인]을 누른다.
34
커널 업그레이드(7) Linux CD에서 현재 설치된 Kernel source 가져오기 (5)
설치디스크 3번을 삽입하고 [확인]을 누른다.
35
커널 업그레이드(8) Linux CD에서 현재 설치된 Kernel source 가져오기 (6)
Install이 완료 되었으므로 [확인]을 누른다.
36
커널 업그레이드(9) Web server에서 최신 커널 소스 다운로드 (1)
호스트 명에 ftp.kernel.org를 입력하고 포트는 21번을 입력한다. 그리고 나서 왼쪽의 컴퓨터 아이콘 클릭한다.
37
커널 업그레이드(10) Web server에서 최신 커널 소스 다운로드 (2)
/pub/linux/kernel밑의 v2.4디렉토리를 선택한다.
38
커널 업그레이드(11) Web server에서 최신 커널 소스 다운로드 (3)
자신이 원하는 위치에 linux tar.bz2 를 다운받는다. (/usr/src밑에서 받는 것이 좋다.) 1) 커널 소스 다운로드 - 커널 소스를 ftp.kernel.org에서 다운로드 한다. 커널 소스는 ftp://ftp.kernel.org/pub/linux/kernel 디렉토리에 버전별 디렉토리가 존재하며 해당 디렉토리마다 소스가 들어있다. 커널 버전 소스는 v2.4 디렉토리에서 소스와 패치파일 배포중. - 소스 다운로드 방법 1. 빨간 모자 클릭 -> 인터넷 -> 추가 응용 프로그램 -> gFTP선택 2. 호스트에는 ftp.kernel.org를 입력하고 포트 번호는 21입력 3. 맨 왼쪽의 컴퓨터 그림을 클릭하면 연결(사용자와 비밀번호는 입력 하지 않는다.) 4. pub/linux/kernel/v2.4 디렉토리 안에서 linux tar.bz2를 /usr/src 에다가 다운 받는다.
39
커널 업그레이드(12) 커널 소스 풀기 (1) /usr/src 디렉토리에 있는 linux tar.bz2 커널 소스를 tar xvfj 명령어를 통해 압축을 푼다. 1) 커널 소스 다운로드 - 커널 소스를 ftp.kernel.org에서 다운로드 한다. 커널 소스는 ftp://ftp.kernel.org/pub/linux/kernel 디렉토리에 버전별 디렉토리가 존재하며 해당 디렉토리마다 소스가 들어있다. 커널 버전 소스는 v2.4 디렉토리에서 소스와 패치파일 배포중. - 소스 다운로드 방법 1. 빨간 모자 클릭 -> 인터넷 -> 추가 응용 프로그램 -> gFTP선택 2. 호스트에는 ftp.kernel.org를 입력하고 포트 번호는 21입력 3. 맨 왼쪽의 컴퓨터 그림을 클릭하면 연결(사용자와 비밀번호는 입력 하지 않는다.) 4. pub/linux/kernel/v2.4 디렉토리 안에서 linux tar.bz2를 /usr/src 에다가 다운 받는다.
40
커널 업그레이드(13) 커널 소스 풀기 (2) 압축을 풀고 나면 /usr/src 디렉토리에 linux 디렉토리가 생성된다. 여기에 ln –s 명령어를 이용하여 linux 심볼릭 링크가 linux 디렉토리를 가리키게 한다.
41
커널 업그레이드(14) make menuconfig 실행 (1)
/usr/src/linux 디렉토리로 가서 make menuconfig 를 실행한다. 이 과정은 새로운 커널을 생성시 어떠한 요소를 커널에 포함시킬 것인가를 결정하는 과정이다. 커널 요소 선택을 위한 환경은 크게 텍스트 환경과 그래픽 환경을 제공하는데 텍스트 환경은 #make menuconfig 명령어를 통해서, 그래픽 환경은 #make xconfig 명령어를 통해서 수행된다
42
커널 업그레이드(15) make menuconfig 실행 (2)
43
커널 업그레이드(16) make menuconfig 실행 (3)
44
커널 업그레이드(17) .config 파일 복사 (1) 별도의 설정 없이 저장해도 레드햇에서 설정한 구성 요소가 저장이 된다.
저장되는 내용은 /usr/src/linux /.config 파일로 생성되며, 해당 파일이 바로 레드햇 리눅스가 제공하는 커널 구성 요소이다. .config파일을 linux 디렉토리에 저장함으로써 이전의 설정을 그대로 가지고 와서 적용 및 사용할 수 있다. 여기서 다시 make menuconfig를 하는 이유는 자신이 원하지 않는 설정을 빼거나 반드시 필요한 설정을 추가하기 위한것인데 이부분을 skip해도 상관없다. 자신이 원하는 시스템으로 설정을 바꿔주고 싶다면 이 명령어를 실행하여 설정을 바꾸도록 한다.
45
커널 업그레이드(18) .config 파일 복사 (2) #make menuconfig 명령어를 통해 나타난 화면.
여기까지 왔다면 자신이 원하는 설정을 하던지 그렇지 않으면 저장하지 않고 빠져나온다. Kernel configuration을 저장할지 묻는 화면이 나올때 바꾼 설정이 있으면 <Yes>, 바꾸고 싶지 않다면 <No> 선택한다.
46
커널 업그레이드(19) 이전 커널 컴파일시 생성된 파일 삭제 (make clean) 커널 이미지 생성
7. 설정 영역 의존성 검사 (make dep) 이전 커널 컴파일시 생성된 파일 삭제 (make clean) 커널 이미지 생성
47
커널 업그레이드(20) make dep // 설정 영역 의존성 검사
커널 구성요소에 대한 의존성을 검사하는 과정이다. 모듈로 선택한 영역들간의 의존성에 대한 검사를 진행하여 .depend 라는 파일을 생성한다 make clean //이전 커널 컴파일시 생성된 파일 삭제 설정 영역 의존성 검사가 정상적으로 이루어 졌다면 이전 커널 컴파일시 생성된 파일을 삭제하는 과정 진행한다. (만일 처음으로 컴파일 과정을 수행한다면 이 과정을 생략해도 된다.) 이전에 생성된 오브젝트 파일, 커널, 임시 파일, 설정값 등을 삭제한다. 이 과정을 수행하지 않으며 새로 수정한 내용이 반영되지 않는다. make bzImage //커널 이미지 생성 커널 이미지를 만드는 명령이다. 이 명령어를 통해 부팅할 수 있는 새로운 커널 이미지가 만들어 진다. cpu 종류, 메모리 크기, 선택한 영역에 따라 컴파일에 소요되는 시간차이가 많다.
48
커널 업그레이드(21) 10. 커널 복사 (1) make bzImage 과정이 정상적으로 진행되었다면 bzImage라는 커널 이미지 파일이 생성된다. 새로 생성된 커널을 /boot 디렉토리에 복사하여 다음 부팅 시 새로운 커널을 이용할 수 있게 한다.
49
커널 업그레이드(22) 10. 커널 복사 (2) 새로 생성한 커널에 적합한 System.map을 적용하지 않으면 부팅 과정에서 간단한 경고가 출력된다. 새로 생성한 커널에 적합한 System.map을 적용하지 않으면 부팅 과정에서 간단한 경고가 출력된다.
50
커널 업그레이드(23) 11. 커널 복사 모듈 생성 모듈 설치
11. 커널 복사 모듈 생성 모듈 설치 새로 생성한 커널에 적합한 System.map을 적용하지 않으면 부팅 과정에서 간단한 경고가 출력된다.
51
커널 업그레이드(24) make modules //모듈 생성 make modules_install //모듈 설치
커널의 기능 중에서 모듈로 선택한 것들에 대해 각각의 object파일을 만든다. 커널의 구성요소 중 많은 요소들을 모듈로 만들 수 있도록 되어 있는데, 이렇게 모듈로 처리된 영역은 부팅시 메모리에 적재되는 것이 아니라 부팅 과정 이후 설정에 따라, 혹은 해당 장치를 사용할 경우에만 메모리에 올려서 사용한 후, 사용하지 않을 경우 메모리에서 삭제하므로 효과적으로 메모리를 관리 할 수 있다. make modules_install //모듈 설치 make modules 명령어로 생성한 모듈을 모듈이 저장되는 디렉토리로 옮기는 과정이다. 커널의 경우 cp 명령어로 생성된 커널을 /boot로 직접 옮겼으나, 모듈의 경우 make modules_install 명령어로 생성한 모듈을 특정 디렉토리로 이동하는 작업을 수행한다. 위의 명령어 실행시 컴파일된 모듈들을 /lib/modules/ 디렉토리에 복사가 된다.
52
커널 업그레이드(25) 14. 모듈 의존성 파일 생성 모듈은 커널의 세부 영역을 하나의 오브젝트로 생성한 것으로 특정 모듈을 메모리에 적재할 경우 다른 모듈이 먼저 메모리에 존재하여야만 가능한 경우가 있다. 즉, 특정 기능 혹은 장치를 사용하기 위한 필요한 장치 혹은 기능이 선행하여 메모리에 적재되어야 한다. 이러한 모듈간의 의존성을 파일로 생성하여 특정 모듈을 메모리에 적재할 경우 필요한 모듈을 알려주거나 자동으로 적재할 때 참조하게 된다. 특정 버전 커널 모듈간의 의존성을 검사하여 modules.dep 파일로 생성한다.
53
커널 업그레이드(26) 15. Initrd 파일 생성 grub.conf 파일에서 사용할 initrd 파일을 만들어준다.
만드는 방법은 mkinitrd /boot/initrd-<커널버전>.img <커널버전> 이다. 이 파일은 만들지 않아도 되므로 원하지 않으면 만들지 않는다. Initrd 파일은 커널 및 커널 모듈이 포함되어 있는 시스템 초기화를 위한 램디스크 이미지 파일로서 가령 SCSI를 하드 디스크로 사용하는 경우, LVM(Linux Volume Manager)을 적용한 시스템 등 특별한 몇몇 환경에서만 생성하는 이미지 파일이다. => 확인 결과 이 파일이 없어도 됩니다.
54
커널 업그레이드(27) 16. grub.conf 파일 수정 (1)
마지막으로 /etc 디렉토리에 있는 grub.conf 파일을 수정한다. #vi /etc/grub.conf Proc 파일 시스템 – 시스템 관리와 관력하여 사용 Ext2 – 일반 파일들을 관리하는 파일 시스템
55
커널 업그레이드(28) grub.conf 파일 수정 (2)
lilo.conf 와 grub.conf 두 종류의 파일이 있는데 설치할때 부트로더를 grub로 선택했기 때문에 grub.conf 파일을 열어서 수정한다. -old 는 새로 추가한 부분과 구분하기 위해 집어 넣은 것. kernel 부분에는 앞에서 만든 kernel 를 입력하고 initrd에다가도 앞에서 만든 initrd img를 입력한다. 이제 시스템을 재부팅하게 되면 기존의 선택할 수 있는 2개의 운영체제가 3개로 늘어난다. 새로 추가한 2번째 OS를 선택하여 부팅하여 본다. timeout : 부트로더 대기 시간(단위 초)을 지정하는 영역으로 멀티 부팅 시 해당 시간 동안 선택이 없을 경우 /etc/grub.conf에 설정한 운영체제 중 제일 상단의 운영체제로 부팅한다.
Similar presentations