Wonhyuk Yang2021년 6월 14일[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)지난 시간에는 MMU를 활성화하기 전에 필요한 여러가지 시스템 레지스터들을 세팅해줬어요. 이제 MMU를 활성화시키고 start_kernel 함수로 진입할 때가 되었네요. 자 그럼 힘차게 살펴보도록 할게요. 해당 글의 타겟 아키텍처는...
Wonhyuk Yang2021년 6월 2일[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)이전 시간에는 두 개의 매핑 테이블을 만드는 과정을 살펴봤어요. 이제 남은 것은 CPU가 가상 메모리를 활성화 시키고, 해당 매핑 테이블을 사용하도록 시스템 레지스터들을 세팅해주는 일이에요. 이 부분은 하드웨어어 매우 밀접한 부분이므로, 중요한...
Wonhyuk Yang2021년 5월 31일[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)Remind 지난 시간에는 임시 페이지 테이블을 만들기 위해 필요한 페이지 수를 계산해서 링커 스크립터를 통해 예약해둔 것을 확인할 수 있었는데요. 이번 시간에는 그 공간을 사용해서 임시 페이지 테이블을 만드는 과정을 살펴볼 것이에요. 이제...
Hello Stock2021년 5월 6일Linux kernel head.S, main.c 분석하기 (1) (GDB + QEMU + BUILDROOT)head.S 를 분석하거나, main.c의 start_kernel함수를 분석하는 과정에서 특정 변수나 레지스터의 값을 확인하고 싶을 때가 있습니다. GDB를 사용하면 자신이 분석중인 커널소스를 기준으로 라인바이 라인으로 이동하며 변수나 레지스터의...
Wonhyuk Yang2021년 5월 6일[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)앞선 시간에서는 리눅스 커널 VM layout이 어떻게 배치되었는지에 대해 알아보았어요. 그리고 실제 배치된 물리 메모리와 가상 메모리가 다른 점을 해결하기 위해 변환 테이블(Translation Table)을 만들 필요가 있다고 했는데요....
Wonhyuk Yang2021년 5월 4일[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)이전 포스트에서 링커 스크립터를 이용하여 오브젝트 파일들을 내가 원하는 주소에 재배치하는 과정을 살펴봤어요. 그러면 이러한 재배치는 그냥 임의의 위치에 해도 되는 것일까요? 사실 가상 주소의 영역들은 특정 목적에 따라 배정되었어요. 이렇게 배정된...
Wonhyuk Yang2021년 4월 29일[Training] Arm v8 Linux kernel head.S 찍어먹기 (2)이제 head.S를 분석하기 시작하나?" 생각하실 수 있지만 아쉽게도 조금 더 알아야 할 것들이 있어요. 이번 시간에는 Linker script와 리눅스 커널 virtual memory layout에 대해 알아 볼 것이에요. 아마 Linker...
Wonhyuk Yang2021년 4월 26일[Training] Arm v8 Linux kernel head.S 찍어먹기 (1)Linux kernel의 첫 시작인 head.S를 가볍게 시작해보자.