[완료]부트로더 분석 도중, b 명령어 대한 질문 드립니다.
부트로더를 분석하다가 궁금한 것이 있어서 질문 드립니다.
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
부트로더의 초기 부분인데요.. 가장 먼저 b(branch) 명령어로 reset 을 호출합니다.
여기서는 하드웨어를 초기화하고, 커널을 메모리로 복사하고, 마지막으로 메모리상의 커널의 시작번지로 pc 값을 설정해주는 역할을 합니다.
그런데, 나머지 _software_interrupt, _software_interrupt, _prefetch_abort, _not_used, _irq, _fiq 는 언제 실행이 되는지 궁금합니다.
처음에는 reset 함수 후에 순차적으로 수행이 되는 걸로 생각했습니다만, jtag 장비로 확인한 결과, reset 아래의 루틴에서는 breakpoint 가 잡히질 않더군요.
제가 알고 있기로는 인터럽트 table 을 만드는 부분이라고 알고 있는데요.
예를 들어 실행도중에 소프트웨어 인터럽트가 발생하면, 자동으로
ldr pc, _software_interrupt
가 수행이 되는 건지요?
또 한가지 더 질문을 드리자면, 다른 부트로더의 경우,
ldr pc, _software_interrupt 대신에 b _software_interrupt 를 사용했습니다.
위의 두 가지 명령어가 같은 의미 인지요?
맞습니다.
b reset 부터 ldr pc, _fiq 사이의 주소는 인터럽트 벡터에 해당하는 주소입니다.
해당 인터럽트가 발생하면 해당 주소로 점프를 하게 되죠.
따라서 위의 코드는 해당 인터럽트가 발생해야 수행되는 것이 맞습니다.
그리고 ldr pc, _software_interrupt 와 b _software_interrupt 는 같은 의미가 맞습니다.
답변 감사합니다.(냉무)
냉무
댓글 달기