[커널20차] 10주차
2023.07.09 11:22
2023.07.08 (10주차) - 약 22명 참여
head.S 분석 시작
Q: .quad란 무엇인가요?
A: 64bit 공간을 차지한다는 의미의 명령어
driective라는 말로 표현된다.
-
Ref: How does the .quad directive work in assembly? https://stackoverflow.com/questions/43005411/how-does-the-quad-directive-work-in-assembly
Q: driective라는 것이 명렁라는 것을 의미하나요?
A: 미리 정해놓은 키워드, 어셈블리에서는 directive라고 부른다.
이렇게 해달라는 지시사항을 의미한다.
Q: 부트로더는 어디에 있는가
A: 처음에 설치할때 이미 있지만 그렇다고 내장은 아니며 수정할 수 있다
https://docs.google.com/document/d/1fdC3i05dx6vGbPjtSkRnCG-HAGI5r_Xnb2t1dhIPvxs/edit .
Q: head.S 를 프로토콜이 있는가?
A: 프로토콜이 있을 것으로 보여진다.
부트로더와 커널사이의 교감
Q: #define __HEAD .section ".head.text","ax" 의 의미?
A: Elf 바이너리 안에 많은 섹션이 있는데, head.text와 ax는 이 섹션에 대한 플래그이다. A는 allocatable, x는 excutable을 뜻한다. 이 뒤에 오는 것들은 다 이 섹션에 들어가게 된다.
.section 관련 syntax
Q: 어떻게 이해하기 쉽지 않은 어셈블리 코드를 공부하셨는지? 공부 방식이 궁금합니다
A: 익숙해지는 것이 크다
창의성이나 그런것이 필요하지는 않고 익숙해지는 것이 중요하다
리눅스 커널 심층분석
-
책에서 소개되는 코드들이 오래되었다
Bootlin을 가지고 코드를 타고 들어갈 수 있다 -
처음에는 난잡하게 느껴지지만 책을 잡고 Bootlin을 따라가면 익숙해진다
ARM, assembly를 모르면 캐릭터들로 느껴진다. 아는지 모르는지 차이이기에 처음에 연습하는 것이 필요하다
e.g) C로 쓰여있는 If else문을 arm assembly로 변환하는 작업을 연습할수 있다
Q: 링커 스크립트란..??
A: 커널 바이너리를 빌드할 때, 컴파일 이후 바이너리에 대한 링킹을 어떻게 할 것인지를 알려주는 스크립트이다. 평소에 빌드할 때도 돌아가는 스크립트이다. 다만 일반적으로는 수정할 일이 없기에 디폴트로 사용하고 있다면 커널은 효율을 위해 각 섹션을 organize 해 놓은 것 같다.
Q: p primary_entry의 역할은?
A: 부드로더가 해당 명령어를 읽고 나서야, 아래의 명령어들을 차례대로 읽어 커널 바이너리에 대한 정보를 확인할 수 있다. 즉 부트고러다 반드시 접근하게 되는 커널 이미지 헤더.
디버깅을 통해 배우는 리눅스 커널의 구조와 원리
3.1 디버깅이란
3.1.1 디버깅은 문제 해결 능력의 지름길
Q: p.79의 kernel/irq/manage.c 패치코드를 보면 __disable_irq() 함수와 __enable_irq() 함수의 매개변수가 두 개씩 있는 것 처럼 묘사되어 있으나 실제로 코드를 확인해보면 두 번 째 매개변수인 unsigned int irq는 정의되어있지 않다. (p.77의 중앙에 나와있는 코드 예시와 같이 struct irq_desc *desc만 매개변수로 갖고 있을 뿐) 그렇다면 이 패치코드는 어떻게 입력해야 하나? 함수 원형을 변경하는 것은 다른 코드와의 의존성을 생각하면 불가능 할 것 같다.
A: irq_desc_get_irq(desc) 이 함수로 바꾸면 될것 같습니다.
Q: p.85 line27과 line30은 중복?
A:중복 맞음.
Q: p.86 irq_trace_ftrace.sh 실행 시 아래와 같은 에러 메시지와 함께 crash 발생.
irq_trace_ftrace.sh
A: /sys/kernel/debug/tracing/available_filter_functions 파일에 rpi_get_interrupt_info 함수 목록이 있는가를 확인해야 한다. 없다면 해당 함수명이 오타가 걸려 있는지 아니면 rpi_get_interrupt_info 함수 뒤에 EXPORT_SYMBOL(rpi_get_interrupt_info); 를 선언해 보자.
rpi_get_interrupt_info 함수 선언 앞에 noline을 집어 넣는다.
Q. 커널로그를 커널에 추가적으로 넣을 수 있는가
A. 리눅스 자체에 로깅이 많아서 더 로그 생성을 넣지 않고도 할수 있다. 하지만 책에서의 79p에서 로그가 더 필요해서 디버깅 패치를 추가해서 로그를 별도로 만들어준다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 스터디 정리 노트 공간입니다. | woos | 2016.05.14 | 627 |
228 | [커널 20차] 20주차 [2] | 이민찬 | 2023.09.17 | 182 |
227 | [커널 20차] 19주차 | 이민찬 | 2023.09.10 | 103 |
226 | [커널 20차] 18주차 | 이민찬 | 2023.09.03 | 85 |
225 | [커널 20차] 17주차 | 이민찬 | 2023.08.27 | 129 |
224 | [커널 20차] 16주차 | 이민찬 | 2023.08.20 | 132 |
223 | [커널 19차] 64 주차 | Min | 2023.08.19 | 91 |
222 | [커널 20차] 15주차 | 이민찬 | 2023.08.13 | 126 |
221 | [커널 19차] 63 주차 | Min | 2023.08.12 | 60 |
220 | [커널 19차] 62 주차 | Min | 2023.08.05 | 79 |
219 | [커널 20차] 13주차 | 이민찬 | 2023.07.30 | 107 |
218 | [커널 19차] 61 주차 | Min | 2023.07.30 | 45 |
217 | [커널 20차] 12주차 | 이민찬 | 2023.07.22 | 87 |
216 | [커널 19차] 59 ~ 60 주차 | Min | 2023.07.22 | 37 |
215 | [커널 18차] 113주차 | kkr | 2023.07.22 | 78 |
214 | [커널20차] 11주차 | 이경재 | 2023.07.15 | 86 |
» | [커널20차] 10주차 | 이경재 | 2023.07.09 | 90 |
212 | [커널20차] 9주차 | 이경재 | 2023.07.02 | 85 |
211 | [커널 19차] 58 주차 | Min | 2023.07.01 | 41 |
210 | [커널 19차] 56 ~ 57 주차 | Min | 2023.06.25 | 40 |
209 | [커널 18차] 109주차 | kkr | 2023.06.24 | 33 |
.