virtme : 커널 개발의 필수 도구
프로젝트 사이트 : https://github.com/amluto/virtme/
사용방법 : https://github.com/amluto/virtme/blob/master/README.md
리눅스 커널은 QEMU를 통해 테스트 하는게 일반적이다. kernel/core 코드, 가상 드라이버 병합되므로서, 응용프로그램을 사용해 테스트하는데 유용하다.
"Virtme은 가상화 Linux 커널을 실행하는 간단한 도구이다. 전체 루트파일 시스템 이미지 대신 단순한 rootfs를 사용. Virtme의 특징은 작고 사용하기 쉬우며 커널 변경 사항을 간단하게 테스트 할 수 있다."
virtme 설치하기
git clone https://github.com/ezequielgarcia/virtme.git
cd virtme
sudo ./setup.py install
메세지 확인
Installed /usr/local/lib/python3.6/dist-packages/virtme-0.0.3-py3.6.egg
커널 소스 다운로드
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
virtme 설정
커널 설정 생성
cd linux
virtme-configkernel --defconfig
#
# configuration written to .config
#
Configured. Build with 'make ARCH=x86 -j4'
필요한 드라이버 사용
vim2m 드라이버 활성화는 video4linux memory2memory 가상 드라이버임.
make menuconfig 설정
vi .config
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2=y
CONFIG_V4L2_MEM2MEM_DEV=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=y
커널 빌드
make -j4 또는 make ARCH=x86 -j4
virtme 실행
sudo virtme-run --kimg arch/x86_64/boot/bzImage
또는
sudo virtme-run --kdir .
부팅시 스크립트 실행
-script-dir 옵션은 부팅시 스크립트를 실행할 위치를 지정한다.
sudo virtme-run --kdir . --script-dir test-dir/
-script-dir 매개 변수 사용해 vim2m 드라이버를 테스트 할 수 있는 스크립트 작성
vi v4l2-compliance_test.sh
#!/bin/sh
v4l2-compliance -d /dev/video0
모듈 디렉토리 지정하기
-mdir 옵션을 사용해 virtme 모듈을 추가 할 수 있다.
CONFIG_MEDIA_SUPPORT=m
CONFIG_MEDIA_CAMERA_SUPPORT=m
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L2=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=m
./tmp 디렉토리 설치 지정
make INSTALL_MOD_PATH=./tmp modules_install
INSTALL crypto/crypto_engine.ko
INSTALL drivers/crypto/virtio/virtio_crypto.ko
INSTALL drivers/media/common/videobuf2/videobuf2-common.ko
INSTALL drivers/media/common/videobuf2/videobuf2-memops.ko
INSTALL drivers/media/common/videobuf2/videobuf2-v4l2.ko
INSTALL drivers/media/common/videobuf2/videobuf2-vmalloc.ko
[..]
모듈 실행
sudo virtme-run --kimg arch/x86_64/boot/bzImage --mdir tmp/lib/modules/4.19.0-rc3
Decompressing Linux... Parsing ELF... Performing relocations... done.
Booting the kernel.
[..]
root@(none):/# modprobe vim2m
[ 66.071041] videodev: Linux video capture interface: v2.00
[ 66.083405] vim2m vim2m.0: Device registered as /dev/video0