Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] 하이퍼바이저: HCR_EL2 레지스터에 접근하는 어셈블리 코드 분석

Guillermo Austin Kim|2022년 2월 9일

이번에는 HCR_EL2 레지스터를 읽은 예시 코드를 소개합니다.다음은 XEN 하이퍼바이저에서 호출되는 _show_registers() 함수의 어셈블리 명령어입니다. 01 000000000025c550 :02 25c550: a9ba53f3 stp x19, x20, [sp, #-96]!03 25c554: 12001c54 and w20, w2, #0xff...04 25c62c: d53c1101 mrs x1, hcr_el205 25c630: 90000140 adrp x0, 284000 06 25c634: 91242000 add x0, x0, #0x90807 25c638: 97ff

[Arm프로세서] 하이퍼바이저: HCR_EL2 레지스터에 접근하는 명령어

Guillermo Austin Kim|2022년 2월 8일

HCR_EL2 레지스터를 구성하는 비트 맵 정보를 파악하면 "이 비트를 어떻게 설정할 수 있을까?"란 의문이 생길 수 있습니다. Armv8 아키텍처에서는 HCR_EL2 레지스터의 값을 읽고 쓸 수 있는 명령어를 제공합니다. HCR_EL2 레지스터의 값을 읽기 위해서 다음과 같은 형식의 명령어를 실행하면 됩니다. 그림 12.4 HCR_EL2 레지스터를 읽는 MRS 명령어 그림 12.4는 HCR_EL2 레지스터의 값을 Xt 레지스터로 로딩하는 명령어입니다. 위 그림에서 보이는 는 Armv8 아키텍처에서 정의된 범용 레지스터를 뜻합니다. x0, x1, x2와 같은 레지스터가 지정될 수 있습니다. 이 명령어로 HCR_EL2 레지스터의 어떤 비트가 활성화돼 있는지 알 수 있습니다. mrs

[Arm프로세서] GICv3: XEN 하이퍼바이저 코드 분석

Guillermo Austin Kim|2022년 2월 4일

GIC를 열심히 분석 중이다. GIC와 관련된 Arm 스팩 문서를 읽다 보면 끝이 보이지 않는 터널로 뻐져드는 느낌이다. 아무런 목적 없이 스팩 문서만 분석하는게 망하는 지름길이다. 걱정할 필요없다. 오픈 소스가 있지 않은가? XEN 하이퍼바이저에서 인터럽트가 발생하면 hyp_irq 레이블이 호출된다. entry hyp=1 /* Inherit D, A, F interrupts and keep I masked */ mrs x0, SPSR_el2 mov x1, #(PSR_DBG_MASK | PSR_ABT_MASK | PSR_FIQ_MASK) and x0, x0, x1 orr x0, x0, #PSR

[Arm프로세서] HCR_EL2: 하이퍼바이저 콘트롤 레지스터

Guillermo Austin Kim|2022년 1월 31일

하이퍼바이저 콘트롤 레지스터는 하이퍼바이저의 세부 동작을 설정하는 가장 중요한 레지스터 중입니다. HCR_EL2은 EL1에서 일어나는 세부 동작에 따라 EL2으로 진입(트랩)하는 방식을 설정할 수 있는 비트맵으로 구성돼 있습니다.  다음 그림은 HCR_EL2 레지스터의 비트 맵 정보입니다. 그림 12.3 HCR_EL2 레지스터의 비트 맵 다른 레지스터와 같이 레지스터를 구성하는 비트를 1로 설정하면, 해당 비트 맵과 관련된 동작이 수행됩니다. HCR_EL2 레지스터를 구성하는 비트 맵 중에 중요한 내용을 소개하겠습니다. IMO, bit [4] 이 비트가 1로 설정되면 EL2이나 EL1에서 설정된 인터럽트를 EL2에서 받아 처리합니

[Arm프로세서] 하이퍼바이저: wfe/wfi 명령어

Guillermo Austin Kim|2022년 1월 28일

많은 개발자들은 hvc 명령어를 통해서만 EL1에서 EL2로 진입할 수 있다고 알고 있습니다. 사실 그렇지는 않습니다. 게스트 OS에서 하이퍼바이저로 진입하는 다른 방법은 wfe와 wfi 명령어를 실행하는 것입니다. 원래 wfe와 wfi 명령어는 Arm 코어가 저전력 모드(low-power mode)으로 실행될 수 있게 동작합니다. HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 EL2 트랩이 유발되어, EL2로 진입합니다. 시스템에 하나의 운영체제가 존재하는 환경에서는 wfe, wfi 명령어는 저전력 모드용으로 실행되나, 하이퍼바이저와 같이 시스템에 2개 이상의 운영체제가 실행되는 환경에서, HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 hvc 명령어처럼 EL2로