我们已经设计了一个基于qemu的watchdog了。下一步工作就是创建一个含有我们的watchdog的虚拟计算机器了。

准备工作:

1. 使用virt-manager或者virsh创建一个虚拟机器。

2. 并安装一个操作系统。我选择了ubuntu12.04

3. 保存这个虚拟机的镜像。

为虚拟机器创建一个网络

比较流行的网络可以是bridge网络,macvtap网络,和NAT网络。当然还有一些高级的,open-vswitch等等。

为了将问题简单化,我们将利用libvirt的default network网络. 该网络是一个NAT的网络。

参考:libvirt的default network网络

我们的目的不是配置NAT,有关NAT的资料请参考netfilter的官网,howto 相关的文章。

1. 查看 defualt network的信息。

$ sudo virsh net-dumpxml default |grep bridge

  <bridge name='virbr2' stp='on' delay='0'/>
2. 查看defualt network的网段

$ sudo virsh net-dumpxml default |grep "ip address"
  <ip address='192.168.122.1' netmask='255.255.255.0'>

bridge 也可以手动创建

brctl addbr virbr2

ifconfig virbr2 192.168.122.1  netmask 255.255.255.0 up

如果将eth0加到这个bridge的话, 需要设置

添加 # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 原来的IP

echo "1" > /proc/sys/net/ipv4/ip_forward

# 也可以 /etc/sysctl.conf 修改net.ipv4.lp_forward=1,执行一下 sysctl -p生效

iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

使用qemu启动虚拟机

使用 virt-manager 启动qemu 安装guest

qemu的参数很多,我们需要$ man qemu 来弄清楚qemu的每个参数, 比较好的办法是先用virt-manager启动,然后挑选我们需要的qemu的各种参数。

$ ps -ef |grep qemu
qemu     13670     1 13 Jun19 ?        06:11:05 /usr/bin/qemu-system-x86_64 -machine accel=kvm -name ubuntu12.04 -S -machine pc-i440fx-1.6,accel=kvm,usb=off -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1631a77d-f447-4f74-92a6-bce68ae52f9f -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/ubuntu12.04.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/ubuntu-12.04.4-desktop-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 -netdev tap,fd=25,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:6e:ae:39,bus=pci.0,addr=0x3 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
上面的蓝色部分是启动虚拟机器所需要的参数,除了netdev,其他的的参数都可以直接使用。

使用qemu直接启动 guest安装 guest。

$ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/ubuntu-12.04.4-desktop-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0 -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline

启动完成时候,我们可以安装guest的OS。注意:这个guest没有指定网卡。

为guest指定一个网卡

这里给guest创建基于nat网络的tap网卡。

自行创建/启动一个tap设备

$ sudo tunctl -t tap0
Set 'tap0' persistent and owned by uid 0

$ ifconfig tap0 0.0.0.0 promisc up

in guest OS

$ sudo ifconfig tap0 192.168.122.254  hw ether 52:54:00:6e:ae:39 up

in guest OS

$ cat /etc/network/interfaces

# configue eth0 
auto eth0 
iface eth0 inet static
address 192.168.123.145
netmask 255.255.255.0

将该设备加入到default 的network中 virbr2

$ sudo brctl addif virbr2 tap0

以上是手动模式,我们也可以创建一个虚拟机,使用up和down的script脚本自动完成tap的创建和配置。参考:centos6.5下kvm网络配置之NAT

$ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline  -net nic,model=virtio,macaddr=52:54:00:6e:ae:39 -net tap,ifname=tap0,script=no,downscript=no -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2

通过qemu-bridge-helper创建一个tap设备。

以上创建guest的网卡过程比较复杂, 使用-net bridge参数可以简化工作。

-net bridge,br=virbr2,helper=/home/shhfeng/qemu/debug/qemu-bridge-helper -net nic,model=virtio
该参数, qemu会自动的创建一个tap设备,并且将该tap设备直接连接到libvirt的default bridge “virbr2”

/home/shhfeng/qemu/ 是我们编译qemu是设置的prefix路径。

$ sudo x86_64-softmmu/qemu-system-x86_64 -enable-kvm  -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline  -net bridge,br=virbr2,helper=/home/shhfeng/qemu/debug/qemu-bridge-helper -net nic,model=virtio -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0

[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(三)的更多相关文章

  1. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)

    目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...

  2. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(四)

    通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做 ...

  3. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(一)

    目的: 结合现在比较流行的技术,通过一个demo 展示一个全栈式设计的各种技能. 一个全栈式的工程师,应该能设计通过verilog/VHDL做logical设计.能写内核驱动,能架站. 要熟悉veri ...

  4. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(六)

    目的: 1. 为我们自己的watchdog写一个驱动 步骤: 通过之前的介绍,我们很容易猜想到写我们基于PCI的watchdog驱动,可以分2个步骤. 1. 探测加载PCI设备 这部分代码跟我们的设备 ...

  5. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(二)

    这篇文章的理解,需要一些专业知识了. 我们可以创建模拟自己的外设吗? 我们已经知道什么是qemu了,我们可以通过qmeu的提供的外设,DIY一个计算机了. 但是我们可能还不满足,我们可以自己制造一个外 ...

  6. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(八)

    目的: 1. 通过网页读取watchdog的信息 2. 通过网页设置watchdog 准备工作: 1. 选择一个web框架,选用 cherrypy $ sudo apt-get install pyt ...

  7. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)

    目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备. 准备知识: 简单的说,PCI 设备分3个空间. 配置空间,IO空间,内存地址空间. PCI设备厂家决定了外设是使用IO空间还是 ...

  8. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(七)

    目标: 1. 完成最终的设备驱动,增加具体的watchdog设备操作的代码. 测试代码: 代码最终实现见cwd_demo.c 代码只实现了read与write.  没有实现ioctl. 因此,我们可以 ...

  9. 从零开始的全栈工程师——利用CSS3画一个正方体 ( css3 )

    transform属性 CSS3的变形(transform)属性让元素在一个坐标系统中变形.transform属性的基本语法如下: transform:none | <transform-fun ...

随机推荐

  1. Gentoo Linux 学习笔记1

         Gentoo Linux是一个基于portage进行包管理的Linux发行版,最早版本始于2002年.其官方官网为http://www.gentoo.org 目前,Gentoo Linux已 ...

  2. Oracle EBS-SQL (PO-11):检查采购订单退货数.sql

    select msi.segment1                                    物料编码,     --  msi.inventory_item_id return_it ...

  3. unigui数据库连接池

    UNIGUI for delphi,是一款WEB RIA开发框架.开发WEB程式如传统C/S般简单,众多DELPHIER趋之若鹜. 虽然上手非常容易,但要真正使用好,有些地方还是值得考究的. 网上有同 ...

  4. H面试程序(29):求最大递增数

    要求:求最大递增数 如:1231123451 输出12345 #include<stdio.h> #include<assert.h> void find(char *s) { ...

  5. JD-GUI on Ubuntu 13.04 64-bit

    Java Decompiler (jd-gui) is a cute little tool I like using when working in Java. Unfortunately it o ...

  6. 排列与组合的C语言实现

    排列与组合是数学里的经典问题,由这个问题可引申出子集.字典排序等问题,那么,我们先看经典的排列与组合,怎么在程序里实现. 在网上搜了一下,关注这个问题的人还是挺多的,有不了人给出的回答是使用几个for ...

  7. MD5加密算法原理及实现

    MD5消息摘要算法,属Hash算法一类.MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要. 以下所描述的消息长度.填充数据都以位(Bit)为单位,字节序为小端字节. 算法原理 1.数 ...

  8. Aix6.1安装openssh

    一.软件下载 1.官方网站下载: openssl IBM官方网站下载:https://www14.software.ibm.com/webapp/iwm/web/reg/download.do?sou ...

  9. AndroidUI 布局动画-为布局添加动画

    除了可以为视图添加动画以外,还可以为视图的布局添加动画: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...

  10. 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型_1计算分数精确值

    1 计算分数精确值(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商, ...