9

I have a new motherboard: MSI Z170A GAMING M5. This motherboard has an Atheros killer e2400 Ethernet controller. When I do lspci -nn, I get:

03.00.0 Ethernet controller [0200]: Qualcomm Atheros Device [1969:e0a1] (rev 10)

Google didn't seem to know the answer. Only a similar unsolved problem on the openSUSE forum.

5

3 Answers 3

12

I am posting this from my Skylake MSI Z170A GAMING M5 build using my Killer E2400 on Ubuntu Gnome! Below are the (more or less) simple steps I used to get it working.

First we'll follow some instructions from Ubuntu

sudo apt-get build-dep linux-image-$(uname -r)
sudo apt-get install git
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-vivid.git

That git URL is for 15.04 Vivid Vervet. You would replace vivid with your release codename. That last step can take a little while, so relax and bask in the knowledge that your E2400 will soon be working.

Once that is finished, we'll modify the alx driver to include our E2400 (feel free to use your text editor of choice)

cd ubuntu-vivid/drivers/net/ethernet/atheros/alx/
sudo -H gedit reg.h

Find the line defining ALX_DEV_ID_E2200 (you can just search for E2200), and add this below it

#define ALX_DEV_ID_E2400                0xe0a1

Next,

sudo -H gedit main.c

Again, find E2200, and after the lines { PCI_VDEVICE(ATTANSIC, ALX_DEV_ID_E2200), .driver_data = ALX_DEV_QUIRK_MSI_INTX_DISABLE_BUG }, add

{ PCI_VDEVICE(ATTANSIC, ALX_DEV_ID_E2400),
  .driver_data = ALX_DEV_QUIRK_MSI_INTX_DISABLE_BUG },

Now, all that's left is to make and install the drivers

make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
sudo modprobe -r alx
sudo depmod
sudo modprobe -v alx

Note: You after executing the last line, you should see the module load from ...extra/alx.ko If you do not, you may need to rename the alx.ko that it did find to alx.ko.bak or something of the sort, and run the last three commands again.

Your E2400 should now appear for your networking enjoyment!

8
  • We're still waiting 1 day later, so this isn't a complete answer (yet), so I voted for it to be deleted...
    – Fabby
    Sep 15, 2015 at 23:11
  • Finally got a chance to try this out. Updated my answer to include step by step instructions. Works like a charm :) Sep 16, 2015 at 2:54
  • You are a life saver. Nov 22, 2015 at 6:30
  • FYI - worked out of the box on Ubuntu Gnome 15.10 Nov 23, 2015 at 18:23
  • How could you do a sudo apt-get install when your network card is not working?
    – bioShark
    Dec 4, 2015 at 10:09
7

Update for Ubuntu 14.04 (Trusty):

According to chili555's comment on a similar question that device is supported by the kernel shipped with Ubuntu 16.04. Luckily one can upgrade to the same kernel in Ubuntu 14.04 via LTS/HWE upgrades:

  1. Install the kernel packages:

    sudo apt install linux-generic-lts-xenial
    
  2. Reboot the machine. The newly installed kernel should be the new default boot option for Grub.

More info: Ubuntu Wiki – LTS Enablement Stack


Original post (still applicable to other Ubuntu releases before 16.04)

Short of applying the appropriate patch and recompiling the affected kernel module, you may be able to register new PCI device IDs (documentation) with existing device drivers:

Writing a device ID to this file will attempt to dynamically add a new device ID to a PCI device driver. This may allow the driver to support more hardware than was included in the driver's static device ID support table at compile time. The format for the device ID is: VVVV DDDD SVVV SDDD CCCC MMMM PPPP. That is Vendor ID, Device ID, Subsystem Vendor ID, Subsystem Device ID, Class, Class Mask, and Private Driver Data. The Vendor ID and Device ID fields are required, the rest are optional. Upon successfully adding an ID, the driver will probe for the device and attempt to bind to it. For example:

# echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id

So in this case, you should be good with:

sudo modprobe alx
echo 1969 e0a1 | sudo tee /sys/bus/pci/drivers/alx/new_id >/dev/null

I guessed the driver name alx from the patch mentioned in the comments. If it's not the right driver module name, search for an alternative.

4
  • As you're (nearly) a reputation 1 user: if this answers your question, don't forget to click the grey ☑ under the "0" at the left of this text to accept it, which means "yes, this answer is valid"! Sep 15, 2015 at 12:18
  • Nice solution that doesn't involve building any drivers! Didn't even need a reset.
    – BenB
    Feb 5, 2016 at 22:27
  • Also, I had to sudo chmod 777 /sys/bus/pci/drivers/alx/new_id first. Then I had to use sudo for all of the other commands too.
    – BenB
    Feb 5, 2016 at 23:20
  • 2
    Don't change the access permissions of kernel parameters to world-writable unless you know what you're doing! Instead you should write to these files as super-user by either a) first starting a super user shell (sudo -i) and then running the above commands or b) use sudo modprobe alx && echo 1969 e0a1 | sudo tee /sys/bus/pci/drivers/alx/new_id to open the file as super-user. Feb 6, 2016 at 1:40
2

I made a DKMS version of this using source code from the 4.4 kernel

Instructions are:

sudo apt-get install git dkms build-essential linux-headers-generic
git clone https://github.com/jeremyb31/alx.git
sudo dkms add ./alx
sudo dkms build alx/2.0
sudo dkms install alx/2.0

Reboot

I have tested this in the old 3.13.0-24 kernel and it works along with 4.2 which correctly states that this is exactly the same as the module present in the kernel

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .