qemu啟動vm后,如何host上使用ssh連接?


qemu啟動vm后,如何從host ssh連接vm?

qemu啟動參數

啟動命令:

   ${cmd_qemu_system} --enable-kvm \
   -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
   -serial mon:stdio -nographic -s \
   -kernel $bzImage_name \
   -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
   -netdev user,id=unet,hostfwd=tcp::50959-:22 \
   -initrd $rootfs_cpio_path \
   -append "earlyprintk=ttyS0 console=ttyS0 debug" \
   -hda $DISK_NAME

kenrel

linux 的.config 需要支持CONFIG_VIRTIO_NET=y:

[root@xxx /data/sandbox/open_linux/linux]
#cat .config | grep CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_NET=y

buildroot

實際上,我們知道,buildroot的目的就是要生成一個:rootfs.cpio.xz,然后,通過qemu命令啟動一個vm的時候,執行參數-initrd 指定rootfs.cpio.xz 路徑,就可以啟動一個vm;

ssh:

我們需要預先在 buildroot 下載好 sshd, 這里,你會執行 make menuconfig 來給這個buildroot 指定sshd包要下載,之后,就會生成一個最新的.config文件,這個.config文件,應該包含:

[root@xxx /data/sandbox/open_linux/buildroot]
#cat .config |grep  BR2_PACKAGE_OPENSSH
BR2_PACKAGE_OPENSSH=y

在buildroot中 將sshd配置文件修改正確,然后重新編譯buildroot生成最新的:rootfs.cpio.xz

#vi ./output/target/etc/ssh/sshd_config
PermitRootLogin yes
PermitEmptyPasswords yes   #這是是允許登錄為空密碼

通過這個rootfs.cpio.xz, 啟動的vm 的sshd 配置:

# vi /etc/ssh/sshd_config
PermitRootLogin yes
PermitEmptyPasswords yes   #這是是允許登錄為空密碼

network:

需要,現在buildroot中,增加配置eth0 :

#cd buildroot/
#vim output/target/etc/network/interfaces
auto eth0
iface eth0 inet static
    address 10.0.2.15
    netmask 255.0.0.0

或者,進入vm后:

ifconfig eth0 10.0.2.15
ifconfig eth0 up

如何使用虛擬bios?

git clone https://github.com/coreboot/seabios seabios
make menuconfig
make clean && make -j 8

在qemu啟動中,增加bios:

In the command to start guest, you can specify the BIOS:

-bios seabios/out/bios.bin
start_vm(){
    DISK_NAME="${muahao_tools_dir}/vm/disk02.raw"
    if [[ ! -e $DISK_NAME ]];then
        creat_image_01 "$DISK_NAME"
    fi

   ${cmd_qemu_system} --enable-kvm \
   -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
   -serial mon:stdio -nographic -s \
   -kernel $bzImage_name \
   -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
   -netdev user,id=unet,hostfwd=tcp::2222-:22 \
   -initrd $rootfs_cpio_path \
   -append "earlyprintk=ttyS0 console=ttyS0 debug" \
   -hda $DISK_NAME\
   -bios ./open_linux/seabios/out/bios.bin
}

A debug test:

#vim src/boot.c
static void
boot_rom(u32 vector)
{
    printf("Booting from ROM...\n");
    struct segoff_s so;
    so.segoff = vector;
    call_boot_entry(so, 0);
}

如何給vm增加虛擬盤?

首先,你需要在host上創建一個image,然后,在使用qemu啟動vm的時候,給qemu一個參數,掛載上這個image,啟動guest后,可以在guest上 使用這個虛擬的硬盤;

首先,在host上創建一個image:

#qemu-img create -f raw /data/sandbox/images/vm_guest.img 5G 

qemu啟動參數:

   ${cmd_qemu_system} --enable-kvm \
   -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 2 -m 4096 \
   -serial mon:stdio -nographic -s \
   -kernel $bzImage_name \
   -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
   -netdev user,id=unet,hostfwd=tcp::2222-:22 \
   -initrd $rootfs_cpio_path \
   -append "earlyprintk=ttyS0 console=ttyS0 debug" \
   -drive file=/data/sandbox/images/vm_guest.img,if=none,format=raw,id=nvme0 \   //<<<<<===增加
   -device nvme,drive=nvme0,serial=foo \     //<<<<<===增加
   -hda $DISK_NAME \
   -bios /data/sandbox/open_linux/seabios/out/bios.bin

注意: 在linux中.config 一定要配置了nvme的支持

#cat .config | grep NVME


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM