2014-11-09 6 views
2

저는 ARM1176JZF-S 프로세서가있는 raspberry pi B +의 트러스트 영역 확장 작업을하고 있습니다. arm11에 대한 문서에 따르면 Secure world, Non-secure (NS) 세계 및 monitor mode resp에 대해 각각 3 개의 예외 벡터 테이블이 있습니다. 그리고 c12 레지스터는 보안 및 NS 세계 예외 벡터 테이블 기본 주소의 기본 주소를 보유합니다.트러스트 영역에서 나무 딸기 파이 예기치 않은 동작이 발생합니까?

이 두 주소를 각각 해당 세계 (보안/NS)의 c12 레지스터에 추가했습니다. 나는 두 세계에서 SWI (svc)를 시도했다. 보안 세계에서 잘 작동하고 있지만 NS 세계에서는 컨트롤이 SW 리셋 대신 NS 리셋 핸들러로 이동합니다. 나는 다음과 같은 명령을 사용 :

For secure world : 
    LDR r0, =_start //_start - base address of secure vector table 
    MCR p15, 0, r0, c12, c0, 0 
For Non-secure World : 
    LDR r0, =_ns_start //ns_start - base address of non-secure vector table 
    MCR p15, 0, r0, c12, c0, 0 

여기 내 코드입니다 : https://github.com/avk7vk/arm_bare_metal/tree/master/trustzone-smc

나를 여기에 문제를 알려 주시기 바랍니다.

+0

벡터 기본 주소 레지스터의 하위 5 비트는 무시되므로 벡터 테이블이 32 바이트 정렬되도록해야합니다. – unixsmurf

+0

감사합니다. 그것은 효과가있다! – AvK

답변

1

VBAR (Vector Base Address Register)의 하위 5 비트는 "res0"으로 정의되어있어 무시되고 0으로 취급됩니다. 결과적으로 벡터 테이블은 32 바이트로 정렬되어야합니다. 달성 된 주소 :

.align 5 
_ns_start: 
    ldr pc, ns_Reset 
    ...