2013년 9월 21일 토요일

[Linux Kernel] 22주차(2014.09.21)

ARM10C 22주차 후기

일시 : 2013.09.21 (22주차)
모임명 : NAVER개발자커뮤니티지원_IAMROOT.ORG_10차ARM-C
장소 :
장소지원:
참여인원:

커널 분석

  • boot/compressed/head.S
  • kernel/head.S

1) make menuconfig 말고, 소스코드로만 version확인이 가능한가요?

  • Makefile을 열어보면, 처음에 version내역이 존재합니다.
VERSION = 3
PATCHLEVEL = 11
SUBLEVEL = 1
EXTRAVERSION =
NAME = Linux for Workgroups

2) cache를 off하면 TLB도 같이 off되나요? 그리고 TLB와 cache를 전체 off하는 global register가 존재하나요?

cache는 off가 가능하지만, TLB는 off명령 자체가 없어 보입니다. ![cp15_c8.png]
cache 와 TLB는 무관하다. TLB는 MMU의 일부이다. TLB는 disable의 대상이 아니라 TLB는 invalidate의 대상이다. 굳이 disable한다고 표현한다면 MMU disable이 TLB disable을 결정한다.
MMU의 기능이 VA<->PA 전환이며 MMU disable는 address translation off임을 상기하자. (Physical Address = Virtual Address) 참고로 MMU disable시 data access는 non-cacheable로 insturction access는 cacheable로 처리된다. 또한 CA15의 Hypervisor용 MMU와 같이 2차 MMU가 있는 경우 manual 참조 필요 또한 MMU disable해도 TLB의 내용은 유지되므로 MMU on 전에 필요한 경우 TLB flush가 필요하다.

3) code를 확인하다 보니, cache_on 전에 overwrite 체크 구문이 3.11에서 생겼습니다. 참고하세요.

/* Set up a page table only if it won't overwrite ourself.
* That means r4 < pc && r4 - 16k page directory > &_end.
* Given that r4 > &_end is most unfrequent, we add a rough
* additional 1MB of room for a possible appended DTB.
*/

    mov     r0, pc
    cmp     r0, r4
    ldrcc   r0, LC0+32
    addcc   r0, r0, pc
    cmpcc   r4, r0
    orrcc   r4, r4, #1              @ remember we skipped cache_on
    blcs    cache_on

4) Kernel image의 각 section 및 역할의 이해에 대해 부족함을 느꼈습니다. 향후 정리가 필요할 것 같습니다.

5) wont_overwrite의 경우 큰 그림만 이해하고, 코드를 다시보니 혼란을 겪었습니다. 향후 재 복습이 필요합니다.

댓글 없음:

댓글 쓰기