[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(一)
目的:
结合现在比较流行的技术,通过一个demo 展示一个全栈式设计的各种技能。
一个全栈式的工程师,应该能设计通过verilog/VHDL做logical设计。能写内核驱动,能架站。
要熟悉verilog/VHDL, C/C++, shell, python, JS, HTML, CSS等语言。
发现自己很多细节还需要了解。
首先理解2个概念
qemu是什么
简单的说,qemu 是一个开源软件,可以模拟整个计算机系统, 包括多种CPU和各种外设。
我们可以形象的比喻 qemu就是一个虚拟的攒机器商。或者简单的理解为,他就是神舟或者联想。
用qemu生成一个电脑过程,很多人都去过中关村攒过机器(DIY)过程一样。
比如说我们列一个清单,需要2个x86的CPU, 需要2G RAM, 需要一个网卡,需要一个声卡,需要一个20G的硬盘。 现在交给 qemu来完成。请 执行 ($ man qemu) 查看qemu的用法。
$ sudo qemu-system-x86_64 -boot c -m 20480 -hda /home/kvm/winxp.img -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tap0,script=no -clock rtc -soundhw es1370 -smp 2
qemu-system-x86_64 表示是x86的CPU, -smp 2表示是2个CPU
-m 20480 便是是2G 内存。
-net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tap0,script=no表示增加的了一个网卡接口。
-soundhw es1370 表示声卡。
-hda /home/kvm/winxp.im 就是我们的硬盘。 具体大小是我们创建的时候的大小。 通过qemu-image来创建这个硬盘,并且制定硬盘大小。 请 执行($ man qemu-image)来查看用法。
我们的这个电脑就攒好了。
qemu模拟的CPU是通过一个动态二进制编译的技术, 请参考《编译原理》。
详情,请参考
qemu 官方网站: http://wiki.qemu.org/Main_Page
wikibooks: http://en.wikibooks.org/wiki/QEMU
KVM是 什么
是一个开源的系统虚拟化模块。简单的说,他就是一个linux 驱动, 能提供一个执行跟运行KVM自身相同的CPU的指令集的环境。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。
详情,请参考 kvm官方网站 http://www.linux-kvm.org/page/Main_Page
qemu与KVM
通过上面的简单介绍,我们知道,qemu可以通过模拟的CPU执行指令。
而KVM 则能用硬件提供的虚拟化功能, 直接让真 实CPU执行虚拟机内存里的指令。
那我们肯定回想,可以让qemu直接调用kvm而不使用模拟的CPU吗?
是的,可以。
$ sudo qemu-system-x86_64 --enable-kvm ...
通过KVM, qem模拟的电脑可以接近真实电脑的速度。
[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(一)的更多相关文章
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)
目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(四)
通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(六)
目的: 1. 为我们自己的watchdog写一个驱动 步骤: 通过之前的介绍,我们很容易猜想到写我们基于PCI的watchdog驱动,可以分2个步骤. 1. 探测加载PCI设备 这部分代码跟我们的设备 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(二)
这篇文章的理解,需要一些专业知识了. 我们可以创建模拟自己的外设吗? 我们已经知道什么是qemu了,我们可以通过qmeu的提供的外设,DIY一个计算机了. 但是我们可能还不满足,我们可以自己制造一个外 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(八)
目的: 1. 通过网页读取watchdog的信息 2. 通过网页设置watchdog 准备工作: 1. 选择一个web框架,选用 cherrypy $ sudo apt-get install pyt ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)
目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备. 准备知识: 简单的说,PCI 设备分3个空间. 配置空间,IO空间,内存地址空间. PCI设备厂家决定了外设是使用IO空间还是 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(七)
目标: 1. 完成最终的设备驱动,增加具体的watchdog设备操作的代码. 测试代码: 代码最终实现见cwd_demo.c 代码只实现了read与write. 没有实现ioctl. 因此,我们可以 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(三)
我们已经设计了一个基于qemu的watchdog了.下一步工作就是创建一个含有我们的watchdog的虚拟计算机器了. 准备工作: 1. 使用virt-manager或者virsh创建一个虚拟机器. ...
- 从零开始的全栈工程师——利用CSS3画一个正方体 ( css3 )
transform属性 CSS3的变形(transform)属性让元素在一个坐标系统中变形.transform属性的基本语法如下: transform:none | <transform-fun ...
随机推荐
- 关于 <video> 的兼容性测试
测试浏览器 Firefox: 33.0.1 Chrome: 38.0.2125.111 m Safari: 5.1.7 IE: 9 和 10(6,7,8不考虑) 经测试:FF.Chrome.Safar ...
- PHP面试题之小杂鱼
这里的题目都是比较老的,但是做笔试题时经常碰到,因为这些题目比较凌乱,考的知识点不好分类,就放一块了 /** * 题目:最少代码实现求3个数的最大值 * 三目运算符实现 */ function get ...
- 预定义异常 - PHP手册笔记
Exception是所有异常的基类,类摘要如下: <?php class Exception { protected string $message; // 异常消息内容 protected i ...
- [问题解决] 启动mongod 时,出现addr already in use错误
错误: 启动mongod root@wangyuyu-Vostro-:/usr/bin# ./mongod 错误提示: Sat Aug :: [initandlisten] ERROR: listen ...
- Mac OS X 快捷键(完整篇)
不少朋友提出要求,希望有个「高质量」的列表.其实这样的资源真是太多,平果官网就有 快捷键文档(多国语言版本).于是花了20分钟,浏览了一些网站,整理了点资源放过来供大家参考. 快捷键是通过按下键盘上的 ...
- Keil MDK中使用pc-lint的详细方法
keil MDK版本:V4.03 PC-lint版本: V8.0 关于pc-lint的强大作用,网上有很多,这里不想再复述,只说一句:能通过pc-lint检验的程序不一定没有问题,但通过了pc-li ...
- 百用随身系统 Veket Linux
Veket Linux 是一个随身的可装在U盘的Linux操作系统. 特点:1,随身系统,装在U盘可走遍天下,它几乎支持“所有”的电脑,就我所接触得到的电脑它都支持并成功驱动,就这十多年的安装的电脑都 ...
- Java Servlet的配置文件web.xml配置内容和具体含义
文件名:“SimpleServlet.java” package cn.mldn.lxh.servlet ;//定义包 import java.io.* ; // HttpServlet属于javax ...
- DNS解析服务使用的系统对网站的安全起着很重要的作用
1 采用独享的DNS服务器解析系统 DNS解析服务使用的系统对网站的安全极其重要.现在国内的DNS服务器普遍是公用的,即是你的企业网站DNS解析服务和其他许多网站都是由同一个DNS服务器提供.一旦某个 ...
- setTimeout()与setInterval() 问题
提示:setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). 1. setInterval(c ...