저는 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
나를 여기에 문제를 알려 주시기 바랍니다.
벡터 기본 주소 레지스터의 하위 5 비트는 무시되므로 벡터 테이블이 32 바이트 정렬되도록해야합니다. – unixsmurf
감사합니다. 그것은 효과가있다! – AvK