KVM(Kenerl-based virtual machine)安装包分析研究

 
kvm主要包括kvm、kmod-kvm、etherboot-zroms-kvm三个包,下面是对各个包的研究,通过研究这些文件,可以了解kvm的构成结构。
一、包内容分析
1、kvm 包
1)概要说明
------------------------------------------------------------------------------------------------
Name        : kvm                          Relocations: (not relocatable)
Version     : 83                                Vendor: CentOS
Release     : 239.el5.centos                Build Date: Fri 22 Jul 2011 09:52:35 PM CST
Install Date: Mon 21 Nov 2011 02:47:25 PM CST      Build Host: builder10.centos.org
Group       : Development/Tools             Source RPM: kvm-83-239.el5.centos.src.rpm
Size        : 2126435                          License: GPLv2
Signature   : DSA/SHA1, Sat 13 Aug 2011 05:26:42 AM CST, Key ID a8a447dce8562897
URL         : http://kvm.sf.net
Summary     : Kernel-based Virtual Machine
Description :
KVM(基于内核的虚拟机)是一个针x86平台上Linux的全虚拟化解决方案。
KVM (for Kernel-based Virtual Machine) is a full virtualization solution
for Linux on x86 hardware.
利用KVM,一个机器能够运行多个之上运行未经修改linux或windows操作系统的虚拟机。每一个虚拟机拥有其专有的
虚拟硬件:如网络接口卡、显卡等。
Using KVM, one can run multiple virtual machines running unmodified Linux
or Windows images. Each virtual machine has private virtualized hardware:
a network card, disk, graphics adapter, etc.
2)此包在操作系统上安装的文件
/etc/sysconfig/modules/kvm.modules   --kvm 模块加载配置文件
/etc/udev/rules.d/65-kvm.rules       --kvm 设备的udev规则文件 
/usr/bin/ksmctl                      --内核共享页合并程序(Kernel Sharedpage Merging)
                                       需要在/dev下有ksm设备
/usr/libexec/qemu-kvm                --基于qemu的虚拟机仿真程序,所有的虚拟机均通过此程序启动
/usr/share/kvm
--各类虚拟BIOS文件
/usr/share/kvm/bios.bin              
/usr/share/kvm/extboot.bin           extboot is an x86 Option ROM that passes through int13 functions to a VMM which
                                     allows a VMM to expose an arbitrary block device as the primary BIOS disk.  It
                                     can be used to boot SCSI or paravirtual devices.
--以下为通过PXE启动用到的网卡ROM BIOS,这些文件是指向/usr/share/qemu-pxe-roms/目录下,zrom格式的文件
/usr/share/kvm/pxe-e1000.bin
/usr/share/kvm/pxe-ne2k_pci.bin
/usr/share/kvm/pxe-pcnet.bin
/usr/share/kvm/pxe-rtl8139.bin
/usr/share/kvm/pxe-virtio.bin
/usr/share/kvm/vgabios-cirrus.bin
/usr/share/kvm/vgabios.bin
--键盘映射文件
/usr/share/kvm/keymaps
/usr/share/kvm/keymaps/ar
/usr/share/kvm/keymaps/common
/usr/share/kvm/keymaps/da
/usr/share/kvm/keymaps/de
/usr/share/kvm/keymaps/de-ch
/usr/share/kvm/keymaps/en-gb
/usr/share/kvm/keymaps/en-us
/usr/share/kvm/keymaps/es
/usr/share/kvm/keymaps/et
/usr/share/kvm/keymaps/fi
/usr/share/kvm/keymaps/fo
/usr/share/kvm/keymaps/fr
/usr/share/kvm/keymaps/fr-be
/usr/share/kvm/keymaps/fr-ca
/usr/share/kvm/keymaps/fr-ch
/usr/share/kvm/keymaps/hr
/usr/share/kvm/keymaps/hu
/usr/share/kvm/keymaps/is
/usr/share/kvm/keymaps/it
/usr/share/kvm/keymaps/ja
/usr/share/kvm/keymaps/lt
/usr/share/kvm/keymaps/lv
/usr/share/kvm/keymaps/mk
/usr/share/kvm/keymaps/modifiers
/usr/share/kvm/keymaps/nl
/usr/share/kvm/keymaps/nl-be
/usr/share/kvm/keymaps/no
/usr/share/kvm/keymaps/pl
/usr/share/kvm/keymaps/pt
/usr/share/kvm/keymaps/pt-br
/usr/share/kvm/keymaps/ru
/usr/share/kvm/keymaps/sl
/usr/share/kvm/keymaps/sv
/usr/share/kvm/keymaps/th
/usr/share/kvm/keymaps/tr
/usr/share/man/man1/qemu-kvm.1.gz     --qemu-kvm 帮助文件
从上面的文件类型来看,此包只涵盖KVM管理相关的文件或程序,不包括KVM核心模块,这些模块在哪里呢?在另一个
名称为kmod-kvm的包中,将在后面进行说明。
 
3)kvm包依赖的其他包
>alsa-lib
--分组:System Environment/Libraries
--说明:The Advanced Linux Sound Architecture (ALSA) 库. ALSA向Linux操作系统提供音频和MIDI功能。
>bash
--分组:System Environment/Shells
--说明:The GNU Bourne Again shell (bash)
>celt051
--分组:System Environment/Libraries
--说明:CELT (Constrained Energy Lapped Transform) 
        一个提供低延迟语音和音频通信的编解码器
>etherboot-zroms-kvm
--分组:Development/Tools 
--说明:网络引导
        KVM支持的.zrom格式的引导ROM(只读存储器)
>qcairo
--分组:System Environment/Libraries
--说明:一个二维图形库
This is a version of the cairo 2D graphics library, with additional
features required to support the implementation of the spice protocol.
Cairo is a 2D graphics library designed to provide high-quality display
and print output. Currently supported output targets include the X Window
System, OpenGL (via glitz), in-memory image buffers, and image files (PDF,
PostScript, and SVG).
>glibc
--分组:System Environment/Libraries
--说明:GNU libc库,
        The glibc package contains standard libraries which are used by
multiple programs on the system. In order to save disk space and
memory, as well as to make upgrading easier, common system code is
kept in one place and shared between programs. This particular package
contains the most important sets of shared libraries: the standard C
library and the standard math library. Without these two libraries, a
Linux system will not function.
>gnutls
--分组:System Environment/Libraries
--说明:TLS协议实现
GnuTLS is a project that aims to develop a library which provides a secure
layer, over a reliable transport layer. Currently the GnuTLS library implements
the proposed standards by the IETF's TLS working group.
>initscripts
--分组:System Environment/Base
--说明:inittab 文件和 /etc/init.d 脚本
The initscripts package contains the basic system scripts used to boot
your CentOS system, change runlevels, and shut the system down
cleanly.  Initscripts also contains the scripts that activate and
deactivate most network interfaces.
>kmod-kvm
--分组:System Environment/Kernel
--说明:KVM内核模块
This package provides the kvm kernel modules built for the Linux
kernel 2.6.18-274.el5 for the x86_64 family of processors.
>libgcrypt
--分组:System Environment/Libraries
--说明:一个通用加密库。
>libgpg-error
--分组:System Environment/Libraries
--说明:This is a library that defines common error values for all GnuPG components.  
        Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,pinentry, SmartCard Daemon and possibly more in the future.
>libpng
--分组:System Environment/Libraries
--说明:提供操作PNG格式图形文件功能的库。
he libpng package contains a library of functions for creating and
manipulating PNG (Portable Network Graphics) image format files.  PNG
is a bit-mapped graphics format similar to the GIF format.  PNG was
created to replace the GIF format, since GIF uses a patented data
compression algorithm.
Libpng should be installed if you need to manipulate PNG format image
files.
>libXrandr
--分组:System Environment/Libraries
--说明:X.Org X11 libXrandr运行时库
>log4cpp
--分组:Development/Libraries
--说明: C++ logging library
>nspr
--分组:System Environment/Libraries
--说明:Netscape Portable Runtime
NSPR provides platform independence for non-GUI operating system
facilities. These facilities include threads, thread synchronization,
normal file and network I/O, interval timing and calendar time, basic
memory management (malloc and free) and shared library linking.
>openssl
--分组:System Environment/Libraries
--说明:OpenSSL 工具包
The OpenSSL toolkit provides support for secure communications between
machines. OpenSSL includes a certificate management tool and shared
libraries which provide various cryptographic algorithms and
protocols.
>qffmpeg-libs
--分组:ystem Environment/Libraries
--说明:Codec and format libraries for qffmpeg intended for use with the SPICE virtual desktop protocol.
>qspice-libs
--分组:System Environment/Libraries
--说明: Libraries for qspice
This package contains the runtime libraries for any application that wishes to be a qspice server.
>SDL
--分组:System Environment/Libraries
--说明:A cross-platform multimedia library.
Simple DirectMedia Layer (SDL) is a cross-platform multimedia library
designed to provide fast access to the graphics frame buffer and audio
device.
>shadow-utils
--分组:System Environment/Base
--说明:Utilities for managing accounts and shadow password files
The shadow-utils package includes the necessary programs for
converting UNIX password files to the shadow password format, plus
programs for managing user and group accounts. The pwconv command
converts passwords to the shadow password format. The pwunconv command
unconverts shadow passwords and generates an npasswd file (a standard
UNIX password file). The pwck command checks the integrity of password
and shadow files. The lastlog command prints out the last login times
for all users. The useradd, userdel, and usermod commands are used for
managing user accounts. The groupadd, groupdel, and groupmod commands
are used for managing group accounts.
>zlib
--分组:System Environment/Libraries
--说明:The zlib compression and decompression library.
Zlib is a general-purpose, patent-free, lossless data compression
library which is used by many different programs.
================================================================================================ 
2、kmod-kvm包 
1)概要说明
------------------------------------------------------------------------------------------------
Name        : kmod-kvm                     Relocations: (not relocatable)
Version     : 83                                Vendor: (none)
Release     : 274.el5.centos.2              Build Date: Thu 17 Nov 2011 10:19:56 AM CST
Install Date: Mon 21 Nov 2011 02:51:30 PM CST      Build Host: localhost.localdomain
Group       : System Environment/Kernel     Source RPM: kmod-kvm-83-274.el5.centos.2.src.rpm
Size        : 476848                           License: GPL
Signature   : (none)
URL         : http://www.qumranet.com
Summary     : kvm kernel module
Description :
这个内核模块提供对使用硬件虚拟化(Intel VT-x&VT-i 或 AMD SVM)的虚拟机的支持。
This kernel module provides support for virtual machines using hardware support
(Intel VT-x&VT-i or AMD SVM).
2)此包在操作系统上安装的文件
/lib/modules/2.6.18-274.el5/extra/kmod-kvm
/lib/modules/2.6.18-274.el5/extra/kmod-kvm/ksm.ko
/lib/modules/2.6.18-274.el5/extra/kmod-kvm/kvm-amd.ko
/lib/modules/2.6.18-274.el5/extra/kmod-kvm/kvm-intel.ko
/lib/modules/2.6.18-274.el5/extra/kmod-kvm/kvm.ko
/lib/modules/2.6.18-274.7.1.el5/extra/kvm-amd.ko
/lib/modules/2.6.18-274.7.1.el5/extra/kvm-intel.ko
/lib/modules/2.6.18-274.7.1.el5/extra/kvm.ko
从安装文件内容来看,kvm内核模块文件都在这个包中。
3)kmod-kvm包依赖的其他包
此包只依赖内核,不涉及其他的库或者工具包
================================================================================================ 
3、etherboot-zroms-kvm包
1)概要说明
------------------------------------------------------------------------------------------------
Name        : etherboot-zroms-kvm          Relocations: (not relocatable)
Version     : 5.4.4                             Vendor: CentOS
Release     : 13.el5.centos                 Build Date: Mon 05 Apr 2010 03:05:57 AM CST
Install Date: Wed 16 Nov 2011 11:04:10 AM CST      Build Host: builder10.centos.org
Group       : Development/Tools             Source RPM: etherboot-5.4.4-13.el5.centos.src.rpm
Size        : 196608                           License: GPLv2
Signature   : DSA/SHA1, Tue 27 Apr 2010 07:41:01 AM CST, Key ID a8a447dce8562897
URL         : http://etherboot.org
Summary     : Etherboot - boot roms supported by KVM, .zrom format
Description :
此包中包含kvm仿真的通过网卡引导的.zrom格式的ROM文件。
2)此包在操作系统上安装的文件
/usr/share/etherboot
/usr/share/etherboot/e1000-82542.zrom
/usr/share/etherboot/ne.zrom
/usr/share/etherboot/pcnet32.zrom
/usr/share/etherboot/rtl8029.zrom
/usr/share/etherboot/rtl8139.zrom
/usr/share/etherboot/virtio-net.zrom
/usr/share/qemu-pxe-roms
3)etherboot-zroms-kvm包依赖的其他包
bash
只需要有shell支持即可。
================================================================================================
三、kvm模块配置文件
配置文件位置:/etc/sysconfig/modules/kvm.modules
文件内容如下:
----------------------------------------------------------------------------------------------
if [ $(grep -c vmx /proc/cpuinfo) -ne 0 ]; then    --判断是否为Intel CPU
    modprobe kvm-intel >/dev/null 2>&1             
fi
if [ $(grep -c svm /proc/cpuinfo) -ne 0 ]; then     --判断是否为AMD  CPU
    modprobe kvm-amd >/dev/null 2>&1
fi
modprobe ksm >/dev/null 2>&1                        
----------------------------------------------------------------------------------------------
本配置前两个语句主要是检查host CPU 类型,然后加载对应的模块,Intel 为 kvm-intel\AMD 为kvm-amd
无论是Intel 还是 AMD CPU,均需要加载 ksm模块。
 >/dev/null 2>&1 是指将模块加载命令的输出信息及错误信息都重定向到/dev/null设备中,默认情况下这两类
 信息都输出到屏幕 
================================================================================================
四、综合分析
通过对kvm包极其涵盖的文件分析,kvm提供的程序和文件主要包括三部分:
1、内核模块:kvm.ko、kvm-amd、kvm-intel.ko、ksm.ko
2、虚拟机仿真、管理相关文件:qemu-kvm、*.bin
3、网卡仿真BIOS文件。
明确了包含哪些文件,通过分析这些文件的作用,即可对kvm的运行机制有一个概要的理解了。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android TV 上获取蓝牙键值并将其传递给内核,您需要执行以下步骤: 1. 在 Android TV 上设置蓝牙配对设备。 2. 创建一个 BroadcastReceiver 以接收蓝牙键值。 3. 在 BroadcastReceiver 中处理蓝牙键值,并将其传递给内核。 以下是一个示例 BroadcastReceiver: ```java public class BluetoothReceiver extends BroadcastReceiver { private static final String TAG = "BluetoothReceiver"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_OFF: Log.d(TAG, "Bluetooth off"); break; case BluetoothAdapter.STATE_TURNING_OFF: Log.d(TAG, "Turning Bluetooth off..."); break; case BluetoothAdapter.STATE_ON: Log.d(TAG, "Bluetooth on"); break; case BluetoothAdapter.STATE_TURNING_ON: Log.d(TAG, "Turning Bluetooth on..."); break; } } else if (BluetoothDevice.ACTION_KEY_EVENT.equals(action)) { int keyCode = intent.getIntExtra(BluetoothDevice.EXTRA_KEY_CODE, -1); if (keyCode != -1) { // Do something with the key code, such as pass it to the kernel } } } } ``` 您需要将此 BroadcastReceiver 注册到您的 Android TV 应用程序中,并使用 IntentFilter 指定要接收的蓝牙广播。例如,您可以在 onCreate() 方法中注册 BroadcastReceiver: ```java IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); filter.addAction(BluetoothDevice.ACTION_KEY_EVENT); registerReceiver(new BluetoothReceiver(), filter); ``` 在 BroadcastReceiver 中,您可以处理蓝牙键值并将其传递给内核。为了将键值传递给内核,您需要使用 JNI 调用 C 函数,并将键值作为参数传递。例如: ```java public class MyNativeLibrary { static { System.loadLibrary("my_native_library"); } public static native void sendKeyEvent(int keyCode); } ``` 您需要在您的 C 代码中实现 sendKeyEvent() 函数,以便它能够将键值传递给内核。例如: ```c JNIEXPORT void JNICALL Java_com_example_MyNativeLibrary_sendKeyEvent(JNIEnv *env, jobject obj, jint keyCode) { // Send key event to kernel } ``` 这是一个简单的示例,您需要根据您的特定用例进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值