[커널 20차] 19주차

2023.09.10 21:13

이민찬 조회 수:103

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 등 의 값은 이전의 기록들을 수정하지 않은 오류이다. 페이지 테이블에 저장된 값들만 확인하면 된다. 

UNvU_CTY9pe-rCOQ6EDzxbp-h697eig0cqxZtTwg

 

2) 진행자의 커널 이미지 값 기준으로 진행

aO7odaaE1jKHLyv5SKYqvnrgo9Hq3kajXyH0lDU6

FL8Kvlf5BbI-lzEiWpD3MqPVmoKod4mdUYklxPZU

 

< 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/

A2: https://stackoverflow.com/questions/49391001/why-does-the-x86-64-amd64-system-v-abi-mandate-a-16-byte-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: aRtV7R-RdtnP-vTinBSsQatbfZ1j92ICNrysQJxc

 

Q: Synchronous Exception

A:https://developer.arm.com/documentation/100933/0100/Synchronous-and-asynchronous-exceptions

 

19.5 메모리 속성과 MMU를 설정하는 예제 코드 분석

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 626
» [커널 20차] 19주차 이민찬 2023.09.10 103
226 [커널 20차] 18주차 이민찬 2023.09.03 85
225 [커널 20차] 17주차 이민찬 2023.08.27 128
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 106
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
213 [커널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
208 [커널20차] 8주차 이경재 2023.06.24 74
XE Login