IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    e1000e NIC Driver change in Linux Kernel

    Terry发表于 2015-11-18 01:00:37
    love 0

    Story

    Intel PRO/1000 PCIe Network Driver in kernel source tree hasn’t been touched for quite some time, it’s been 2.3.2-k from 3.10 all the way up to 4.1.

    Not until Linux 4.2 was bumped up to 3.2.5-k.

    I didn’t realized the change until after installing linux-image-generic-lts-wily HWE kernel (based on 4.2) on my Linux Workstation (running Ubuntu 14.04 LTS with ksplice – up and running for 127 days…).

    After rebooting, as usual I checked for new e1000e versions and found new 3.2.7.1 VS 3.2.4.2. No waste of time, download the source and build a new kernel module.

    While building, I checked modinfo e1000e and was surprised to find that the in kernel driver version has been bumped up to 3.2.5-k, even newer than the previously used 3.2.4.2. Interesting!

    I had a look at the Linux 4.3 source code, finding that e1000e driver version was again bumped up to version 3.2.6-k.

    Well, still falling behind the latest e1000e stable release on SourceForge.

    One interesting fact found when browsing through the source code, kernel built-in driver has a -k suffix defined as DRV_EXTRAVERSION. I reckon it’s just to distinguish kernel built-in driver from self-compiled kernel modules (or 3rd party driver update packages).

    #include "e1000.h"
    
    #define DRV_EXTRAVERSION "-k"
    
    #define DRV_VERSION "3.2.6" DRV_EXTRAVERSION
    char e1000e_driver_name[] = "e1000e";
    const char e1000e_driver_version[] = DRV_VERSION;

    Build and load e1000e on a running system

    It’s pretty straightforward: Download the source tarball, extract it, change directory to src/ and run make install, remove current loaded e1000e module, reload the newly built module, assign the interface IP(s), done. Just bear in mind that the statistics will be reset, I don’t care ;-D

    tar axvf e1000e-<ver>.tar.gz
    
    cd e1000e-<ver>/src && make install
    
    rmmod e1000e
    
    modprobe e1000e
    
    # or modprobe followed by the full path of the newly built e1000e kernel module
    
    modprobe /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

    NOTE: On Ubuntu you’ll need the toolchain (build-essential and probably more, figure it out yourself) and kernel header for the running kernel.

    BTW: e1000e 3.3.1 was released on the day after I wrote this article, damn, build again!

    Related posts:

    1. Ksplice supports HWE kernel on Ubuntu LTS
    2. Playing with kpatch on Ubuntu
    3. Oracle Linux and Unbreakable Enterprise Kernel



沪ICP备19023445号-2号
友情链接