Linux
[ARMv8] aarch64 프로세서 상태 레지스터(PSTATE)
PSTATE는 프로세서 상태 레지스터입니다. 이 레지스터를 이용해 프로세서의 상태를 알수도 있고 설정할 수도 있습니다. 아래 그림은 ARM Developer 페이지에서 가져온 그림입니다. PSTATE field를 정의해 놓았습니다. (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/BABICCBC.html) PSTATE의 각 비트가 하나 씩 어떤 행위를 하는지 정리해보겠습니다. N(Negative Condition Flag) : 연산의 결과 값이 음수인 경우 설정되는 비트 Z(Zero Condition Flag) : 연산의 결과 값이 0인 경우 설정되는 비트C(Carry Condition Flag) : 캐리 발생 시 설정되는 비트..
[커널분석] parse_early_param()
parse_early_param() 함수는 커널 부트업 타임에 사용하는 early parameter를 파싱해 오는 함수로 boot command line을 파싱해오는 역할을 합니다. parse_early_param()init/main.c1234567891011121314/* Arch code calls this early on, or if not, just before other parsing. */void __init parse_early_param(void){ static int done __initdata; static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata; if (done) return; /* All fall through to do_early_par..
[ELF] Sections and the Section header table
ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 지난 글에 이어 이번 글에서는 ELF 파일 포맷에서 Section 과 Section Header Table에 대해 알아보겠습니다. [이전 글] 2018/08/27 - [Linux/Debugging & Testing] - [ELF] ELF Header 2018/08/29 - [Linux/Debugging & Testing] - [ELF] Segment와 Program Header Section Header Table Section Header Table은 ELF file의 거의 모든 파트(?)에 대한 정보가 들어있습니..
[ELF] Segment와 Program Header
ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 지난 글에 이어 이번 글에서는 ELF 파일 포맷에서 Program Header에 대해 알아보겠습니다. [이전 글]2018/08/27 - [Linux/Debugging & Testing] - [ELF] Executable and Linking Format - ELF Header Program HeaderProgram Header Table은 ELF내의 Segment들에 대한 정보와 그 Segment들을 메모리에 어떻게 로드해야 하는지에 대한 정보가 포함되어 있습니다. Segment란 앞 선 글에서도 설명하였지만 다시 ..
[ELF] ELF Header
ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 이번 글에서는 ELF 파일 포맷에 대해 알아보겠습니다. 개념 및 사전 지식 정의ELF는 하나의 ELF Header와 파일데이터로 구성되어 있습니다. 아래 그림을 보시면 파일의 가장 위에 ELF Header 정보가 들어있고, 그 아래 program header table이 있습니다. 그 이후 Segment 정보와 Section 관련 정보들이 나오네요. ELF header Program header table Segment 1 Segment 2 ... Section header table optional ELF head..
[커널분석] static void __init setup_machine_fdt(phys_addr_t dt_phys)
fdt를 최초 셋업하는 함수입니다. 함수 인자로 phys_addr_t 자료형의 dt_phys를 전달받는다. 전달받은 주소를 이용해 부팅과정 중 먼저 필요한 항목에 대해 설정해준다. 185 static void __init setup_machine_fdt(phys_addr_t dt_phys)186 {187 void *dt_virt = fixmap_remap_fdt(dt_phys);188 const char *name;189190 if (!dt_virt || !early_init_dt_scan(dt_virt)) {191 pr_crit("\n"192 "Error: invalid device tree blob at physical address %pa (virtual address 0x%p)\n"193 "The..