ARM64(Aarch64) - Special Register 설정(Trace32)
By Guillermo Austin Kim | 2017년 12월 24일 |
AArch64 64비트 아키텍쳐에서 설정해야 할 Special Register에 대해서 잠깐 살펴볼께요.우선 커널이 구동될 때의 Exception Level이 1이니까 EL1 모드만 점검하죠. TTBR1_EL1약자는 Translation Table Base Register인데, 가상주소와 물리주소를 변환할 때 쓰이죠. Trace32로 이 레지스터를 설정하고 싶으면 아래 커맨드를 써야 하지오.Data.Set SPR:0x30201 %Quad 0x82ba1000 // TTBR1_EL1 TCR_EL1Translation Control Register의 약자인데 Stage 1 가상 주소 Translation 시 필요한 Translation 베이스 레지스터 정보를포함하고 있어요.Trace32로 이 레지스터를
[Kernel][Panic] panic@ttwu_do_activate (메모리 불량 보드)
By Guillermo Austin Kim | 2018년 2월 26일 |
CPU: 3 PID: 435 Comm: kworker/u17:2 프로세스에서 dm-verity를 처리하는 워크 함수 verity_prefetch_io 서브 루틴에서 커널 데이터 어보트가 발생했습니다.-000|do_DataAbort(addr = 0, fsr = 0, regs = 0x0)-001|__dabt_svc(asm) -->|exception-002|ttwu_activate(inline)-002|ttwu_do_activate.constprop.52(rq = 0xEB95AB80, p = 0xFFFFF69B)-003|ttwu_queue(inline)-003|try_to_wake_up(p = 0xEB95AB80, ?, wake_flags = -237815936)-004|arch_spin_unlock(inl
[리눅스커널][디버깅] T32(Trace32)로 vmlinux 로딩해 시스템 구경하기
By Guillermo Austin Kim | 2019년 3월 13일 |
T32 시작 명령어 T32 시뮬레이터를 열고 다음 명령어를 입력합시다.sys.cpu cortexa7sys.up 대부분 ARM32 아키텍처는 위 명령어로 T32가 초기화됩니다. T32 명령어로 시스템 점검하기 먼저 커널 섹션 정보를 보겠습니다.y.l.sec__________address________|path\section___________________________|acc|init|physical P:00000000--0000001F|\\vmlinux\.vectors |R-X|L- | P:00001000--000012BF|\\vmlinux\.stubs |R-X|L- | P:C0008000--C
IRQ Stack(ARM64) - Overview
By Guillermo Austin Kim | 2017년 12월 26일 |
IRQ Stack을 소개할까 해요. ARM64 비트 아키텍처 기반 리눅스 커널 4.4 버전부터는 IRQ Stack을 지원하거든요. 이게 뭔 소리냐?IRQ가 Trigger되면IRQ Stack Bottom 주소로 점프해서 IRQ Stack을 써서 함수 호출 및 로컬 변수를 처리한다는 거에요. 간단히 설명을 하면 A -> B -> C -> IRQ Trigger ->D 이런 순서로 호출된다고 보면 되요..[스택주소]0x9880x990 D0x9980xA000 irq_el1 //<<-- IRQ Stack Bottom 주소 // .. 생략 ...0x700x780x80 C0x880x90 B0x980xa00 A 그럼 왜 IRQ 용 스택을 따로 쓸까요? 여러가