HOME > 게시판 > 자료실
게시판| 자료실
※ 게시판 용도에 맞지 않는 글(광고및 홍보 글 등)은 임의삭제될 수 있습니다.

 
작성일 : 20-10-19 13:03
KVM 채널을 이용한 GUEST 와 HOST 간에 통신
 글쓴이 : jedi2277
조회 : 95  

ttps://libvdi.blogspot.com/2020/09/kvm-guest-host.html


SimpleGuestApp 다운로드

SimpleHostApp 다운로드


Virt-manager 를 통해 VM 에 simple.channel.1 이라는 채널을 추가한다.

지금까지의 정보로 본다면 

 

1. VM 이름 : win10

2. 채널이름 : simple.channel.1

3. 채널에 연결된 unix domain socket 경로: /var/lib/libvirt/qemu/channel/target/domain-4-win10/simple.channel.1

 

VM 시작후 virsh dumpxml win10 으로 xml 을 보면 다음과 같이 나타난다 

 

 

참고적으로 VM 이 재시작 될때마다 이 경로는 바뀐다. 바뀌는 경로를 virsh 명령어를 통해 알아내는 샘플도 추후 만들어 보겠다.

현재는 SimpleHostApp 에 경로를 하드코딩하도록 하겠다.

 

 

### VM 내부(Guest) 작업

 

sysinternals 의 WinObj 를 사용하시면 아래와 같은 정보를 확인할수 있다.

https://docs.microsoft.com/en-us/sysinternals/downloads/winobj

 

이걸 SimpleGuestApp 에서 파이프로 열어볼 것이다.

(단, 실행시 관리자 권한으로 실행해야한다.)

 

 

실행하면 채널이름을 물어보게 되는데 simple.channel.1 이라고 입력하고 엔터를 입력한다.

 

 

파이프 생성이 정상적으로 생성되었다고 나온다.

 

 

### VM 외부 (HOST) 작업

 


리눅스에서 보면 main.c 를 빌드하여 만든 SimpleHostApp 이 있다.

buidl.sh 는 다음과 같다. 

 

g++ ./main.cpp -o SimpleHostApp

 

SimpleHostApp 을 실행시키면 다음과 같이 SimpleGuestApp 으로 5초 간격으로 데이터를 송신한다.

 

 

반대로 소스를 수정하면 SimpleGuestApp 이 SimpleHostApp 으로 데이터 전송도 가능하다.

 리눅스가 guest 일 경우에는 어떻게 하는가에 대해서 설명해 보겠다.

 

Guest 는 ubuntu 18 을 설치하고 아래와 같이 채널을 생성하였다.

윈도우와 동일하게 simple.channel.1 이다.

 

그러면 guest 내부를 살펴보면 아래와 같은 경로에 simple.channel.1 이 존재함을 확인할 수 있다.

/dev/virtio-ports/simple.channel.1

이걸 일반 파일 읽듯이 작업을 하면 된다.

 

 


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기