zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    斐波那契数列
    旋转数组的最小数字
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    2020/01/11,人活着是为了一口气
    2020/01/11,放肆和克制,敏感层次
    2020/01/11,记忆单元
    2020/01/11,经济基础决定高层建筑和个性
    git
  • 原文地址:https://www.cnblogs.com/muahao/p/10451723.html
Copyright © 2011-2022 走看看