Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

593
557
422264


[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 어셈블리 코드 분석 9. 커널 동기화(spinlock/mutex)

이전 시간에 인라인 어셈블리 코드를 살펴봤는데, 이번에는 어셈블리 코드를 분석하겠습니다. 실제 ARM 프로세서 입장에서 스핀락을 어떻게 실행하는지 정확히 파악하려면 어셈블리 코드를 봐야 합니다. 어셈블리 코드를 분석해야 스핀락 핵심 개념을 알 수 있다는 겁니다. 이전 절에 다룬 내용을 이해했으면 그리 어렵지 않습니다.

분석하려는 코드는 다음과 같습니다.
1  80704b60 <_raw_spin_lock>:
2  80704b60: e1a0c00d  mov ip, sp
3  80704b64: e92dd800  push {fp, ip, lr, pc}
4  80704b68: e24cb004  sub fp, ip, #4
5  80704b6c: e52de004  push {lr} ; (str lr, [sp, #-4]!)
6  80704b70: ebe82672  bl 8010e540 <__gnu_mcount_nc>
7  80704b74: f590f000  pldw [r0]
8  80704b78: e1903f9f  ldrex r3, [r0]
9  80704b7c: e2832801  add r2, r3, #65536 ; 0x10000
10 80704b80: e1801f92  strex r1, r2, [r0]
11 80704b84: e3310000  teq r1, #0
12 80704b88: 1afffffa  bne 80704b78 <_raw_spin_lock+0x18>
13 80704b8c: e1a02823  lsr r2, r3, #16
14 80704b90: e6ff3073  uxth r3, r3
15 80704b94: e1530002  cmp r3, r2
16 80704b98: 0a000003  beq 80704bac <_raw_spin_lock+0x4c>
17 80704b9c: e320f002  wfe
18 80704ba0: e1d030b0  ldrh r3, [r0]
19 80704ba4: e1530002  cmp r3, r2
20 80704ba8: 1afffffb  bne 80704b9c <_raw_spin_lock+0x3c>
21 80704bac: f57ff05b  dmb ish
22 80704bb0: e89da800  ldm sp, {fp, sp, pc}

 
* 유튜브 강의 동영상도 있으니 같이 들으면 좋습니다.



"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

#Reference(커널 동기화)
커널 동기화 기본 개념 소개
레이스 발생 동작 확인
커널 동기화 기법 소개
스핀락
뮤텍스란
커널 동기화 디버깅

# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


Thanks,
Austin Kim

repository:
http://rousalome.egloos.com/10025741

핑백

덧글

댓글 입력 영역