arm에서 mmu 설정 문제...

유대철 2010.11.03 22:00 조회 수 : 9741

안녕하세요


학부 졸업하고 바로 대학원 연구실 생활을 시작하는 바람에 경험이 너무 부족하다 싶어서...


연구실에서 남는 보드에 간단한 OS를 만들어 보려고 하는데요...


초반부터 mmu 설정 관련해서 문제가 생겨서 질문을 드립니다.


pxa320 이 박혀있는 보드에서 실습중인데요...

exception vector 를 사용해야 되는데

RAM 영역은 0x8000_0000 ~ 0x8800_0000 까지 128MB 만큼 잡혀 있고 NAND 부팅을 하게 되있어서...

MMU 을 사용해서 0xFFFF_0000 부터 0xFFFF_4000 까지를 RAM 영역에 있는 exception vector 쪽으로 돌리려고 하고 있습니다.

일단은 테스트 목적으로 가상주소 0x8000_0000 ~ 0x8800_0000 까지를


그대로 물리주소 0x8000_0000 ~ 0x8800_0000 로 매핑하려고 하는데요 

MMU를 ON 하자마자 시스템이 먹통이 되네요...

제가 짠 코드에 버그가 있나 싶어서 리눅스 커널의


arch/arm/boot/compressed/head.S 를 참조해서 TTB 설정하는 부분만 제외하고(0x80004000 으로) 


거의 그대로 갔다가 썻는데도 안되네요 ㅠㅠ


부트로더에서 커널이미지로 뛰자마자 아래의 mmu_init 에서 페이지테이블 써주고 MMU ON 한 다음 main 으로 뛰게 되어 있는데 ...


잘못된 부분이나 이전에 뭐 다른 설정을 해주어야 하는게 있을 까요?


몇주째 이렇고 있네요...ㅠㅠ 


mmu_init:

    /* set start addr of L1 PTE */

    ldr r4, =0x80008000

    sub r3, r4, #16384

    bic r3, r3, #0xff

    bic r3, r3, #0x3f00


    /* set Section entry with AP and C,B */

    mov r0, r3

    mov r1, #0x12

    orr r1, r1, #3 << 10

    orr r1, r1, #0x0c

1:  str r1, [r0], #4

    add r1, r1, #1048576

    teq r0, r4

    bne 1b


    mov r0, #0

    mcr p15, 0, r0, c7, c10, 4  @ drain write buffer

    mcr p15, 0, r0, c8, c7, 0   @ flush I, D TLBs

    mrc p15, 0, r0, c1, c0, 0   @ read control reg

    /* mmu & cache control bit set */

    orr r0, r0, #0x7000

    orr r0, r0, #0x0030

    bl  __common_mmu_cache_on

    mov r0, #0

    mcr p15, 0, r0, c8, c7, 0  @ flush I, D TLBs


    bl main


__common_mmu_cache_on:

    /*orr r0, r0, #0x000d*/

    orr r0, r0, #0x01

    mov r1, #-1

    mcr p15, 0, r3, c2, c0, 0  @ set TTB

    mcr p15, 0, r1, c3, c0, 0  @ load domain access control

    b   1f

    .align  5

1:  mcr p15, 0, r0, c1, c0, 0  @ set control register

    mrc p15, 0, r0, c1, c0, 0  @ and read it back to

    sub pc, lr, r0, lsr #32




번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22245
118 C 문법을 위반하는 경우가 생긴건지도 모르겠네요...뭐가 이러지?.. [6] 김영일 2010.12.06 7738
117 모듈오류가 나는데 이유가 뭔지 안잡히네요.. [5] 김영일 2010.11.30 14557
116 아직 끼우지 못한 단추가 남았습니다. [6] 박한범 2010.11.30 8218
115 HVM 실험 좀 부탁합니다. [6] 백창우 2010.11.17 6454
114 리눅스에서 armulator 구동하는 방법 김성오 2010.11.08 7660
» arm에서 mmu 설정 문제... [1] 유대철 2010.11.03 9741
112 멀티프로세서+멀티코어에 대해 궁금한게 있습니다. [14] 박한범 2010.11.01 8789
111 멀티프로세서+멀티코어에 대해 궁금한게 있습니다!? [8] 박한범 2010.10.30 7672
110 리눅스 인터럽트 금지 해제 관련 [9] 홍문화 2010.09.30 11634
109 gcc 디버깅방법 [1] 피승현 2010.09.27 8820
108 컴파일러 최적화 부분에서... [2] 김국진이 2010.09.04 8666
107 특정 라이브러리만 정적링킹하도록... [3] 김경태 2010.08.17 9812
106 8차 스터디 인원 모집에 대해 문의 드립니다. [1] 신창호 2010.08.17 4837
105 address_space 구조체에 대한 질문 [9] 송원준 2010.07.27 9948
104 S3c2440의 USB host 기능 실현에 대한 질문입니다. 이죽송 2010.07.16 9451
103 커널 스터디에 관해 질문드립니다. 김진수 2010.07.16 5119
102 pgd_offset_K() 커널함수에 대한 질문입니다. [2] 백철민 2010.06.23 9942
101 커널 스터디에 참여하고 싶은데요.. [1] 박영현 2010.06.22 5516
100 dd명령어 써서 디스크 카피 할 시 신재욱 2010.06.16 7362
99 linux에서partition분할하지 않고 포멧한 경우 신재욱 2010.06.16 6379
XE Login