参考博客:
http://techbbs.zol.com.cn/1/60_1997.html
http://blog.sina.com.cn/s/blog_667725170100q51t.html
正文:
1.从官网(http://www.virtualbox.org/wiki/Linux_Downloads)下在我所需要的virtualbox版本(VirtualBox-4.1-4.1.0_73009_fedora14-1.i686.rpm),同时下载扩展文件(Oracle_VM_VirtualBox_Extension_Pack-4.1.0-73009.vbox-extpack,支持从USB2启动)
2)Virtualbox依赖于
dkms
,于是安装
yum
install dkms.noarch
(或:yum install dkms)
3)安装
virtual
box ,进入刚下载的文件所在目录
rpm
-ivh VirtualBox-4.0-4.0.4_70112_fedora14-1.i686.rpm
如果提示:缺少什么插件,那你就根据提示进行安装
4)如果要让虚拟机使用U盘,那么在宿主机中需要把当前登录用户——“xxxxx”,添加到“vboxusers”组中,其中vboxusers组是在安装
virtualbox时自动创建的群。通过命令“usermod
-G vboxusers -a
xxxxx”实现添加。(对于一些老版本的linux所要做的工作可能不止这一条,因为老版本的linux不能自动识别u盘,所幸的是Fedora14够
新了。)
如我的机器输入:
usermod -G vboxusers -a Jason
5)构建内核树
到这个时候,在
Application
-> system tool 下面可以看到
virtual
box 的图标,可以运行。
但是当你启动虚拟机的时候其实还是报错的,根据提示运行
/etc/init.d/vboxdrv
setup
提示出错信息如下,分析原因,因为这是驱动,驱动编译的时候需要内核树,这个涉及到Linux驱动程序开发
方面的问题,可以不深入研究,以下阐述解决办法。
[root@Hikari
Downloads]# /etc/init.d/vboxdrv setup
Stopping VirtualBox kernel
modules [ OK ]
Uninstalling
old VirtualBox DKMS kernel modules [ OK ]
Trying
to register the VirtualBox kernel modules using DKMS
Error! Your
kernel source for kernel 2.6.35.6-45.fc14.i686 cannot be found
at
/lib/modules/2.6.35.6-45.fc14.i686/build or
/lib/modules/2.6.35.6-45.fc14.i686/source.
[FAILED]
(Failed,
trying without DKMS)
Recompiling VirtualBox kernel
modules [FAILED]
(Look
at /var/log/vbox-install.log to find out what went wrong)
于是提示找不到
linux到kernel,由于默认安装到时候没有源代码,所以先搞定源代码,否则**。
确认好系统到版本,例如当前运行的系统的版本号是:
uname
-r
2.6.35.6-45.fc14.i686
那么要找到是
2.6.35.6-45.fc14.i686
,于是到
fedora
到官方目录,例如
14
的是
http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/source/SRPMS/
下载这个文件
kernel-2.6.35.6-45.fc14.src.rpm
如果你之前试过从源代码安装软件,那么可以跳过这一步,否则要建立一个编译的目录。
在用户根目录,例如我的是
/home/Jason/
运行命令建立相关目录
cd
~
rpmdev-setuptree
然后处理一下依赖关系,否则编译过程中会有一堆依赖错误的
yum-builddep kernel-2.6.35.6-45.fc14.src.rpm
接着是安装
rpm
-Uvh
kernel-2.6.35.6-45.fc14.src.rpm
提示缺少用户,可以不管他,或者自己创建一个用户就行来,默认用root来取代
接着进入刚才建立到
rpmbuild
目录下的
SPECS
子目录,其中参数
-bp
的意思是将
.src.rpm
包解压缩
到
/rpmbuild/SOURCE
目录,然后打补丁,target
是指定平台
cd
~/rpmbuild/SPECS
rpmbuild -bp --target=`uname -m`
kernel.spec
然后源代码树就已经放在rpmbuild
的
BUILD
目录下面了,例如我的是
/home/Jason/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.i686
然后是配置内核,方法是生成
.config
配置文件,可以直接使用当前系统的配置,在/boot目录下
cd
~/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.i686
cp
/boot/config-2.6.35.6-45.fc14.i686 .config
然后运行
menuconfig
进入图形化配置,目前没有具体研究内核配置,所以不做修改。
make
menuconfig
如果之前没有运行过
menuconfig
的话会提示缺库,那么安装
ncurses
就行了
yum
install ncurses
修改
Makefile
,注意这步很重要,必须要做,否则之后到驱动运行的时候提示版本不对。
vim
Makefile 运行
vim
来编辑
Makefile,当然可以使用
gedit
来编辑,方便一点
找到这个:
其实就在前几行而已
EXTRAVERSION
= xxx
修改为当前到版本修改为和当前版本符合的:
VERSION
= 2
PATCHLEVEL = 6
SUBLEVEL = 35
EXTRAVERSION =
.6-45.fc14.i686
接着是编译内核和编译模块,因为之前已经解决来依赖问题,所以这步基本不会有其他问题的
make
bzImage
make modules
make modules_install
那么在系统模块目录
/lib/modules/
应该有刚安装了的模块
2.6.35.6-45.fc14.i686
这个目录就是模块所在目录
这个目录下到
build
目录就是需要指向源代码树的,要确认一下build是链接文件,确认指向是正确的
例如我的指向是:
/home/Jason/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.i686
如果不对的话其实可以手动建立链接
rm
build
ln -s
/home/Jason/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.i686
build
一切准备就绪来,重新编译
virtualbox
的内核驱动模块,可以按照提示的命令
[Etual@Hikari
2.6.35.6-45.fc14.i686]$ sudo /etc/init.d/vboxdrv setup
[sudo]
password for Etual:
Stopping VirtualBox kernel
modules [ OK ]
Uninstalling
old VirtualBox DKMS kernel modules [ OK ]
Trying
to register the VirtualBox kernel modules using DKMS[ OK ]
Starting
VirtualBox kernel
modules [ OK ]
可以看到提示,一切都
OK
了,这个时候就可以运行
virtualbox
了!
如果提示要安装usb2.0不能用,则安装扩展插件