Build ixgvevf kernel module on CentOS6.7

執行uname -a確認kernel版本,CentOS6.7如下:

2.6.32-573.el6.x86_64

下載kernel-headers與kernel-devel rpm:(從此link找尋)

kernel-devel-2.6.32-573.el6.centos.x86_64.rpm
kernel-headers-2.6.32-573.el6.centos.x86_64.rpm
在build system安裝這兩個rpm:
rpm -ivh kernel-devel-2.6.32-573.el6.centos.x86_64.rpm
rpm -ivh kernel-headers-2.6.32-573.el6.centos.x86_64.rpm
安裝之後,要執行以下指令讓make能夠找到header code:
ln -s /usr/src/kernels/2.6.32-573.el6.centos.x86_64 /usr/src/linux

gcc與make為編譯用,rpm-build為產生kernel module rpm檔用;假如你要在其他機器透過rpm安裝此driver,可build rpm出來使用:

yum install rpm-build gcc make

到Intel Download Center搜尋你要的驅動程式並下載: link。我所下載版本為3.1.2,檔案名稱為ixgbevf-3.1.2.tar.gz。

編譯

tar zxvf ixgbevf-3.1.2.tar.gz
cd ixgbevf-3.1.2/src
make
如果沒意外,會產生ixgbevf.ko;可以透過insmod ixgbevf.ko載入它。

打包

這是從driver包內README看到的方法:

rpmbuild -tb ixgbevf-3.1.2.tar.gz
在執行完指令且沒問題後,可以在以下位置找到你的東西:
/root/rpmbuild/RPMS/x84_64/ixgbevf-3.1.2-1.x86_64.rpm
如果安裝的系統與build出來的版本不合,是會有WARNING的。

一開始由於我是直接透過yum安裝kernel-headers與kernel-devel套件,在make過程中,一直出現implicit declaration error。起初懷疑和gcc版本有關,最後發現是由於yum安裝了更新版本的kernel-headers與kernel-devel。