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