使用vagrant来进行开发环境的搭建

近期需要学习一下kernel开关的开发知识, 比较头疼的一个问题就是环境了. 无论是教程还是现有的代码, 在较新的kernel版本上都无法正常编译通过, 因此只能通过虚拟机来构建环境了. 这里感谢下以前的同事分享的vagrant, 相当好用的一款工具. 这里想要解决的问题是如何去跑通ldd3scull字符驱动代码.

安装和运行问题

好吧, 说实话, 一开始使用vagrant的时候会碰到许多问题. 我是在fedora 20这个发行版上安装的. 使用vagrant时, 需要先安装VirtualBox. 我在使用过程中总是会遇到两个问题. 一个问题是在启动box的时候报kernel的模块没有加载, 错误类似是这样的:

1
2
3
4
5
6
7
the provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

VirtualBox is complaining that the kernel module is not loaded. Please
run `VBoxManage --version` or open the VirtualBox GUI to see the error
message which should contain instructions on how to fix this error.

这个的解决方法是安装kmod-VirtualBox包.

另外一个问题时文件共享(这是我最喜欢的一个功能)的问题, 启动的时候会报这个错:

1
2
3
4
5
6
7
8
9
10
11
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

这个问题是与VirtualBox Guest Additions有关, 比较好的解决方案是安装vagrant的这个插件.

scull示例

我是选择了centos这个box来进行尝试的, 原因是内核版本是2.6.32系列的, 比较接近书中的版本. 但是遗憾的是还是无法正常编译通过. 网上有很多对应的解决办法, 最简单的一个是这个. 这个是针对新的内核作出修改后的代码, 在centos这个版本上可以正常编译运行成功.

其他

如果自己想要的linux版本在vagrant上找不到该怎么办呢? 比如一个特定版本的系统. 我们可以自己来制作自己的box(方便之后重用), 对应的教程可以参考这里这里.

另外vagrant还有win系列的相关支持.

Comments