用户模式Linux之初次体验
用户模式Linux (User Mode Linux), 缩写为UML。顾名思义,UML就是在一个可以在用户空间运行的linux内核。
UML能够为kernel虚拟一些实际的物理设备,启动UML只需要要指定一个root文件系统的image文件。UML实际上也是一种虚拟化技术。
UML的好处
第一,做一个虚拟服务器,UML可以以安全的方式运行在用户空间,它可以确保服务器不会对本机的内容进行破坏
第二,便于kernel开发和调试。kernel中一些与平台无关的模块,如文件系统,内存管理等,使用UML调试更加方便。
运行UML
1. 准备好一个rootfs的img文件
UML需要指定一个包含完整根文件系统的img文件。首先创建一个大小为2G的img文件,然后将其格式化为ext3文件系统。
# cd ~/uml
# dd if=/dev/zero of=rootfs.img bs=1M count=2048
# mkfs.ext3 rootfs.img
rootfs.img实际上是一个ext3文件系统的存储设备,但是还没有什么内容。所以现在要做的是,将一个已有的根文件系统拷贝到rootfs.img中(假设这个根文件已经打包为your-rootfs.tar.gz):
# mkdir uml-rootfs
# sudo mount -o loop rootfs.img uml-rootfs
# cd uml-rootfs
# tar xf your-rootfs.tar.gz
# cd ..
# umount uml-rootfs
还有一种办法制作一个root文件系统的img文件,假设你自己的linux发行版(Fedora, Ubuntu,etc)是按照在/dev/sda5设备上,你可以将整个/dev/sda5拷贝到一个单独的img文件:
dd if=/dev/sda5 of=rootfs.img bs=1M count=2048
注意上面的count只有2G,如果安装在/dev/sda5的根文件系统大于2G,需要增大count值
2. 以UM模式编译linux内核
从kernel.org上下载一个稳定的kernel版本,然后以um模式重新编译:
# cd kernel-2.32.26.y
# make mrproper ARCH=um
# make defconfig ARCH=um
# make ARCH=um
成功编译后,在kernel-2.32.26.y中会出现一个名为linux的可执行文件,它就是UML!
3. 运行UML
# ./linux mem=512M ubda=~/uml/rootfs.img
一个用户空间的linux就运行了....开源力量很好很强大!
更多UML的信息请参考:
UML项目首页:http://user-mode-linux.sourceforge.net/
下一步将试验如何在UML中调试kernel模块。
2010-2-2
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
MEMCACHED安装
一、服务端。先安装libevent,再安装memcached。(注:libevent是一套跨平台的事件处理接口的封装,能够兼容包括:Windows/Linux/BSD/Solaris等操作系统的事件处理)
1、下载最新版本的libevent和memcached,笔者的安装目录为/soft
>cd /soft
>wget http://www.dange.com/memcached/dist/memcach ......
在我们在写程序的过程中,有些时候需要知道一些电脑的硬件信息,比如我们写一些需要注册的程序的时候,就需要得到某个电脑特定的信息,一般来说,网卡的物理地址是不会重复的,我们正好可以用它来做为我们识别一台电脑的标志.那如何得到网卡的物理地址呢?我们可以借助于ProcessBuilder这个类,这个类是JDK1.5新加的,以前也可以用Ru ......
原文地址:http://www.wangzhongyuan.com/archives/487.html
以下是一个Linux/Unix下显示某一目录下文件列表的C程序,相当于最基本的ls命令的功能,显示的内容报告该目录下的子目录以及文件名:
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
int m ......