Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

9365
557
421924


태그 : Trace32 요약보기전체보기목록닫기

1 2 3 4 5

IPI (Inter Processor Interrupts) 소개 및 디버깅 (1)

IPI (Inter Processor Interrupts)란 용어를 들어본 적이 있나요?각 CPU간 통신을 하고 싶은 경우가 있거든요. 예를 들면, 다른 CPU를 깨우고 싶거나 다른 CPU가특정 콜백 함수를 호출해서 원하는 동작을 시키고 싶은 경우죠. CPU 부하을 점검해서 일을 덜하고 있는 다른 CPU에 일을 시키는 네트워크 디바이스 드라이버...

커널 오브젝트 Kernel Object - rbtree debugging(child directory) - (1)!

Crash Tool로 커널 오브젝트의 rbtree를 디버깅하는 방법에 대해 간단히 소개하고자 해요.아래와 같은 커널 오브젝트가 있다고 가정해보아요. Sys node의 위치는 /sys/devices/system/cpu/cpu3 이겠죠?현재 struct kobject->cpu는 "cpu3"을 가르키고 있는데요, 그럼 이 커널 오브젝트의 하위 child...

ARM64 - 프로세스(Process) preempt_disable(), preemption 스케줄(Schedule) 조건 분석

아래 제 블로그에서 ARM32 아키텍처에서 preempt_disable() 매크로 함수를 호출하면 __irq_svc 벡터에서 svc_preempt 함수를 호출하지 않아, preemption이 수행되지 않는다고 확인했어요.http://rousalome.egloos.com/9964816이번에는 ARM64(Aarch64) 아키텍처에서는 어떤 코드로 ...

ARM64(Aarch64) - 함수 호출시 Stack Push(스택 푸쉬) 규약

아래와 같은 콜 스택에서 유저 공간에서 돌던 레지스터 Stack Push와 Exception 발생 시 Stack Push에 대해서 살펴봤어요. 이제는 평상시 함수 호출 시 어떻게 Stack Push를 하는 지 점검하려고 해요.자 계속 그 동안 다뤄왔던 아래 "rild"란 프로세스의 콜스택에서 rpi_ipc_router_sendmsg()-> rpi_...

ARM64 - Exception 시 Stack Push

유저 공간에서 시스템 콜을 호출할 때 유저 공간에서 돌던 레지스터를 커널 공간 스택 Bottom Address 근처에 Push하거든요. 이번에는 Exception(Data abort)이 발생했을 때 스택에 어떤 값들을 Push하는 지 점검해 볼께요.아래는 ch_pop_remote_rx_intent() 함수에서 exception이 발생한 콜스택인데요. T...

ARM64- 스택 푸쉬(Stack Push) Userspace -> Kernel Space

유저 스페이스에서 커널 스페이스로 전환하려면 시스템 콜을 호출해야 한다 것은 마르고 닳도록 들었죠?이번에는 ARM64 Architecture에서 EL0 ->EL1로 변환될 시, Stack을 어떻게 Push하는 지 살펴볼께요."rild"란 프로세스의 콜스택을 예를 들어 볼 께요. 잘 보면, 유저 공간에서 sendto란 시스템 콜을 호출했다는 걸 알 ...

Trace32 유용한 명령어 - y.b!

Trace32에서 제공하는 유용한 명령어를 소개 좀 해볼께요.특정 변수 이름이 잘 기어나지 않을 때 아래 변수를 입력하면 해당 심볼로 시작하는 정보를 출력해줘요.y.b slub*symbol___________________|type_____________________|address__________________________________|slub_...

ARM64(Aarch64) - Special Register 설정(Trace32)

AArch64 64비트 아키텍쳐에서 설정해야 할 Special Register에 대해서 잠깐 살펴볼께요.우선 커널이 구동될 때의 Exception Level이 1이니까 EL1 모드만 점검하죠.TTBR1_EL1약자는 Translation Table Base Register인데, 가상주소와 물리주소를 변환할 때 쓰이죠.Trace32로 이 레지스터를 설정하고...

Trace32 - Memory Class 메모리 클래스!

Trace32 메모리 클래스(Memory Class)에 대해서 좀 알아 볼까요?cpu_up이란 리눅스 커널 API를 확인해보면요."d.l  cpu_up", "d.dump cpu_up"로 코드를 확인해보았어요.그런데 왼쪽에 NSX, NSP란 뭘 의미할까요? NSX:FFFFFF9F996A7678|A9BC7BFD  cpu_up:&n...
1 2 3 4 5