x86 아키텍처에서 VMX 작업을 활성화하는 방법에 대한 온라인 튜토리얼을 따르고 있습니다. 이 튜토리얼에서는 프로세스를 여러 단계로 나누고 모든 부분을 커널 모듈의 코드 릴리스로 모았습니다. 또한 이를 컴파일하기 위한 Makefile도 제공합니다. 둘 다 시청할 수 있습니다여기. 컴파일할 때 다음 오류가 발생합니다.
make -C /lib/modules/4.4.0-81-generic/build M=/home/sbhtwr/Desktop/hypervisor modules EXTRA_CFLAGS="-g -DDEBUG"
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-81-generic'
CC [M] /home/sbhtwr/Desktop/hypervisor/vmx.o
/home/sbhtwr/Desktop/hypervisor/vmx.c: In function ‘__rdmsr1’:
/home/sbhtwr/Desktop/hypervisor/vmx.c:82:8: error: expected ‘:’ or ‘)’ before ‘_ASM_EXTABLE_HANDLE’
_ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_rdmsr_unsafe)
^
/home/sbhtwr/Desktop/hypervisor/vmx.c:82:28: error: invalid suffix "b" on integer constant
_ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_rdmsr_unsafe)
^
/home/sbhtwr/Desktop/hypervisor/vmx.c:82:32: error: invalid suffix "b" on integer constant
_ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_rdmsr_unsafe)
^
scripts/Makefile.build:264: recipe for target '/home/sbhtwr/Desktop/hypervisor/vmx.o' failed
make[2]: *** [/home/sbhtwr/Desktop/hypervisor/vmx.o] Error 1
Makefile:1420: recipe for target '_module_/home/sbhtwr/Desktop/hypervisor' failed
make[1]: *** [_module_/home/sbhtwr/Desktop/hypervisor] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-81-generic'
Makefile:6: recipe for target 'modules' failed
make: *** [modules] Error 2
이 오류를 해결할 수 없습니다. 내 Linux 헤더 파일 사본에 일부 정의가 누락된 것 같습니다(컴파일러가 이것이 이유임을 명시적으로 나타내지는 않지만!). 하지만 내가 틀렸을 수도 있습니다. 보다노트다음과 같은.
노트_ASM_EXTABLE_HANDLE
: 의 정의를 찾기 위해 리눅스 저장소에서 헤더 파일을 온라인으로 검색해 보았습니다.여기. 그런 다음 Linux 헤더의 로컬 복사본을 살펴보았는데 asm.h
정의가 누락된 것을 발견했습니다. 그래서 정의를 모듈에 복사하여 붙여넣고 다시 컴파일했습니다. 이번에는 오류가 없지만 경고가 있습니다.
WARNING: "ex_handler_rdmsr_unsafe" [/home/sbhtwr/Desktop/hypervisor/vmx.ko] undefined!
정의를 찾았습니다ex_handler_rdmsr_unsafe
여기. 그래서 함수 정의를 모듈에 복사하여 붙여넣었는데, 그 결과 ( 에서 사용된 ex_handler_rdmsr_unsafe
) 함수 정의가 누락되었다는 오류가 더 많이 발생했습니다.
튜토리얼 페이지를 찾을 수 있습니다여기.
답변1
Linux 헤더에 and 의 정의가 _ASM_EXTABLE_HANDLE
포함되어 있는 것 같습니다 . 이전에는 Linux 헤더와 함께 Ubuntu 16.04 LTS를 실행하고 있었습니다 . Ubuntu 18.04 LTS로 업그레이드하면(Linux 헤더를 로 업그레이드하는 동안 ) 문제가 해결되었습니다.ex_handler_rdmsr_unsafe
4.15.0-72-generic
4.4.0-81-generic
4.15.0-72-generic