issues
search
tonykang22
/
study
0
stars
0
forks
source link
[리눅스 개발환경] 22. 리눅스 커널 구조 및 컴파일
#93
Open
tonykang22
opened
2 years ago
tonykang22
commented
2 years ago
22. 리눅스 커널 구조 및 컴파일
리눅스 커널 구조
출처 :
https://flylib.com/books/en/3.475.1.15/1/
Kernal은 추상화를 통해 자원들을 관리한다.
Application layer에서 System call을 이용해 Linux-Kernal에 특정 요청을 할 수 있다.
Component 요소와 주요 업무는 다음과 같이 크게 나눌 수 있다.
Process management
Multitasking
Memeory management
Virtual memory
File systems
Files, directories
Device drivers
Device acess, terminals
특정한 device에 종속적인 코드가 많기 때문에 이번 강의에서는 제외
Network
Network, functionality
양이 너무나 방대하기 때문에 이번 강의에서는 제외
Linux-Kernal 소스 코드
이 또한 "프로그램"이다.
컴파일을 통해 바이너리로 아웃풋이 나오도록 되어있다.
바이너리가 부팅될 때, 로딩이 되어서 자원을 담당하게 되는 것이다.
가령, while 이라는 무한 루프가 돌고, 무한 루프가 입력을 하나 씩 받아서 프린트를 한다면, 그 자체로 커널이라 볼 수도 있다.
loop을 돌면서 어떠한 action에 따라 기능을 수행하는 역할을 수행하는 것을 커널의 주요 역할로 볼 수 있다.
소스 코드 참고
Documentation
커널 소스 문서화
LICENSES
커널 소스에 적용 할 라이센스와 라이센스가 다른 개별 소스 파일을 포함한다.
이 디렉토리에는 기본 (GNU GPL), COPYING 파일에 나열된 예외 및 기타의 3가지 하위 디렉토리가 존재한다.
arch
특정 아키텍처의 소스 코드 (예 : powerpc, x86 등). 이 디렉토리에는 i386, sparc, arm 등 지원되는 각 아키텍처에 속하는 서브 디렉토리가 존재한다.
block
블록 I/O 계층은 블록 장치(하드디스크, DVD, 플로피디스크 등) 및 해당 요청을 관리하기 위한 코드를 포함한다.
certs
커널이 서명된 모듈을 로드할 수 있도록 모듈 서명을 활성화하는 인증서 및 서명 파일을 포함한다.
crypto
암호화 API로, 암호화 및 압축 작업을 처리하는 암호화 암호를 포함한다.
drivers
하드웨어 장치 드라이버로, 하드웨어를 지원하기 위한 장치 드라이버 코드가 들어있다.
이 디렉토리에는 비디오, 블루투스 등과 같은 각 하드웨어(하위 하드웨어 지원)와 같은 하위 디렉토리가 존재한다.
fs
가상 파일 시스템 및 추가 파일 시스템에 대한 코드로, 이 디렉토리에는 파일 시스템을 지원하고 읽고 쓰는 코드가 들어있다.
include
커널 헤더로 이 디렉토리에는 코드를 컴파일하는 함수와 같은 커널 파일의 C 헤더가 존재한다.
init
커널 부팅 및 커널 초기화와 관련된 소스 코드가 존재한다. 소스 코드는 /init 디렉토리 내의 mainc.c라는 파일에 저장된다.
코드는 커널과 일부 초기 프로세스를 초기화한다.
ipc
신호 및 파이프와 같은 프로세스 간 통신이 존재한다.
kernel
스케줄러 신호 처리 코드 등과 같은 핵심 서브 시스템이 존재한다.
lib
라이브러리 루틴 공통 문자열 조작, 하드웨어 종속 조작, 디버깅 루틴 및 명령행 구문 분석 코드가 존재한다.
mm
메모리 관리 및 가상 메모리를 관리한다.
커널은 하드웨어와 가상 메모리(스왑)를 모두 관리한다.
이 디렉토리는 메모리 관리를 위한 코드를 저장한다.
net
네트워크 스택. IP, TCP, UP 등과 같은 통신 프로토콜과 관련된 코드를 포함한다.
samples
샘플 코드 및 구성 파일이 존재한다.
scripts
커널을 빌드하는 스크립트가 존재한다.
security
LSM (Linux Security Module)은 보안 정책이 모듈 제어에 액세스 할 수 있도록 하는 프레임 워크이다.
sound
사운드 하위 시스템에는 ALSA와 같은 사운드와 관련된 사운드 드라이버 및 코드가 존재한다.
tools
ACPI, cgroup, USB 테스트 도구, vhost 테스트 모듈, GPIO, IIO 및 spi 도구와 같은 압축 커널 개발 도구, 기타 에너지 정책 도구가 존재한다.
usr
파일 시스템을 루트화하고 커널 메모리 캐시에서 초기화하는 initramfs.
virt
가상화,이 디렉토리에는 하이퍼바이저 용 KVM (Kernel Virtual Machine) 모듈이 포함되어 있다.
리눅스 커널 컴파일
리눅스 커널 생성 과정 3단계
커널 구성 (Kernel Configuration)
커널 구성은 새로 리눅스 커널 컴파일 시 사용할 환경 변수 등을 설정하는 과정이다.
하드웨어 특성, 커널 특성 등 설정 정보를 지정하는 방법이다.
make config, make menuconfig, make xconfig 등의 방법이 있다.
커널 구성 단계에서 사용자가 선택한 사항은 .config 이라는 파일에 저장되며 이후 커널 컴파일 단계에서 사용된다.
커널 컴파일 (Kernel Compile)
커널 소스 파일을 이용해 실행 가능한 커널 이미지를 만드는 과정이다.
make bzImage, make zImage 등의 명령으로 생성할 수 있다.
2.6 버전 이후 make 명령으로 생성 가능
커널 컴파일이 완료되면 시스템 아키텍처에 따라 kernel/arch/x86/boot/ 디렉토리 하위에 커널 이미지가 생성된다.
커널 인스톨 (Kernel Installation)
생성된 커널 이미지로 시스템이 부팅될 수 있도록 만드는 과정이다.
생성된 이미지를 파일 시스템으로 복사, 커널 모듈 인스톨, 부트로더(grup) 수정 등의 과정으로 이루어진다.
make install
22. 리눅스 커널 구조 및 컴파일
리눅스 커널 구조
리눅스 커널 컴파일
리눅스 커널 생성 과정 3단계