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...
");
    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
原文地址:https://www.cnblogs.com/muahao/p/10451723.html