Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] '-Werror' 옵션 제거: WARNING 메시지 Error 제외

Guillermo Austin Kim|2021년 11월 19일

최근 커널 코드를 빌드하면 다음과 같이 WARNING이 떠도 에러도 처리합니다. linux-next/drivers/firmware/arm_ffa/driver.c:180:6: error: unused variable ‘compat_version’ [-Werror=unused-variable] u32 compat_version; ^ AR init/built-in.a CC drivers/crypto/cavium/zip/zip_device.occ1: all warnings being treated as errors 그 이유는 다음 커밋이 유입됐기 때문입니다. Author: Linus Torvalds Date: Sun Sep 5 11:24:05 2021 -0700 E

[Arm프로세서] Armv8 익셉션 레벨: ERET 명령어

Guillermo Austin Kim|2021년 11월 19일

익셉션이 유발된 다음에는 익셉션이 유발된 시점의 주소로 복귀해야 하는 상황이 있습니다. 예를 들어 'IRQ interrupt' 익셉션이 발생한 다음에 'IRQ interrupt' 익셉션이 발생한 코드로 복귀를 해야 합니다. 이 때 ERET 명령어를 실행하면 Arm 코어 내부에서 다음과 같은 동작을 수행합니다. * SPSR_EL1를 PSTATE에 로딩 * ELR_EL1에 저장된 주소로 복귀 그렇다면 익셉션이 유발된 다음에 ERET 명령어를 사용해 익셉션이 유발된 시점으로는 왜 복귀해야 할까요?  가장 대표적인 케이스는 다음 그림과 같습니다. 그림 4.4 유저 애플리케이션이 실행되는 EL0에서 ERET 명령어를 실행하는 흐름 먼저 그림에서 ①로 표시된 부분은 유저 애플리케이션이 실행

[Arm프로세서] Armv8 익셉션 레벨: mrs <Xt> currentEL

Guillermo Austin Kim|2021년 11월 19일

Armv8 아키텍처는 익셉션 레벨을 알 수 있는 명령어를 지원하며, 명령어의 포멧은 다음과 같습니다. “mrs currentEL” 레지스터가 담고 있는 값을 Xt 레지스터에 저장하는 명령어입니다. 현재 실행 중인 코드가 어떤 익셉션 레벨에서 실행 중인지 체크해, 이를 제어하려면 위와 같은 명령어를 사용하면 됩니다.

[Arm프로세서] Armv8 익셉션 레벨과 관련된 명령어

Guillermo Austin Kim|2021년 11월 14일

Armv8 아키텍처에서는 익셉션 레벨과 관련된 다음과 같은 명령어를 지원합니다. * mrs currentEL; * ERET 명령어 * SVC 명령어 * HVC 명령어 * SMC 명령어 먼저 'mrs currentEL' 명령어를 실행해 익셉션 레벨을 확인하는 방법부터 알아봅시다.

[Arm프로세서] Armv8: 익셉션 링크 레지스터(ESR: Exception Link Register)

Guillermo Austin Kim|2021년 11월 14일

Arm 코어는 익셉션을 유발할 때 익셉션이 유발되는 시점의 주소를 익셉션 링크 레지스터(Exception Link Register)에 저장합니다. 익셉션 링크 레지스터는 ELR으로 명시하며, 각 익셉션 레벨 별로 존재하는 Special-purpose 레지스터입니다. 보통 ELR은 ELR_EL1, ELR_EL2으로 표기합니다. 먼저 Armv8 아키텍처의 문서를 보면서 ELR_ELx 레지스터에 대해서 알아봅시다. (출처: DDI0487Fc_armv8_arm.pdf)C5.2.4 ELR_EL1, Exception Link Register (EL1) The ELR_EL1 characteristics are:When taking an exception to EL1, holds the address to retur