如何安装virtio驱动(Linux)

最近更新时间:2019-05-31 16:29:55

1 virtio驱动

1.1 检查内核是否支持virtio驱动

1.运行命令”grep -i virtio /boot/config-$(uname -r)” 图片1.png 输出信息中没有找到 VIRTIO_BLK 及 VIRTIO_NET 的信息,表示该操作系统没有安装 virtio 相关驱动,需要安装驱动。

参数 CONFIG_VIRTIO_BLK 及 CONFIG_VIRTIO_NET 取值为 y,表示包含了 virtio 驱动,可以直接上传。

参数 CONFIG_VIRTIO_BLK 及 CONFIG_VIRTIO_NET 取值为 m时,进行步骤2。

2.执行命令”lsinitrd /boot/initramfs-$(uname -r).img | grep virtio”(CentOS、Fedora)或者”lsinitrd /boot/initrd.img-$(uname -r) | grep virtio”(Ubuntu、Debian)确认 virtio 驱动是否包含在临时文件系统。

如下图,包含了”virtio_blk.ko”、”virtio_pci.ko”和”virtio.ko”,表明系统已经保护virtio_blk驱动,可以进行上传。如果临时文件系统中没有包含 virtio 驱动,则需要修复临时文件系统。

图片2.png

1.2 修复临时文件系统

通过上边步骤检查内核是否virtio驱动,若发现内核支持virtio驱动,但是临时文件系统initramfs或者initrd中没有包含virtio驱动时,需要修复临时文件系统。方法如下:

CentOS/RedHat 5

mkinitrd -f --allow-missing \

--with=virtio_blk --preload=virtio_blk \

--with=virtio_pci --preload=virtio_pci \

--with=virtio_console --preload=virtio_console \

/boot/initrd-$(uname -r).img $(uname -r)

CentOS/Redhat 6/7

mkinitrd -f --allow-missing \

--with=virtio_blk --preload=virtio_blk \

--with=virtio_pci --preload=virtio_pci \

--with=virtio_console --preload=virtio_console \

/boot/initramfs-$(uname -r).img $(uname -r)

Debian/Ubuntu

echo -e

'nvirtio_blk\nvirtio_pci\nvirtio_console' >> \

/etc/initramfs-tools/modules mkinitramfs -o /boot/initrd.img-$(uname -r)

2 编译安装virtio驱动

如您发现当前设备其内核不支持virtio驱动,可以参考如下安装virtio驱动的例子。

此处以CentOS服务器为例子,为您示范如何编译安装virtio驱动。

2.1 下载内核安装包

1.运行命令”yum install -y ncurses-devel gcc make wget”确保在编译前安装好要使用的工具。

2.运行”uname -r”查询当前系统使用的内核版本,如示例中的2.6.32-696.18.7.el6.x86_64。

图片3.png

3.前往Linux内核列表页面

(https://mirrors.edge.kernel.org/pub/linux/kernel/?spm=a2c4g.11186623.2.10.pgVeYp)下载对应的内核版本的源码包,如实例中的2.6.32开头的内核源码包linux-2.6.32.27.tar.gz的网址为https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.gz

图片4.png

4.运行”cd /usr/src”切换目录。

5.运行”wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.gz”下载安装包

6.运行”tar -xvf linux-2.6.32.27.tar.gz”解压安装包。

7.运行”ln -s linux-2.6.32.27 linux”建立链接。

8.运行”cd /usr/src/linux”切换目录。

2.2 编译内核

1.依次运行如下命令编译内核。

make mrproper symvers_path=$(find /usr/src/ -name "Module.symvers") test -f $symvers_path && cp $symvers_path . cp /boot/config-$(uname -r) ./.config make menuconfig

2.出现如下界面时,打开virtio相关配置:

A.使用空格勾选Virtualization项。回车键进入详细列表。

微信图片_20180621172459.png

B.在详细页面确认是否勾选了KVM(Kernel-based Virtual Machine)选项。

微信图片_20180621172605.png

PS:选*配置表示编译到内核,选m配置表示编译为模块。

C.回退到主界面,上下键选择”Processor type and features”,回车进入其详细界面,此时上下键选择”Paravirtualized guest support”,回车进入其详细界面。

确认是否选择了”KVM paravirtualized clock”和”KVM Guest support”。

微信图片_20180621172700.png

D.回到主界面,上下键选择”Device Drivers”,回车进入其详细选项页,上下键选择”Block devices”,回车进入其详细选项页。确认是否选上”Virtio block driver (EXPERIMENTAL)”。

微信图片_20180621172726.png

E.回到上一级界面,也就是”Device Drivers”的详细页,上下键选择”Network device support”,回车进入其详细页,确认是否选上”Virtio network driver (EXPERIMENTAL)”。

微信图片_20180621172752.png

G.按Esc键退出内核配置界面并根据弹窗提示保存.config文件。

3.使用之前讲到的方法检查virtio相关配置是否已经正确配置。

4.(可选)若检查后发现暂未设置virtio相关配置,运行以下命令手动编辑.config文件。

make oldconfig

make prepare

make scripts

make

make install

5.运行以下命令查看 virtio 驱动的安装情况。

find /lib/modules/"$(uname -r)"/ -name "virtio." | grep -E "virtio."

grep -E "virtio.*" < /lib/modules/"$(uname -r)"/modules.builtin

PS:如果任一命令输出 virtio_blk、virtio_pci.virtio_console 等文件列表,表明您已经正确安装了 virtio 驱动。

金山云,开启您的云计算之旅

立即注册