리눅스 커널을 Line-by-line으로 분석하려면, 특히 리눅스 커널 이미지가 처음부터 실행되는 모습을 보고자 한다면!
몇 가지 배경 지식을 알고 있어야 한다.
Linux를 Line-by-line으로 보기 위해서 리눅스의(ARM architecture의 arm64) 처음 시작점부터 알아보려고한다.
1 2 3 4 5 6 7 8 |
ENTRY(_text) ... . = KIMAGE_VADDR + TEXT_OFFSET; .head.text : { |
#define HEAD_TEXT KEEP(*(.head.text)) |
이와 같이 정의되어있다. Linking 할 모든 Object 파일들의 "head.text" section을 모아 여기에 링킹 하겠다 하는 의미이다.
밑에서 head.S 내용에서 보겠지만 head.S의 일부 코드도 이 section에 포함되어있는 코드들이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 32 |
__HEAD |
#define __HEAD .section ".head.text","ax" |
EFI를 사용하지 않고 있다고 가정하고있으므로, Image의 첫번째 명령어는 14번째 줄이 될 것이다.
부트로더가 리눅스를 실행시키면 14번 째 줄 명령어를 처음으로 실행하게 되고, 즉 stext 함수를 실행하게 된다.
다음부터는 stext 함수에 대해서 보겠다.
따로 만들어야 하는 문서: 링커스크립트, ELF, 섹션
'전공공부 > Linux' 카테고리의 다른 글
setup_arch: arm64_memblock_init (0) | 2021.09.12 |
---|---|
function: set_cpu_boot_mode_flag (0) | 2020.11.09 |
[2020.10.17] Linux Kernel, primary_entry - 1 (0) | 2020.10.21 |
[Line by line] Linux Kernel, SYM_CODE_START macro (0) | 2020.10.21 |
Linux Kernel Image Header - arm64 (4) | 2019.02.16 |