[커널 20차] 19주차
2023.09.10 21:13
2023.09.09 (19주차) - 약 10명 참여
head.S : create_idmap의 /* Remap the FDT after the kernel image */ 부터 primary_entry의 dcache_clean_poc 까지 진행
+) VA 48bit / page size 4K 가정
< FDT remapping 결과 >
1. FDT 영역을 Remapping 한 결과
1) 문 C 블로그의 값을 기준으로 진행
cf) istart, iend, count 등 의 값은 이전의 기록들을 수정하지 않은 오류이다. 페이지 테이블에 저장된 값들만 확인하면 된다.
2) 진행자의 커널 이미지 값 기준으로 진행
< FDT remapping 과정 >
1) remap_region 에 전달되는 레지스터 값들
- x0: 0x41e4_2000 // pmd 시작 주소 (last level table address)
- x1: 0x4020_0000 // _text (start VA of the existing mapping)
- x2: 0x42e0_0000 // FDT mapping 시작 주소 (start VA of the region to update)
- x3: 0x4320_0000 // FDT mapping 끝 주소 (end VA of the region to update)
- x4: 0x4800_0000 // FDT 물리 주소 (start PA associated with the region to update)
- x5: 0x701 // SWAPPER_RW_MMUFLAGS (attribute)
- x6: 21 // SWAPPER_BLOCK_SHIFT (order)
2) remap_region에서 populate_entries로 전달하는 레지스터 값들
- x0: 0x41e4_2000 // pmd 시작 주소 (tbl)
- x4: 0x4800_0000 // FDT 물리 주소 (rtbl)
- x2: 0x17 // 시작 인덱스 (index)
- x3: 0x18 // 끝 인덱스 (eindex)
- x5: 0x701 // RW flag (flags)
- x6: 0x20_0000 // 2M (inc)
- x7: tmp
—-----------------------------------------
그 이후 x19 값에 따라 init_idmap_pg_dir 부터 init_idmap_pg_end 까지 dcache_inval_poc 진행
-> create_idmap 마무리 후 primary_entry 로 리턴
—-----------------------------------------
< create_idmap 이후 primary_entry >
x19 값에 따라 __idmap_text_start 부터 __idmap_text_end 까지 dcache_clean_poc 진행.
< dcache_line_poc >
1) dcache_line_size 로 캐시 라인을 구하는 과정을 간단하게 다시 살펴보았다.
2) dcache_by_myline_op 에서 주어진 주소의 캐시라인을 모두 clean한다. (loop)
** 미결 질문 **
Q: MMU On / Cache On 인 경우에는 __idmap_text_start 부터 __idmap_text_end 까지 dcache_clean_poc를 하는데, 그 이유가 무엇일까요?
A: init_kernel_el에서 MMU를 끄는 것과 관련이 있는 것 같다.
A: https://lore.kernel.org/linux-arm-kernel/20221108182204.2447664-6-ardb@kernel.org/
2023.09.09 (19주차) - 약 9명 참여
19.4 메모리 컨트롤 시스템 레지스터
Q: Stack Alignment를 하는 이유?
A1: 메모리의 access cycle을 최소한으로 줄이기 위해
https://hackyboiz.github.io/2020/12/06/fabu1ous/x64-stack-alignment/
1. compiler auto-vectorization (컴파일러 최적화)
-> https://en.wikipedia.org/wiki/Automatic_vectorization
2. cache line에 cross가 발생하지 않도록 해서, 보다 효율적인 데이터 접근이 가능해진다.
Q: Granule size?
A1: https://developer.arm.com/documentation/101811/0103/Translation-granule
A2: 페이지 사이즈를 의미하는 것 같다.
Q: SCTLR_EL1 의 C bit에 대한 설명에서 Cacheability에 대한 어떤 영향도 없다는 것에 대한 의미는 무엇일까요?
A1: 기존에 설정된 Cacheability에 변화를 주지 않는다는 의미라고 생각합니다.
A2:
Q: Synchronous Exception
A:https://developer.arm.com/documentation/100933/0100/Synchronous-and-asynchronous-exceptions
19.5 메모리 속성과 MMU를 설정하는 예제 코드 분석
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 스터디 정리 노트 공간입니다. | woos | 2016.05.14 | 631 |
247 | 커널 스터디 공개 노트 링크 [1] | 박동하 | 2016.05.20 | 233180 |
246 | [커널 17차] 41주차 | ㅇㅇㅇ | 2021.06.13 | 36553 |
245 | [커널 17차] 56주차 | ㅇㅇㅇ | 2021.10.03 | 27532 |
244 | [커널 18차] 1주차 | V4bel | 2021.05.29 | 3601 |
243 | [커널 17차 6조] 2주차 | 김정근 | 2020.08.31 | 2175 |
242 | [커널 17차 2조] 4주차 | wellbeing | 2020.09.12 | 1518 |
241 | 커널 스터디 13차 D조 스터디 로그 링크입니다. | 목태양 | 2016.05.15 | 1226 |
240 | 해킹&보안 1차 A팀 스터디로그 링크 | 수비니겨 | 2016.05.19 | 1186 |
239 | [커널 16차 B조] 1주차 [1] | kdy0252 | 2019.05.25 | 1084 |
238 | [커널 17차 A조] 20주차 | 주영 | 2021.01.11 | 1019 |
237 | [커널 20차] 24주차 | 이민찬 | 2023.10.22 | 857 |
236 | [커널 17차 2조] 5주차 | wellbeing | 2020.09.19 | 739 |
235 | [커널 17차 8조] 1주차 [3] | JSYoo5B | 2020.08.22 | 718 |
234 | [커널 19차] 0주차 - 오리엔테이션 | 리턴 | 2022.05.07 | 602 |
233 | [커널 17차] 26주차 | 주영 | 2021.03.01 | 541 |
232 | [커널 19차] 37 주차 | Min | 2023.02.04 | 479 |
231 | [커널 19차] 1주차 | 리턴 | 2022.05.16 | 461 |
230 | [커널 17차] 32주차 | ㅇㅇㅇ | 2021.04.11 | 446 |
229 | [커널 17차 A조] 12주차 | 주영 | 2020.11.16 | 410 |
.