Uploaded by 박정수

Kernel Compile Presentation

advertisement
2024년 2학기 운영체제실습 2주차
Kernel Compile
System Software Laboratory
School of Computer and Information Engineering
Kwangwoon Univ.
Download Kernel Source
참고: sudo 명령어
▪
▪
최고 관리자 (root) 권한으로 프로그램을 실행
▪
e.g.
→ 권한이 없어 실패
→ root 권한이 생겨 성공
→ 본인 계정 비밀번호 입력
→ root 계정으로 전환
→ 로그인 된 계정이 root로 변경 (최고 권한을 가지고 있으므로 사용에 유의)
2
Download Kernel Source (cont’d)
Kernel Source Download
▪
▪
http://www.kernel.org
▪
Our target kernel: 5.4.282
Download
▪
▪
$ cd /usr/src
▪
$ sudo wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.282.tar.xz# root 권한 필요
3
Compile Kernel
▪
전체 과정
$ make menuconfig
커널 환경 설정 (최초 1회 필수, 이후 필요 시 수행)
$ make -jn
커널 컴파일 (n: 컴파일을 분할하여 수행할 thread 수)
$ make modules_install
컴파일 된 모듈을 /lib/modules 로 이동
$ make install
컴파일 된 커널을 부트로더에 등록
4
Compile Kernel (cont’d)
▪
참고: vi 명령어
명령키
수행 작업
i
커서 앞에 삽입
a
커서 뒤에 삽입
o
현재 줄 다음에 삽입
I
현재 줄 첫 칸 앞에 텍스트 입력
A
현재 줄 끝에 텍스트 입력
O
현재 줄 앞에 삽입
:q
작업 내용을 저장하였으면 vi 종료
:q!
작업내용을 저장하지 않고 vi 종료
:wq
작업 내용을 저장한 후 vi 종료
:wq 파일명
작업 내용을 지정한 파일명으로 저장한 후 vi 종료
5
Compile Kernel (cont’d)
코드 압축 해제
▪
▪
$ tar -xvf linux-5.4.282.tar.xz
▪
$ cd linux-5.4.282
Kernel Extra Version 수정
▪
$ vi Makefile
▪
▪
아래와 같이 본인 학번 삽입
6
Compile Kernel (cont’d)
Kernel 환경 설정
▪
▪
$ sudo apt install build-essential libncurses5-dev bison flex libssl-dev libelf-dev dwarves zstd
▪
$ sudo make menuconfig
7
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(1) 커널 모듈 적재 시 발생할 수 있는 문제 해결
▪
“Enable loadable module support” ➔ “Forced module loading” 체크
▪
→ 엔터
→ 스페이스 입력 시 [ ] 이 [*] 로 변환 (설정 적용)
▪
ESC 두 번 연속 입력 시 이전 메뉴로 복귀
8
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(2) 컴파일 시 문제가 될 수 있는 모듈 제거
▪
▪
“Device Drivers” ➔ “Staging drivers” 체크 해제
→ 엔터
→ 스페이스 입력 시 [*] 이 [ ] 로 변환 (설정 해제)
9
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(3) 컴파일 시 문제가 될 수 있는 옵션 제거
▪
▪
“Binary Emulations” ➔ “x32 ABI for 64-bit mode” 체크 해제
→ 엔터
→ 엔터
→ 스페이스 입력 시 [*] 이 [ ] 로 변환 (설정 해제)
10
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(4) 설정을 파일 (.config)에 저장
▪
▪
방향키 중, 우측 키 세 번을 눌러 “< Save >”로 이동 및 엔터 입력
11
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(3) 설정을 파일 (.config)에 저장
▪
▪
“< Ok >” 및 “< Exit >“ 입력으로 환경 설정 완료
12
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(4)시스템 폐기키 및 보안키 비활성화
▪
▪
Solution1. 스크립트 활용하여 수정
▪ $scripts/config --disable SYSTEM_TRUSTED_KEYS
▪ $scripts/config --disable SYSTEM_REVOCATION_KEYS
→ 추후, make 시 키 요청 발생
공백 상태로 엔터
13
Compile Kernel (cont’d)
Kernel 환경 설정
▪
(4)시스템 폐기키 및 보안키 비활성화(Cont’d)
▪
▪
Solution2. config 파일 직접 수정
▪ $sudo vi .config
→ 해당 값 공란으로 변경
→ 해당 값 공란으로 변경
14
Compile Kernel (cont’d)
initramfs 설정 변경
▪
(5)Error : initd is too big 방지를 위한 모듈 설정
▪
▪
$cd /etc/initramfs-tools
▪
$vi initramfs.conf
→ 해당 값 most -> dep 로 변경
15
Compile Kernel (cont’d)
Kernel Compile
▪
$ make -jn
▪
▪
n : 컴파일을 나누어 수행할 thread 수
▪ 가상 머신에 할당한 CPU core 수의 1.5배 ~ 2배 정도면 적합
Module install
▪
$ make modules_install
▪
Compile된 Kernel을 Boot Loader에 등록
▪
$ make install
▪
▪
kernel Image(/arch/x86/boot/bzImage)를 /boot로 복사
▪
System Map(System.map)을 /boot로 복사
▪
Grub 부트 로더에 자동 등록
16
Compile Kernel (cont’d)
Grub 설정
▪
Grub
▪
▪
대부분의 리눅스 배포판에서 사용하는 부트로더
Grub의 실행과 역할
▪
▪
실행과 동시에 grub 설정 파일을 읽고 boot menu를 화면에 출력
▪
사용자가 선택한 kernel image를 메모리에 적재 및 제어권을 커널에 전달
Grub 설정 파일
▪
▪
GRUB_DEFAULT
: 부팅할 기본 커널 이미지
▪
GRUB_TIMEOUT_STYLE
: 사용자의 선택 스타일
▪
GRUB_TIMEOUT
: 사용자의 선택을 기다리는 시간
▪
GRUB_CMDLINE_LINUX_DEFAULT
:
17
Compile Kernel (cont’d)
Grub 설정
▪
▪
Grub 설정 파일 수정: $ vi /etc/default/grub
▪
수정 후 grub 옵션 업데이트 : $sudo update-grub
18
Compile Kernel (cont’d)
재부팅
▪
▪
$ reboot
▪
Grub 부트로더 선택 메뉴에서 컴파일한 커널 선택
▪
커널 버전 확인
▪
$ uname -r
19
Download