본문 바로가기

학부_대학원/대학원_학과공부정리

리눅스 커널 디렉토리 구조

SMALL

리눅스 커널 구조 확인


richong@ubuntu:/usr/src/linux-3.16.43/arch/x86/kernel$ pwd

/usr/src/linux-3.16.43/arch/x86/kernel


arch Directory

리눅스 커널 기능 중 하드웨어 종속적인 부분들이 구현되어 있고 architecture를 의미한다. 각 CPU에 해당하는 디렉토리에 기능들이 구현되어 있다.

richong@ubuntu:/usr/src/linux-3.16.43/arch$ ls

alpha  arm64     c6x   hexagon  Kconfig  metag       mn10300   powerpc  sh     um         xtensa

arc    avr32     cris  i386     m32r     microblaze  openrisc  s390     sparc  unicore32

arm    blackfin  frv   ia64     m68k     mips        parisc    score    tile   x86


위와 같이 arm, mips x86 등 다양한 cpu가 존재한다. 참고하는 책은 x86 버전이여서 x86을 확인한다.

arch/$(ARCH)/ 에는 무엇이 있는지 확인해보면...

arch/x86/boot : 부팅에 사용하는 부트스트랩 코드가 구현되어 있음.

arch/x86/kernel : 위에서 설명했듯이 task manager 에서 문맥 교환이나 쓰레드 관리 기능이 구현되어 있음.

arch/x86/mm : memory manager에서 페이징 관리와 관련된 하드웨어 종속 부분이 구현되어 있음.

arch/x86/lib : 커널이 사용하는 라이브러리 함수가 구현되어 있음.



fs Directory

linux에서 지원하는 파일시스템open(), read(), write() 와 같은 시스템 호출이 구현되어 있음.

richong@ubuntu:/usr/src/linux-3.16.43/fs$ pwd

/usr/src/linux-3.16.43/fs


mm Directory

메모리 관리자가 구현되어 있는 디렉토리임.

물리 메모리, 가상 메모리, 동적 메모리 관리 기능이 구현되어 있음.


richong@ubuntu:/usr/src/linux-3.16.43/mm$ pwd

/usr/src/linux-3.16.43/mm


driver Directory

리눅스에서 지원하는 디바이스 드라이버가 구현되어 있는 디렉토리임.

간단하게 디바이스 드라이버 종류를 살펴보면


파일 시스템을 통해 접근되는 블록 디바이스 드라이버

사용자 수준 응용 프로그램이 장치파일을 통해 직접 접근하는 문자 디바이스 드라이버

tcp/ip를 통해 접근되는 네트워크 디바이스 드라이버



include Directory

리눅스 커널이 사용하는 헤드 파일들이 구현된 디렉토리 임.

하드웨어에 독립적, 즉 하드웨어와 별 상관없는 부분들인 include/linux에 정의되어 있음.

반면에, 하드웨어에 종속적, 즉 하드웨어에 따라서 변경되어야 할 부분은 include/ams-$(ARCH)에 정의되어 있음.


richong@ubuntu:/usr/src/linux-3.16.43/include/linux$ pwd

/usr/src/linux-3.16.43/include/linux


richong@ubuntu:/usr/src/linux-3.16.43/include/asm-generic$ pwd

/usr/src/linux-3.16.43/include/asm-generic



init Directory

커널의 초기화 부분, 즉 커널의 메인 시작함수가 구현된 디렉토리 임.

하드웨어 관련 초기화는 arch/$(ARCH)/kernel에 있는 head.S와 misc.c에서 이루어지고,

init 디렉토리에 있는 main 함수의 start_kernel() 함수로 흐름이 넘어온다.


asmlinkage __visible void __init start_kernel(void)

{

        char * command_line, *after_dashes;

        extern const struct kernel_param __start___param[], __stop___param[];

... 


richong@ubuntu:/usr/src/linux-3.16.43/init$ pwd

/usr/src/linux-3.16.43/init


[출처] : 리눅스 커널 내부 구조

LIST

'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글

VFS - Virtual File System[1]  (0) 2017.05.06
[*nix] 자가 삭제(unlink), 프로세스 이름 변경(prctl)  (0) 2017.04.15
Linux Kernel Build  (0) 2017.03.23
Memo  (0) 2017.03.20
PGP[Pretty-Good Privacy]  (0) 2017.03.09