ARM

포스트: 173|조회수: 0|TERM
Items

Posts

173 posts

[Arm프로세서] XEN 하이퍼바이저 소개

Guillermo Austin Kim|2022년 2월 14일

그런데 오픈 소스 기반으로 개발되고 있는 하이퍼바이저가 있는데 그 중에서 가장 많이 사용되는 하이퍼바이저는 XEN입니다. XEN은 오픈 소스 프로젝트라서 누구나 XEN 하이퍼바이저의 코드를 내려받아 빌드해 실행할 수 있습니다. XEN에 대한 소개는 다음 홈페이지에서 확인할 수 있습니다.  이번 절에서는 Armv8 아키텍처에서 실행되는 XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드를 분석합니다. 코드 분석을 통해 하이퍼바이저를 지원하기 위해 사용되는 레지스터와 명령어를 분석하고, 게스트 Exit 관점 중심으로 하이퍼바이저의 동작을 설명합니다. [정보]XEN 하이퍼바이저는 오픈 소스 프로젝트라 누구나 소스를 빌드해 실행하고 XEN 프로젝트에 컨트리뷰션(기여)를 할 수 있습니다. 그런데 대부분 상용 소프

[Arm프로세서] 하이퍼바이저 관점의 익셉션 벡터 테이블 분석하기

Guillermo Austin Kim|2022년 2월 11일

이전 절에서 익셉션 벡터 테이블의 스팩을 분석했습니다. 이어서 EL2가 실행되는 하이퍼바이저 관점에서 익셉션 벡터 테이블을 분석하겠습니다. 다음은 하이퍼바이저가 실행되는 EL2에서 본 익셉션 벡터 테이블의 동작 방식을 나타낸 표입니다. 표 12.2 하이퍼바이저 관점에서 본 익셉션 벡터 테이블 'EL2 with SP_EL0' 열의 내용을 분석하겠습니다. 'EL2 with SP_EL0'은 익셉션 레벨에 상관없이 스택을 설정하는 조건에서 실행되는 익셉션의 종류 별 오프셋을 나타냅니다. 그런데 일반적으로 대부분의 하이퍼바이저에서 지원하지 않습니다. [정보]XEN 하이퍼바이저에서는 'EL2 with SP_EL0' 익셉션을 지원하지 않습니다. 이어서 'EL2에서 발생'로 표기된 부분을 보겠습니다. 0x

[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