SMALL
리눅스 커널 소스의 부팅 과정
하나 하나 깊게 짚고 들어가기 전에 넓게 그림을 그리고 간다.
(0) start.S 부분이 리눅스 커널의 가장 먼저 시작 부분. (/linux-3.16.3-elv210-v01/arch/arm/boot/compressed)
misc.c 부분 (/linux-3.16.3-elv210-v01/arch/arm/boot/compressed)
(1) 리눅스 커널의 압축이 해체가 됨
(2) 압축된 코드를 재배치 함 (compressed/head.S)
(3) head.S (arch/arm/kernel/) —> 위의 head.S 와는 다름
시스템을 초기화 한 후, start_kernel을 호출한다.
이러한 부분에서 스택과 같은 것을 설정한다. 그 후 이제 .c 파일이 실행 할수 있게 된다.
3-1 커널 동작 모드 설정
프로세서의 동작 모드를 SVC로 변경하고, 인터럽트 Disable 함
3-2 프로세서 정보 검색
arch/arm/mm/proc-v7.S에 명시 되어 있음
커널이 동작하기 위해서 어떤 프로세서를 사용하는지 검색
3-3 머신 아키텍처 정보 검색(커널 2.6 버전 까지만 존재)
arch/cpu/machine 위치에 존재 함
머신에 맞는 아키텍처 정보를 검색하고 설정하는 루틴
3-4 페이지 테이블 설정과 MMU, 캐시 설정
커널의 초기 동작에 필요한 페이지 테이블 설정
MMU(CPU의 메모리 관리)와 캐시를 활성화 시킴
3-5 커널 정보 설정, 스택 설정, BSS 영역 클리어
arch/cpu/kernel/head-common.S 에 정의되어 있음
커널 정보와 스택 정보, BSS 영역 정보를 설정
(4) main.c(./init/) : start_kernel 함수에 의해서 실행된다.
계속해서 커널의 초기화가 진행된다.
to be continue… 아마
LIST
'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글
x64, x32bit multi_arch shellcode [번역] (0) | 2017.09.06 |
---|---|
64bit reverse shellcode (0) | 2017.09.06 |
리눅스 커널 이미지 구조 (0) | 2017.08.22 |
VFS - Virtual File System[1] (0) | 2017.05.06 |
[*nix] 자가 삭제(unlink), 프로세스 이름 변경(prctl) (0) | 2017.04.15 |