[커널 20차] 28주차

2023.11.19 00:44

이민찬 조회 수:64

 

2023.11.18 (28주차) - 약 8명 참여

head.S: init_cpu_task 부터 __primary_switched의 set_cpu_boot_mode_flag 분기 전까지 진행

 

1. init_cpu_task x4, x5, x6

- 인자 값

x4: init_task의 주소

x5, x6: temp

Hy4R3X748mMf2OVlyPw3miNJQBNGNWE9c-PFN8oi



 

1) per_cpu를 간단하게 살펴보았다.

Cpu 별로 독립적인 메모리 공간을 제공하는 것을 per cpu 변수라 한다.

BHrpttSbsw-RSAl8z_KEXi31fH9WQ5kEiJQVwwo8

http://jake.dothome.co.kr/per-cpu/

https://www.bhral.com/post/가볍게-살펴보는-per-cpu

 

2) sp_el0가 init_task의 시작 주소를 가리키는 것

PQMeD9-sqNomw1qm4DTnf7Gs50w3wFuN1aSlw1pC

https://github.com/torvalds/linux/commit/6cdf9c7ca687e01840d0215437620a20263012fc

 

3) tpidr에 cpu_offset을 저장하는 것 

- tpidr 을 사용하는 이유는 tpidr의 정해진 용도가 아닌, 접근 속도를 빠르게 하기 위해 스크래치 레지스터로 활용하는 것 같다.

https://stackoverflow.com/questions/64856566/what-is-the-purpose-of-thread-id-registers-like-tpidr-el0-tpidr-el1-in-arm

 

- 1차 및 2차 부트 경로의 일관성과 관련있는 것 같고, smp_prepare_boot_cpu()에서 CPU0의 오프셋을 다시 초기화해야한다고 나와있다.

https://github.com/iamroot20/linux-stable/commit/3d8c1a013d78f32ee266097496cbd89b734b5fcb

 

cf) pt_regs.stackframe  : 마지막 프레임 (backtrace)

cf) TSK_TI_SCS_SP (/arch/arm64/kernel/asm-offsets.c) thread_info.scs_sp

cf) __per_cpu_offset (mm/percpu.c)

 

2. vbar_el1 설정

(arch/arm64/kernel/entry.S)

wbUtcXgOE7o2o89qvbZnklNxwGl5Y8Kz45LOgZaV


 

3. Arm64 함수호출규약

(__primary_switched 중)

stp     x29, x30, [sp, #-16]!        

mov     x29, sp

 

427 라인과 455 라인. 첫번째 추가

https://github.com/iamroot20/linux-stable/commit/60699ba18b69ff210ed0304bc23f6c9d11d27a72

 

424 라인과 465 라인. 변경

https://github.com/iamroot20/linux-stable/commit/8e334d729bc4787f728e9e5abc91649f131124ff

 

- 함수 콜 스택을 그려보는 시간을 가짐. 아래의 C 코드

#include <stdio.h>

void func3() 

{

int a, b, c;

a = 20;

b = 3;

c = a * b;

}

 

void func2() 

{

int a, b, c;

a = 50;

b = 10;

c = 50 - 10;

func3();

}

 

void fun1()

{

int a, b, c;

a = 100;

b = 100;

c = a + b;

func2();

}

 

int main(void)

{

func1();

return 0;

}

 

4. FDT 시작 주소 보관 (fdt_pointer)

 

5. kimage_voffset 

kimage_vaddr : kaslr offset이 더해진 커널 가상 주소의 시작

x0 : _text, 커널 물리 주소 시작

yLnN9i96Cfe6t0RvUCOGsOPtwpvfNHtO_gCFk19G

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 626
248 [커널 19차] 103 주차 Min 2024.04.28 4
247 [커널 20차] 48주차 무한질주 2024.04.25 22
246 [커널 19차] 102 주차 Min 2024.04.20 37
245 [커널 19차] 101 주차 Min 2024.04.13 63
244 [커널 19차] 100 주차 Min 2024.04.13 16
243 [커널 19차] 99 주차 Min 2024.03.30 82
242 [커널 19차] 98 주차 Min 2024.03.23 55
241 [커널 19차] 97 주차 Min 2024.03.16 50
240 [커널 19차] 96 주차 Min 2024.03.14 32
239 [커널 19차] 95 주차 [2] Min 2024.03.03 111
238 [커널 20차] 32주차 brw 2023.12.16 386
237 [커널 20차] 29주차 brw 2023.11.27 161
236 [커널 20차] 27주차 brw 2023.11.21 86
235 [커널 20차] 26주차 brw 2023.11.21 48
» [커널 20차] 28주차 이민찬 2023.11.19 64
233 [커널 20차] 25주차 이민찬 2023.10.30 120
232 [커널 20차] 24주차 이민찬 2023.10.22 743
231 [커널 20차] 23주차 이민찬 2023.10.14 81
230 [커널 20차] 22주차 이민찬 2023.10.08 76
229 [커널 20차] 21주차 이민찬 2023.09.23 116
XE Login