카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/31

커널 개발 qemu kvm config 설정

0. 커널 컴파일
https://nautiluslee.blogspot.com/2018/12/blog-post_88.html

1. qemu 가상 컴퓨터 커널 부팅
$ sudo qemu-system-x86_64 -kernel /boot/vmlinuz-`uname -r`

2. 루트파일 시스템 추가
debootstrap을 사용하면 데비안 배포판을 디렉토리에 설치할 수 있다.
파일 시스템이 nodev 옵션으로 마운트되면 장치 노드를 만들 수 없다.
대신, 디렉토리에 qemu 이미지 파일을 마운트하고 다음과 같이 마운트 지점에서 debootstrap를 사용 한다:

IMG=qemu-image.img
DIR=mount-point.dir
qemu-img create $IMG 1g
mkfs.ext2 $IMG
mkdir $DIR
sudo mount -o loop $IMG $DIR
sudo debootstrap --arch amd64 jessie $DIR
sudo umount $DIR
rmdir $DIR

개발시 필요한 파일의 rootfs 사용 하거나, busybox 루트파일 시스템을 사용할 수 다.
$ sudo qemu-system-x86_64 -kernel /boot/vmlinuz-`uname -r`\
                          -hda qemu-image.img\
                          -append "root=/dev/sda single"

경고 파일 옵션 처리
“-hda qemu-image.img” 옵션 대신 “-drive file=qemu-image.img,index=0,media=disk,format=raw” 옵션을 사용한다.

3. 커널 빌드 및 부팅
기존 커널 구성 make kvmconfig 한 다음, 자신만의 qemu 커널을 만든다.
처음부터 .config 파일을 만들지 않고, 일반 설정 구성을 위해 kvmify 한다.
빌드 시간 단축 할 수 있는 전용 config 파일을 만들 수도 있지만 반복 작업 필요.

git clone --depth=1 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
make x86_64_defconfig
make kvmconfig
make -j 8

3.1 생성된 커널 이미지로 부팅
$ qemu-system-x86_64 -kernel arch/x86/boot/bzImage
                     -hda qemu-image.img
                     -append "root=/dev/sda"

3.2 kvm 부팅 시간 단축
kvm 옵션을 추가해 가속화 기능 활성화.
$ qemu-system-x86_64 -kernel bzImage
                     -hda qemu-image.img
                     -append "root=/dev/sda"
                     --enable-kvm

ebootstrap 이미지로 2초 이내 부팅.
부팅 시간 확인 dmesg 확인.
enable-kvm 옵션 추가 전 systemd의 부팅은 5.9초, 옵션 추가 시 1.7초 후 systemd 동작.
3배 단축.

3.3 qemu 연결
qemu 모니터 화면 표시, 터미널을 사용하려면 ALT + TAB 목록에 들어간다.
키보드 마우스 캡처 용도 적합하지 않음.
복사 붙여 넣기 문제, 그래서 그래픽 기반의 인터페이스 제거하고 ttyS0에로 qemu 통신, 리다이렉션 모드 사용.

$ qemu-system-x86_64 -kernel bzImage
                     -append "root=/dev/sda console=ttyS0"
                     -hda qemu-image.img
                     --enable-kvm
                     --nographic

커널 정지
$ halt qemu

시스템 다운.
$ shutdown -h now

댓글 없음:

댓글 쓰기