Microblaze에서 실제로 TLB를 설정하고 C_USE_MMU
을 3
으로 설정하려고합니다.Microblaze에서 부팅 할 때 MMU/TLB에 액세스
이 내 부팅 코드 :
.global _start
.section .vectors.reset, "ax"
.align 2
.ent _start
.type _start, @function
_start:
brai _actualstart
.end _start
....
.section .text
.global _actualstart
.align 4
.ent _actualstart
.type _actualstart, @function
_actualstart:
mfs r1, rmsr
nop
ori r1, r1, 0x00040000
mts rmsr, r1
nop
addik r3, r0, 0x3F /* Microblaze TLB has 64 entries */
_zeroouttlb:
mts rtlbx, r3
mts rtlbhi, r0
mts rtlblo, r0
bgtid r3, _zeroouttlb /* Uses delay slot */
addik r3, r3, -1
가 r1
0x00040000
업데이트 아래 라인은 사용자가 예상하는대로 :
mts rmsr, r1
:
ori r1, r1, 0x00040000
을하지만, 다음 줄에 msr
의 값은 변경되지 않으므로 코드 goe 실패 위하여 s의 것은 다음과 함께
mts rtlbhi, r0
:
는Fatal (MB_TLB) Attempting Write to TLBHI when no MMU available
(msr
업데이트되지 않았기 때문에 여전히 0x00000000
그래서, 상기 프로세서는 가능한 MMU 지원이없는 평가하는 정확한 판독).
내 코드가 msr
으로 업데이트되지 않는 이유는 무엇입니까?
시뮬레이터와 같은 소리는 단순히 MMU를 에뮬레이션하지 않습니다. 따라서 MSR 비트는 변경할 수 없습니다. –
시뮬레이터가 MMU AIUI – adrianmcmenamin