Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

9365
557
421924


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

1 2 3 4 5 6 7 8 9

[Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석

SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다.R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅...

[Arm프로세서] Armv8: VBAR_ELx 기준으로 익셉션 벡터 테이블 분석 정리

이전 포스트까지 EL1에 존재하는 VBAR_EL1와 EL1에 있는 VBAR_EL2 기준으로 익셉션 벡터 테이블에 대해 알아봤습니다. 이제 원점으로 돌아가서 이번 절의 앞 부분에 소개한, Armv8 스팩 문서에 있는 익셉션 벡터 테이블을 보면서 배운 내용을 정리해봅시다.VBAR_EL1 기준으로 바라본 익셉션 벡터 테이블먼저 VBAR_EL1 기준으로 익셉션...

[Arm프로세서] Armv7: 익셉션 핸들러란

처음 익셉션 벡터 테이블을 분석하면 다음과 같은 의문이 생기는 경우가 많습니다.      "이와 관련된 코드는 어디에 구현돼 있을까?"이 질문에 답을 하려면 익셉션 벡터와 관련된 코드가 무엇인지 알아야 하는데, 이를 익셉션 벡터 핸들러라고 합니다. 익셉션 벡터 핸들러는 익셉션의 종류 별로 소프트웨어적으로 처리되는 목적...

[ARMv8] EL1: el1_sync - 익셉션 벡터 코드와 ARM 스팩 문서 분석

이번 포스트에서는 ARMv8 아키텍처 기반에서 구현된 익셉션 벡터의 코드를 리뷰해보겠습니다.물론 리눅스 커널에서 확인된 코드입니다.ARMv8 아키텍처의 익셉션 벡터 코드다음은 ARMv8 아키텍처 기반의 익셉션 벡터 코드입니다.https://elixir.bootlin.com/linux/v5.4.30/source/arch/arm64/kernel/entry....

[ARMv8] cbnz 명령어

cbnz 명령어는 Compare Branch None-zero의 약자입니다.명령어의 이름 그대로 레지스터의 값이 0이 아닌 경우, 지정된 주소로 브랜치하는 명령어입니다.아래 코드를 봅시다.01 and     x2,x1,#0x3F      ; x2,x1,#6302 cbnz    x2,...

[ARM프로세서] 함수 호출 규약(Calling Convention)이란

호출 규약(Calling Convention)이란 무엇일까요? 어떤 함수를 호출했을 때 서브 루틴이 자신을 호출하는 함수로부터 인자를 어떤 방식으로 받아 결과를 반환하는지에 대한 규약입니다. x86, RISC-V와 같은 CPU 아키텍처마다 함수 호출 규약(Calling Convention)을 정의하는데, ARM 프로세서에서는 이를 AAPCS(Proced...

[ARMv8] EL0: el0_irq - 익셉션 벡터 코드와 ARM 스팩 문서 분석

이번 포스트에서는 EL0에서 익셉션이 발생할 때의 익셉션 벡터 핸들러 코드에 대해 분석합니다.익셉션 벡터 테이블 분석하기먼저 다음 익셉션 벡터 테이블을 봅시다.위에서 보이는 표는 리눅스 커널이 구동되는 EL1 기준으로 작성된 익셉션 벡터 테이블입니다.EL0, 즉 유저 애플리케이션이 실행하는 도중 IRQ 타입 익셉션이 발생하면 테이블의 볼드체로 표기된 주...

[ARM프로세서] ARMv8 아키텍처의 레지스터

이번에는 ARMv8 아키텍처의 64비트 명령어 기준으로 레지스터 세트에 대해 알아봅시다. 다음은 ARM 스팩 문서에서 발췌한 내용입니다.출처: DDI0487A_g_armv8_arm.pdfB1.2.1 Registers in AArch64 stateIn the AArch64 application level view, an ARM processing elem...

[ARMv8] 익셉션 클래스가 구현된 코드 분석하기: 리눅스 커널

[ARM] 레지스터란(ARMv7, ARMv8)

여러분이 어셈블리 명령어를 작성하거나 C 프로그래밍을 하면 컴파일러는 ARM 코어가 실행할 수 있는 어셈블리 명령어로 변환합니다.그런데 대부분 ARM 어셈블리 명령어는 레지스터와 함께 구성돼 있어, 레지스터에 친숙해질 필요가 있습니다.그렇다면 레지스터란 무엇일까요? 레지스터는 ARM 코어가 어떤 연산을 수행할 때 데이터를 저장하는 임시 저장 공간입니다....
1 2 3 4 5 6 7 8 9