1. ARM Exception

ARM chipset에는 기본적으로 7가지 exception 존재한다. ARM Exception Table 아래와 같다.

위의 Exception들은 ARM 에서 chipset 설계 개발 미리 만들어둔 것으로 기본적으로 C에서 Try-catch문을 통해 Exceiption발생 처리하는 것과 같이 미리정의된 위의 7개의 Exception 상황 발생 handler jump해서 처리하도록 구현된 것이다.

 

위의 7개는 모두 ARM에서 미리정의가 필요한 만큼 system에서 치명적인 예외들로 중에서도 치명적인인지 아닌지 여부에 따라 우선순위가 결정된다.

예를 들어 가장 치명적인 Reset Exception발생 0x0000 0000 주로소 바로 이동되며 우선순위가 가장 높다.

 

참고로 ARM high, low 가지 모드가 존재하며 ARM Exception Table Low모드 기준으로 high모드인 경우 vector address값이 다르다.

또한 Reset Exception 경우 system reset 필요한 예외가 발생했을 처리하는것도 맞지만 기본적으로 ARM chipset 처음 power on이되었을 실행하는 default handler이다.(Low기준으로 ARM 전원이 들어오면 가장 처음하는 작업이 0x0000 0000주소를 읽는것이라고 생각하면 된다)

때문에 부팅을 위한 boot code등을 실행하기 위해서는 reset handler SVC모드를 이용해서 작업할 있다.

 

추가로 secure boot 진행하느냐에 따라서도 처음 boot 과정(접근 주소 ) 바뀌게 되는데 secure boot 나중에 Firmware OS개발 추가 개발진행 시에 알아보면 좋을 같다.

 

2. ARM Mode

ARM 7가지의 모드를 가지고 있으며 각각의 모드에 대한 이해가 필요하다.

먼저 모드를 결정하는 레지스터는 CPSR register이며 해당 register bit값을 바탕으로 현재 어떤 모드로 운용되고있는지 판단한다.

 

  • User

가장 기본적인 운용모드로 보통 User Code, Kernel Code 나뉘었을때 User Code동작을위한 모드이다. non-privileged모드로 스스로 모드를 바꿀 수없고 system exception, interrupt등의 상황을 바탕으로 다른 모드로 변경이 가능하다. system code 지키기위해 사용자의 실수를 감안할 있는 흔히 일반 사용자가 접하게되는 모드이다.

 

  • FIQ

빠른 인터럽트 처리를 위한 모드로 별도 register 보유하고 빠르게 인터럽트 동작을 처리하낟.

 

  • IRQ

일반 인터럽트 처리 모드이다.

 

  • SVC

SVC모드는 reset exception 처리하는 system device driver 접근등을 처리할 사용하는 모드이다.

device driver 처리하기 때문에 마우스, 키보드 다양한 hw 제어하기 위해서는 SVC모드로의 진입이 필요하다.

 

  • Abort

존재하지 않는 메모리 등을 접근할 Abort Exception 발생하고 이를 처리하기 위한 모드이다.

 

  • Undefined

디코드에 정의되지 않은 명령을 처리하라고 했을 해당 오류를 처리하기위한 모드이다.

 

  • System

흔히 User code, Kernel Code 나뉘었을 Kernel Code 의미하는 모드로 User 동일한 레지스터를 사용하고 system call user mode에서 kerenl 들어왔을 모드로 있다. user와의 차이는 privileged mode라는 점이다.

 

 

 

 

 

  • ref

https://shinluckyarchive.tistory.com/271

http://recipes.egloos.com/

https://julrams.tistory.com/12

+ Recent posts