qemu建立基本的虚拟机

[b]使用qemu建立虚拟机[/b]
[b]
1.需要内核文件 bzImage
2.制作操作系统的镜像 hda.img

[/b]
内核编译参考:[url]http://haoningabc.iteye.com/blog/2237569[/url]
制作简单的镜像需要使用[url]https://github.com/killinux/jslinux_reversed[/url]
具体建立一个120M的精简操作系统,debian的etch版本

要求支持ip,ifconfig,dhclient等网络命令
建立方法,这个debootstrap命令国内可能不通,去aws上操作吧
建立方法:
在ubuntu操作系统上

cd /opt/
debootstrap --variant=minbase --include=dhcp-client,ssh,vim,make,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6 --arch i386 etch etch 'http://archive.debian.org/debian'

得到
/opt/etch
为所需要的操作系统的文件,注意这里选的包包含基本的网络命令ip,dhclient等

下载生成镜像的工具
主要使用[url]https://github.com/killinux/jslinux_reversed/blob/master/contrib/createimage.sh[/url]

cd /var/www/html/
git clone https://github.com/killinux/jslinux_reversed
mv /opt/etch /var/www/html/jslinux_reversed/contrib/squeeze
./createimage.sh

生成hda.img文件

在linux启动的时候默认先调用/sbin/init
所以检查init文件的正确性
mkdir hda
mount -o loop hda.img hda
vim hda/sbin/init

#!/bin/sh
show_boot_time 2>/dev/null
echo "JSLinux started, initializing..."
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
export HOME=/root
export TERM=vt100
mount -n -t proc /proc /proc
mount -n -t sysfs /sys /sys
mount -n -t devpts devpts /dev/pts
mount -n -t tmpfs /tmp /tmp
mkdir -p "/tmp/root"
ip link set up dev lo
main() {
echo >/dev/clipboard
while :; do
setsid sh -c "exec bash 0<>/dev/ttyS0 1>&0 2>&0"
done
}
#. /dev/clipboard
main "$@"

这里注释掉#. /dev/clipboard
注意如果启动失败,可能需要加上
[color=red]/sbin/mdev -s[/color]
作用是初始化/dev下面的文件
这里关键点是挂载/proc /sys 和/dev 三个文件系统

有了bzImage内核和hda.img镜像
就可以建立虚拟机了

qemu-system-i386 -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic

或者

qemu-system-i386 -kernel bzImage -hda hda.img -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic

-hda或者使用-drive的方式
[b]cache参数可以使用[/b]
[color=red]writethrough 直写模式:在调动write写入数据的同时将数据写入到磁盘缓存中
writeback 回写模式:数据写入到磁盘缓存即返回
none 关闭缓存[/color]

btw,如果不想破坏原来的hda.img
使用增量建立vm
可以指定hda.img为backing_file

qemu-img create -f qcow2 -o backing_file=hda.img hda_hasbacking_file.qcow2

即hda.img 作为基础模板,
新的hda_hasbacking_file.qcow2 保存hda.img的增量部分
使用hda_hasbacking_file.qcow2建立的vm不会对原来镜像造成破坏

qemu-system-i386 -kernel bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic


如果加了-boot order=dc,menu=on
可以控制启动顺序,和是否显示启动菜单
d为光驱,c为第一个硬盘

如果添加网络则用-net 参数


qemu-system-i386 -kernel bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,ifname=tap1,script=no,downscript=no


-net nic 为必须的参数表明这是一个网卡配置
vlan表示blan编号,默认0
macaddr是mac地址,进虚拟机后
ctrl+a c 切换到monitor模式
info network查看网卡

root@(none):/# QEMU 2.5.1 monitor - type 'help' for more information
(qemu) info network
hub 0
\ hub0port1: tap.0: index=0,type=tap,ifname=tap1,script=no,downscript=no
\ hub0port0: e1000.0: index=0,type=nic,model=e1000,macaddr=52:54:00:12:34:22
(qemu)

可以看到mac地址
52:54:00:12:34:22
是我们建立vm的时候指定的

model为网卡类型,可以查看qemu查看网卡的类型有哪些

qemu-system-i386 -net nic,model=?
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio

更多网络相关的,可以参考
[b]桥接的方式使用qemu建立虚拟机[/b]:[url]http://haoningabc.iteye.com/blog/2306736[/url]
[b]NAT的方式使用qemu建立虚拟机[/b]:
[url]http://haoningabc.iteye.com/blog/2306952[/url]
### 使用QEMU设置ARM架构虚拟机 #### 准备环境 为了在QEMU中安装和运行ARM架构的虚拟机,需先确保已正确安装QEMU软件包。对于Linux发行版而言,通常可以通过包管理器来完成此操作;而在Windows环境下,则建议前往官方页面获取最新版本并按照指引完成部署[^1]。 #### 获取操作系统镜像 接着要准备适合于ARM平台的操作系统映像文件,这可以是从官方网站下载得到的标准ISO光盘映像或者是预构建好的硬盘驱动器(.img)格式文件。例如Ubuntu Server LTS版本或其他专为ARM设计的操作系统如Kylin OS等[^2]。 #### 配置启动参数 当一切就绪之后,可通过命令行指定一系列选项来定义新创建的虚拟硬件特性: ```bash qemu-system-aarch64 \ -m 4G \ # 设置内存大小为4GB -cpu cortex-a72 \ # 指定CPU型号为Cortex-A72 -smp cores=4 \ # 设定核心数量为四个物理核芯 -M virt \ # 使用virt机器类型 -bios /path/to/QEMU_EFI.fd \ # 加载UEFI固件(如果适用的话) -device virtio-net-pci,netdev=net0 \ netdev user,id=net0 \ # 添加网络适配器连接至宿主机 -drive file=/path/to/image.img,format=qcow2 \ # 映射磁盘图像作为根分区 -cdrom /path/to/install.iso \ # 如果正在安装OS则附加安装介质 ``` 上述脚本展示了如何利用`qemu-system-aarch64`指令建立一个具有特定属性(比如内存量、处理器种类及时钟频率)的基础框架,并挂接必要的外围组件以便顺利引导进入所选的操作系统环境中去[^3]。 #### 启动与维护 一旦完成了初始配置过程,在未来每次重新激活该实例之前只需简单调用相似结构化的语句即可快速恢复先前的工作状态。值得注意的是,针对某些特殊需求可能还需要额外调整其他高级设定项,具体取决于实际应用场景的要求[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值