老牛博客,源自生活
让知识服务生活

导航

 

参考博客:

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启动)


2Virtualbox依赖于 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)


于是提示找不到 linuxkernel,由于默认安装到时候没有源代码,所以先搞定源代码,否则**。

确认好系统到版本,例如当前运行的系统的版本号是:
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不能用,则安装扩展插件

posted on 2012-12-13 19:19  GeekyNiu  阅读(340)  评论(0编辑  收藏  举报