GNU/Linux 리눅스커널 (Linux Kernel) Seo, Doo-Ok Clickseo.com clickseo@gmail.com
목 차 커널 커널컴파일 커널컴파일옵션설정 커널패치 2
커널 커널 리눅스커널 커널컴파일 커널컴파일옵션설정 커널패치 3
커널 (1/7) 커널 (Kernel) 하드웨어를소프트웨어로추상화 응용프로그램소프트웨어에실행환경을제공 가상메모리, 멀티태스킹, 디스크접근, 네트워킹같은문제를처리하는핵심소프트웨어 4
커널 (2/7) 커널의역할 하드웨어를소프트웨어로추상화 응용프로그램소프트웨어에실행환경을제공 자원관리 (Resource Management) 한정된시스템자원을효율적으로관리하여프로그램의실행을원활하게한다. 프로세스관리 (Process Management) 메모리관리 (Memory management) 가상메모리 (Virtual Memory) 파일시스템 (File System) : 파일및디렉터리접근 디바이스관리 (Device management) : 물리적인디바이스를맵핑하는것 네트워크및보안 5
커널의역할 : 추상화 커널 (3/7) 하드웨어를소프트웨어로추상화 응용프로그램소프트웨어에실행환경을제공 6
커널의종류 : 단일형커널 단일형커널 (monolithic kernel) 커널 (4/7) 커널의다양한서비스및높은수준의하드웨어추상화를하나의덩어리 ( 주소공간 ) 로묶은것이다. 운영체제개발자입장에서유지보수가일반적으로더어려우나성능이좋다. System V 계열 : Solaris, AIX, HP-UX BSD 계열 : FreeBSD, NetBSD, OpenBSD, SunOS Linux Kernel Classic Mac OS Microsoft MS-DOS Microsoft Windows 9x 시리즈 : 95, 98, 98 SE, ME 7
커널의종류 : 마이크로커널 마이크로커널 (micro kernel) 커널 (5/7) 하드웨어추상화에대한간결한작은집합을제공하고, 더많은기능은서버 (Server) 라고불리는응용소프트웨어를통해제공한다. GNU Hurd 커널 : Multiserver Microkernel NextSTEP : Mach 커널 8
커널의종류 : 혼합형커널 커널 (6/7) 혼합형커널 (hybrid kernel) : 수정마이크로커널 성능향상을위해추가적인코드를커널공간에넣은점을제외하면, 많은부분은순수마이크로커널과비슷하다. Apple XNU 커널 (XNU, X is Not Unix) macos : Mach 커널기반하이브리드커널 ios, watchos, tvos Microsoft NT 커널 Windows NT 제품군 : NT, 2000, XP, 2003, Vista 9
커널의종류 : 아키텍처 커널 (7/7) 단일형커널 (monolithic kernel) 기반운영체제 마이크로커널 (micro kernel) 기반운영체제 혼합형커널 (hybrid kernel) 기반운영체제 10
커널 리눅스커널 11
리눅스커널 (1/11) Linux Kernel : kernel.org 1991 년, 리누스토발즈 (Linus Torvalds) 1991 년 0.01 버전첫배포 미닉스를기반으로유닉스표준화규격인 POSIX(Portable Operating System Interface for Unix) 를도입하여 PC에서동작하는유닉스계열운영체제 GNU GPL(GNU General Public License) 아래에배포 리눅스탄생배경 1987년, 앤드류타넨바움 (Andrew S. Tanenbaum) : 네덜란드브리제대학원전산과교수» 운영체제강의를위해개발한유닉스의 PC 버전소스코드» 이후미닉스 (MINIX) 라는이름으로공개 GNU/Linux 또는리눅스배포판 1992년, 리눅스는 GNU 시스템과통합 1994년, 버전 1.0 출시 1996년, Linux 2.x 2011년 7월 21일, Linux 3.x 2015년, Linux 4.x 12
리눅스커널 : kernel.org 리눅스커널 (2/11) 13
리눅스커널 (3/11) 리눅스커널 : git.kernel.org Kernel.org Git repositories 14
리눅스커널 : GitHub 리눅스커널 (4/11) 리누스토발즈 (Linus Torvalds) 저장소 (Repository) : https://github.com/torvalds/linux 15
리눅스커널 : 버전역사 초창기 리눅스커널 (5/11) 1991년, 0.01 버전첫배포 0.12 : 첫번째 GPL 버전 1994년, 버전 1.0 출시 1996 년, Linux 2.x 1999년, 2.2.x 2001년, 2.4.x 2003년 12월, 2.6.x 2004년, 릴리즈프로세스변경» 2-3개월마다정기적으로 Linux 2.6.39 2011 년 7 월 21 일, Linux 3.x 리눅스커널 20주년기념일 -rc : 개발릴리스버전 2015 년, Linux 4.x [ 출처 : Timeline, Linux kernel, WIKIPEDIA. ] 16
리눅스커널 : 커널버전 리눅스커널 (6/11) < 주버전번호 >.< 부버전번호 >.< 패치레벨 > 커널버전규칙 주버전번호 커널에구조적인큰변화를의미 ( 역사적으로 0, 1, 2, 3, 4 까지사용 ) 2011년 7월 21일 : Linux 3.x» 리눅스커널 2.6.39 와비교할때주요기술적인변화에관한것이아니다.» 리누스토발즈, 리눅스커널 20주년기념일 ( 2.6.39 부터 3.0 ), ( 3.19 부터 4.0 ) 번호변경» 의미있는기술적차이를수반하지는않는다.» 메이저버전번호는커다란마이너번호를회피하기위해증가시킨것이다. 부버전번호 커널에구조적인큰변화는없지만, 내부적으로구현되는방식에여러변화 짝수 : 안정버전, 홀수 : 개발버전 패치레벨 같은버전안에서몇번의개정작업이이루어졌는가를나타내는값 이값이클수록코드가안정되고, 기능이향상되었음을의미 17
리눅스커널 (7/11) 리눅스커널 : 안정버전과개발버전 안정버전 (Stable Version) 제품용시스템에적합한안정된커널 많은개발과정을통해충분히안정화되어있다고판단하는기능으로구성된커널 제한된범위내에서지속적인안정화를위해패치 (Patch) 를가하며버전이조금씩올라간다. 개발버전 (Developmental Version) 주로새로운기능을추가하고실험하는데주력하는버전 안정성보다는실험성과기능에비중 18
리눅스커널 : 개발 개발자커뮤니티 리눅스커널 (8/11) 초창기 (2007 년이전 ), 개발자상위 20 명이코드의 80% 를작성 2007년, 개발자상위 30명이코드의 30% 를작성 상위개발자는변경사항을검토하는데더많은시간을투자 커널변경사항은 1900명이넘는개발자들에의해제출 ( 단, 팀소속개발자는 1로간주 ) Red Hat : 12% 의기여도, 알려진아마추어는 3.9% 2016년, Linux 커널개발보고서 : Linux Foundation (2014년 12월 ) 에서 4.7(2016년7 월 ) 까지의기간업데이트» 릴리스당평균 200-250 개기업의약 1500 명의개발자가각릴리스에기여 개발자 : 상위 30명, 코드의 16% 정도기여 회사 : Intel(12.9%), Red Hat(8.0%), 'none'(7.7%), 'unknown'(6.8%) 19
리눅스 커널 리눅스 커널 : 하드웨어 지원 (9/11) 리눅스 커널은 다양한 하드웨어 아키텍처를 지원하여, 소프트웨어에 대한 공통 플랫폼을 제공한다. [ 출처 : Hardware support, Linux kernel, WIKIPEDIA. ] 20
리눅스커널 (10/11) 리눅스커널프로그래밍 : 시스템콜 (System Call) fopen() user application user mode kernel mode system call interface open() system call 의구현 i... return 21
Linux Kernel map 리눅스커널 (11/11) [ 출처 : Linux Kernel map, Linux kernel, WIKIPEDIA. ] 22
커널컴파일 커널 커널컴파일 커널컴파일환경설정 커널컴파일과설치 커널컴파일옵션설정 커널패치 23
커널컴파일 (1/6) 커널컴파일 (Kernel Compile) 컴파일러를이용하여프로그램소스로부터수행가능한바이너리코드를만드는과정 시스템성능최적화및새로운하드웨어지원 속도개선과버그수정 두가지방법 리눅스제조사에서해주는방법 : 리눅스배포판 여러사용자들의요구를맞춰야한다. 사용자가직접컴파일하는방법 사용자자신에게맞는최적의환경설정 : 좀더작고가볍게구성 24
현재커널버전 : uname uname : 시스템정보 커널컴파일 (2/6) [clickseo@localhost ~]$ uname -r uname -o : 운영체제 uname -s : 커널이름 uname -r : 커널릴리즈 25
커널컴파일 (3/6) 현재커널버전 : /proc/version /proc/version 파일 [clickseo@localhost ~]$ cat /proc/version 26
현재커널버전 : /usr/src /usr/src 디렉터리 커널컴파일 (4/6) [clickseo@localhost ~]$ head /usr/src/linux-headers-4.15.0-34-generic/makefile 27
리눅스커널 : 다운로드 커널컴파일 (5/6) 28
리눅스커널 : 압축풀기 XZ Utils 커널컴파일 (6/6) [root@localhost ~]# tar xvlf linux-4.18.12.tar.xz 29
커널컴파일 환경설정 30
커널컴파일 : 환경설정 (1/5) 커널컴파일환경설정 커널이제공할기능설정 커널컴파일 : 3 가지방식 make config : 명령어방식 make menuconfig : 메뉴방식 make xconfig : X 윈도환경, GUI 방식 31
커널컴파일 : 환경설정 (2/5) 커널컴파일 : make config make config 아주전통적인스타일방식 : CLI 형식으로옵션지정 설정가능한값 y( 기능추가 ), n( 기능제외 ), m( 모듈추가 ) 모듈이불가능한기능의경우 m 이표시되지않는다. 단점 : 잘못선택하면처음부터다시해야한다. 32
커널컴파일 : 환경설정 (3/5) 커널컴파일 : make menuconfig make menuconfig 메뉴방식의화면으로방향키로메뉴를선택 <h> 를누르면도움말을볼수있다. --> 표시가있는곳에서 <Enter> 키를누르면하위메뉴가열린다. <ESC> 를두번누르거나, <Exit> 를선택하면상위메뉴로올라간다. ncurses(new-curses) 라이브러리를사용 설정가능한값 Y는커널포함, N은제외, M은모듈을뜻한다. 설정상태는 [ ] 또는 < > 안에 *( 선택 ), M( 모듈 ), 빈칸 ( 제외 ) 으로표시된다. 모듈기능 (M) 은 < > 으로표시된질문에만쓸수있다. 33
커널컴파일 : 환경설정 (4/5) 커널컴파일 : make menuconfig make menuconfig : 실행화면 34
커널컴파일 : 환경설정 (5/5) 커널컴파일환경설정 : make xconfig make xconfig X 윈도환경에서구현한것으로 GUI 형식으로옵션지정 X 윈도와 Tcl/Tk 인트프리터 / 툴킷라이브러리가반드시필요 35
커널컴파일 설치 36
커널컴파일과설치 커널컴파일 : 설치 (1/4) 단계별명령수행후설치 1 // 컴파일환경설정 # make menuconfig # make dep // 컴파일을위한의존성관계설정 ( 커널 2.6이후불필요 ) # make clean // 이전에수행했던컴파일과정에서생성된목적파일, 커널, 임시파일, 설정값등을삭제한다. # make bzimage // 커널이미지생성 # make modules // 모듈컴파일 37
커널컴파일과설치 커널컴파일 : 설치 (2/4) 단계별명령수행후설치 2 // bzimage 파일을 /boot 로복사하고, bzimage 의이름을다음과같이바꾼다. vmlinuz vmlinuz-x.x.xx // System.map 파일복사 # cp /usr/src/linux/system.map /bott/system.map-2.4.16 # make /etc/lilo.conf modules_install 파일또는 /etc/grub.conf // 파일컴파일수정된모듈을 /lib/modules 아래설치 38
커널컴파일과설치 커널컴파일 : 설치 (3/4) 간단한컴파일과설치과정 // 컴파일환경설정 # make menuconfig... // 커널컴파일 # make all // 커널설치 # make modules_install # make install /boot 아래에필요한파일을복사하고 grub.conf의갱신까지모든과정을한번에해준다. 39
커널컴파일과설치 /etc/grub.conf 커널컴파일 : 설치 (4/4) default=2 timeout=10 splashimage=(hd0,5)/grub/splash.xpm.gz hiddenmenu title Fedora Core (2.6.16) root (hd0,5) kernel /vmlinuz-2.6.16 ro root=label=/1 rhgb quiet initrd /initrd-2.6.16.img title Fedora Core (2.6.11-1.1369_FC4) root (hd0,5) kernel /vmlinuz-2.6.11-1.1369_fc4 ro root=label=/1 rhgb quiet initrd /initrd-2.6.11-1.1369_fc4.img title Other rootnoverify (hd0,0) chainloader +1 40
커널컴파일옵션설정 커널 커널컴파일 커널컴파일옵션설정 커널컴파일옵션설정 커널패치 41
커널컴파일 : 옵션설정 (1/8) Code maturity level options 커널코드의성숙도를선택하는부분 개발버전수준의소스를사용하도록선택해주는것 Y를선택하면개발중인새로운기능과, 새로운드라이버를포함할것인지조금더많은질문을하며, 시험적인기능은뒷부분에 (EXPERIMENTAL) 이란꼬리표가붙는다. 가장최신의 ( 따라서실험적이기도한 ) 커널개발에접근하고자하는가? General setup 리눅스에서네트워킹, PCI BIOS, MCA, PCMCIA, 프로세서사이에서동기화와정보교환을가능하게하는 IPC 등과같은기능을선택한다. 42
커널컴파일 : 옵션설정 (2/8) Loadable module support 커널에서모듈을사용할수있게해주는것 [*] Enable loadable module support 모듈을이용하면자주쓰이지않는장치드라이버나기능들을커널바깥에모듈로두었다가필요할때에만동적으로메모리에적재하여사용한다. 작업이끝나면메모리에서다시제거하므로메모리를효율적으로사용할수있고, 커널크기가도감소한다. 모듈은스스로가컴파일되어독자적인기능을가지므로모듈로설정한기능에변화가있더라도전체커널에는손대지않을수도있다. Processor type and features 자신의컴퓨터 CPU 를선택하는화면 프로세서에맞추어서커널을최적화시킬수있다. 43
Networking 커널컴파일 : 옵션설정 (3/8) 패킷전송, 라우팅, 네트워크링크, 필터링과같은네트워킹에필요한옵션을설정한다. Networking options Amateur Radio support 리눅스를 HAM 과같은아마추어라디오와연결시키고싶은사람을위한옵션 <M> IrDA (infrared) subsystem support IrDA(the Infrared Data Associations) 는적외선통신에관한표준으로노트북이나 PDA와같은장치와의적외선통신을위한설정을하는부분 44
Device Drivers 커널컴파일 : 옵션설정 (4/8) Memory Technology Devices (MTD) MTD는플래시, RAM 그리고칩과같은것을지칭하는것을지칭하는것으로커널이이러한장치를하나의파일시스템으로인식하여관리할수있도록해준다. Parallel port support 병렬포트지원여부를설정하는것 프린터및외장형 Zip 드라이브사용시선택할수있다. Plus and Play support PnP 기능을사용하기위해설정하는부분 Block devices 블록장치는플로피디스크, 하드디스크, CD-ROM 처럼블록단위로읽고쓰는장치를말한다. 리눅스에붙일수있는여러저장장치들에대한지원여부를결정한다. Multi-device support (RAID and LVM) RAID나 LVM과같은다중장치드라이버를설정하는부분 45
커널컴파일 : 옵션설정 (5/8) Device Drivers (cont d) SCSI device support SCSI 지원여부를위한것 IEEE 1394 (FireWire) support I2O device support 지능형입출력 (Intelligent Input/Output; I2O) 아키텍처의지원여부를설정하는메뉴 I2O 인터페이스어댑터카드가설치되어있어야한다. Network device Support 네트워크장치를설정하는부분 ISDN subsystem 내장형 ISDN(Integrated Services Digital Networks) 통신을지원하기위한장비에대한드라이버와커널지원옵션들 Telephony Support IP 를가지고음성을전달할수있는카드를사용하는경우선택한다. 46
커널컴파일 : 옵션설정 (6/8) Device Drivers (cont d) Input device support 키보드나마우스와같은입력장치지원에대한항목을설정하는부분 Character devices 가상터미널, 시리얼터미널등과같은블록장치가아닌문자장치지원에대하여설정하는부분 Multimedia devices Graphics support Sound 리눅스에서사용할수있는사운드카드목록이표시된다. USB suport USB 지원을위한메뉴로 USB 장치를사용한다면선택해준다. 47
File systems 커널컴파일 : 옵션설정 (7/8) 리눅스시스템이지원할파일시스템을선택 Second extended fs support Ext3 journalling file system support Reiserfs support JFS filesystem support XFS filesystem support Minix fs support CD-ROM/DVD Filesystems DOS/FAT/NT filesystems 기타등등 48
Kernel hacking 커널컴파일 : 옵션설정 (8/8) 시스템이다운되었을경우에도특정키조합을통해시스템에접근할수있도록해준다. 개발버전의커널을사용할때나커널디버깅시유용하게사용가능하다. 만약에선택할경우커널의속도가느려지는단점이있으며, 커널에디버깅코드가활성화된다. 49
커널패치 커널 커널컴파일 커널컴파일옵션설정 커널패치 커널패치 50
커널패치 (1/2) 커널패치 커널업그레이드에해당 예 ) 2.4.16 커널 2.4.16-1 으로업그레이드 패치다운로드 패치파일명 patch 단어가앞에붙는다. 패치에의해설치되는리눅스버전번호가뒤에붙는다. patch-2.4.0-test10 파일 : linux-2.4.0-test9 버전에만적용 patch-2.4.16-1.gz 를다운로드 다운받은패치파일을 /usr/src 디렉터리로이동 gzip 명령어를사용해서패치의압축을푼다. # gzip -d patch-2.4.16-1.gz 51
커널패치 (2/2) 패치적용하기 patch-2.4.16-1 을 linux-2.4.16 에적용하려면 # patch -p0 < patch-2.4.0-test10 패치가잘동작한다면 /usr/src/linux 디렉터리로가서커널을재컴파일 # make dep; make clean; make zimage; make modules 패치가잘동작하지않는다면 다음두이유중의하나일것이다. 패치가적용될커널버전번호와현재설치되어있는커널의버전번호가서로맞지않는경우» 예를들어, patch-2.4.16-5 를 linux-2.4.16-4에작용한경우 현재커널의소스자체가변경되었다. 52
참고문헌 [1] 이종원, 우분투리눅스 ( 시스템 & 네트워크 ), 한빛아카데미, 2018. [2] 백창우, 유닉스리눅스프로그래밍필수유틸리티, 한빛미디어. 2010. [3] "The Linux Kernel Archives", the Linux Kernel Organization, 2018 of viewing the site, https://www.kernel.org/. 이강의자료는저작권법에따라보호받는저작물이므로무단전제와무단복제를금지하며, 내용의전부또는일부를이용하려면반드시저작권자의서면동의를받아야합니다. Copyright Clickseo.com. All rights reserved. 53