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
muahao@aliyun.com