自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 KVM虚拟机代码揭秘——设备IO虚拟化

前言:本文针对intel VT-X技术,结合QEMU和KVM代码以及自己写的实例详细分析了一个虚拟设备的IO虚拟化过程。虽然现在KVM虚拟化性能非常好,发展也非常迅速,但是资料相对比较少,理论知识不是很成熟,其中理解上可能会有些偏差,希望大家指出并与本人联系和讨论. 联系方式:EMAIL:[email protected]  QQ:150197475  QQ群:33273092转载的请加上此部

2011-06-22 13:33:00 11864 9

原创 摄像头集中监控软件系统

摄像头集中监控软件系统通过一个服务程序使用tcp对端口进行监听,等待报警事件,然后通过桌面主进程创建进程来运行集中观测软件,并且传递报警数据。集中监控软件负责对多种摄像头的连接,接收并显示图片数据,抓拍和录像等功能。

2011-09-09 17:04:16 3820

原创 KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了

我们在一个母字符串中查找一个子字符串有很多方法。KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度。当然我们可以看到这个算法针对的是子串有对称属性,如果有对称属性,那么就需要向前查找是否有可以再次匹配的内容。 在KMP

2011-08-29 17:48:26 71600 40

原创 KVM虚拟机代码揭秘——中断虚拟化

KVM中断虚拟化主要是使用intel的VT-x技术,它分为两个部分,中断退出个中断注入。中断退出是指虚拟机发生中断时,主动使得客户机发生VM-exit,这样能够在主机中实现对客户机中断的注入。中断注入它是指将中断写入VMCS对应的中断信息位,来实现中断的注入,当中

2011-08-08 19:00:44 17483 3

转载 linux下调试core的命令,察看堆栈状态命令

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。 首先看看默认的一些core的参数,注意core file size是个0,程序出错时不会产生co

2011-08-05 15:19:55 7458

原创 二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出

小练数据结构。二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出#include #include #include typedef struct BITNODE{int flag; //0没用过,1数字节点,2符号节点char sign; float nu

2011-08-04 10:26:53 4652 2

原创 要面试了,写写小程序练练手,顺便记录一下

面试小程序记录

2011-08-03 18:25:40 4204

原创 内核调用用户空间可执行文件以及潜在问题分析

在Linux中要在用户空间访问内核一般使用ioctl或者系统调用, 反过来从内核调用用户空间方法也非常多,有一种方法就是使用call_usermodehelper_exec 函数。1. 构造参数我们知道在调用一个函数之前需要知道函数地址,参数,环境变量等信息,所以在调用这个函数前

2011-07-26 09:52:16 5347 1

原创 close 造成标准输入输出scanf/printf 失灵

Linux IO:Linux系统可用的文件IO函数--打开文件,读取文件,写文件等。大致用到5个函数:open,read,write,lseek,close。另外不同的缓存器长度对read和write函数有影响。术语--不带缓存指的是每个read和write都调用内核中的一个系统

2011-07-21 10:47:16 3083

原创 2.6.36 内核模块时间同步函数汇总

2.6.36 内核模块调用使用函数汇总:在linux内核模块中能用到的函数比用户空间多,但是它的函数往往被用得很少。当然在内核中叶可以调用用户空间的函数只要直接调用系统调用的封装函数就行,如下:如调用long gettimeofday(struct timeval tv, str

2011-07-14 14:50:50 2852

原创 KVM虚拟机代码揭秘——QEMU代码结构分析

如我们所知,QEMU是一个模拟器,它能够动态模拟特定架构的CPU指令,如X86,PPC,ARM等等。QEMU模拟的架构叫目标架构,运行QEMU的系统架构叫主机架构,QEMU中有一个模块叫做微型代码生成器(TCG),它用来将目标代码翻译成主机代码。如下图所示。     我们也可以将

2011-07-13 16:06:14 26802 11

转载 QEMU, a Fast and Portable Dynamic Translator

Author: Fabrice Bellard AbstractWe present the internals of QEMU, a fast machine emulatorusing an original portable dynamic translator. Item

2011-07-12 15:25:36 4159

原创 神奇的memset

今天编译内核模块的时候发现一个字符串内存拷贝的问题: 当使用kzalloc(sizeof(char )*size ,GFP_KERNEL) 给一个字符串指针分配完一段空间以后,直接使用memcpy,strcpy,strcat之后,模块直接卡死,甚至系统崩溃。找了半天没有发现原因,

2011-07-08 20:11:04 2586

原创 Linux内核模块导出后无法调用问题解决(模块间函数调用通讯)

Linux模块间通讯方法非常的多,最便捷的方法莫过于函数符号导出,然后直接调用。然而在linux2.6.26以后的内核中模块的符号导出经常会出现问题,一个模块中的导出符号不能被另外一个模块进行调用。这个使得处理有依赖关系的模块非常的头疼。 1. 符号导出函数EXPORT_SYMB

2011-07-07 12:28:00 6226 1

原创 虚拟化

2011-07-03 08:58:41 5955

原创 KVM虚拟机代码揭秘——QEMU的PCI总线与设备(下)

在上文中,我们在QEMU中已经成功的虚拟了一个PCI桥和一个PCI设备,接下来我们就来给他们分配固定的IO基地址。 要给PCI设备分配固定的IO基地址,那么就需要先了解PCI设备是如何刷新和分配IO基地址的。 1. PCI设备的重置与刷新PCI在需要的时候,如第一次启动,IO重叠等就需要重置PCI设备,并且清空PCI bar上面的地址信息。主要调用函数pci_device_reset void p

2011-06-30 19:44:00 8121 1

原创 KVM虚拟机代码揭秘——QEMU的PCI总线与设备(上)

最近研究了一下QEMU的虚拟PCI设备,打算虚拟一个PCI-PCI桥和一个PCI设备,设备挂在桥上,桥挂在pci主桥上。并且给设备固定映射一个IO基地址,但是发现还是件头疼的事情,经过几天的辛苦,终于算是有点收获,和大家分享一下,有什么问题希望大家支持,一起讨论,共同提高。 申明:本文主要针对x86架构进行说明。 1. PCI 结构简介为了大家更加容易的理解后文,先来回顾一下PCI总线的基本内存结

2011-06-30 12:43:00 15276 5

原创 KVM-KMOD 编译出错问题的解决

总结了一下关于kvm-kmod-2.6.36编译出现的两个问题。当时纠结了很久,仅供参考。 (1)PC Linux system can’t compile KVM mode. Description: When I compile KVM mode in PC, many error occurred , It said many symbols can’s be found.Solution:

2011-06-28 15:51:00 3644

转载 APIC 中断属性详解

APIC:Intel APIC由一组中断输入信号,一个24*64bit的Programmable Redirection Table(PRT),一组register和用于从APIC BUS(FSB/QPI)上传送APIC MSG的部件组成,当南桥的IO device通过IOAPIC的interrupt lines产生interrupt,IOAPIC将根据内部的PRT table格式化成中断请求

2011-06-20 08:54:00 5946

转载 常见的Linux内核中内存分配函数

常见的Linux内核中内存分配函数1.原理说明  Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示。四级页表分别为:  * 页全局目录(Page Global Directory)  * 页上级目录(Page Upper Directory)  * 页中间

2011-06-08 09:05:00 156

转载 SSH SCP(不同服务器间的文件拷贝)

<br /> <br />SSH提供了一些命令和shell用来登录远程服务器。<br />在默认情况下它不允许你拷贝文件,但是还是提供了一个"scp"命令。假定你想把本地计算机当前目录下的一个名为"wuyang"的文件拷贝到远程服务器192.168.0.2上你的家目录下。而且你在远程服务器上的帐号名为"root"。<br />可以用这个命令: scp wuyang [email protected] 把文件拷贝回来<br />用这个命令: scp [email protected]:cx<br />关于scp命

2011-06-02 15:10:00 5759

转载 KVM 实现机制

1.    概述1.1.    KVM简介KVM是一个基于Linux内核的虚拟机,它属于完全虚拟化范畴,从Linux-2.6.20开始被包含在Linux内核中。KVM基于x86硬件虚拟化技术,它的运行要求Intel VT-x或AMD SVM的支持。一般认为,虚拟机监控的实现模型有

2011-06-02 12:39:00 28997 12

转载 KVM 安装使用手册

<br />KVM虚拟机<br />1前期准备<br />1.1确定机器有VT<br />终端输入命令: grep vmx /proc/cpuinfo (INTEL芯片) grep svm /proc/cpuinfo (AMD芯片)   不知道芯片的生产厂商则输入:egrep '

2011-05-26 11:11:00 8834

原创 Linux 2.6.36 x86 内核中断初始化过程详解

<br />随着硬件技术的发展,中断控制芯片已经不再是传统的ISA总线连着的简单PIC了,APIC,MSI,MSIX等等的词语大家已经非常的熟悉。同时,Linux内核也在不断发展,它在中断上的实现也越来越复杂,在这里我来讨论介绍一下Linux x86 架构下的中断初始化过程。<br /> <br />在start_kernel()之前的中断门初始化就不多啰嗦了,在随便的内核教科书里都能看到,这里就从start_kernel以后开始。<br /> <br />1.8259a、LAPIC相关数据结构初始化<br

2011-05-24 13:12:00 3812

转载 Request_irq和setup_irq的区别

Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。<br />/*<br />* Internal function to register an irqaction - typically used to<br /> * allocate special interrupts that are part of the architecture.<br />*/<br />int setup_irq(un

2011-05-23 09:19:00 896

转载 BOCHS 调式命令大全

<br />[执行控制] <br />c|cont                  向下执行,相当于WinDBG的“g”。 <br />s|step|stepi [count]    单步执行,相当于WinDBG的“t”,count 默认为 1。 <br />p|n|next                单步执行,类似于WinDBG的“p”。 <br />q|quit|exit             退出调试,同时关闭虚拟机。 <br />Ctrl-C                  结束执行状态,

2011-05-18 10:15:00 1505

原创 函数调用过程内存堆栈变化分析

<br />函数说明,简单函数调用代码如下:<br />代码:<br /><br />  <br />这里我们重复调用了这个函数,来分析编译器传递参数的过程。<br />我们通过PUSH将一个字符压入堆栈,这个相当于我们c函数传入的参数,然后通过call,调用

2011-05-18 10:11:00 2461

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除