Reference

ArchLinux AX88179 on BeagleBone Black

Last time I checked there was no built-in support for AX88179 chipsets in the ArchLinux kernel for BeagleBone Black yet. As these chips are now being used more widely in USB 3.0 adapters for gigabit ethernet, this post describes how to install the kernel driver manually.

Tags: archlinux beaglebone kernel networking

Prerequisites

In order to compile the driver, the base development package must be installed. This can be skipped if the package was already installed during the ArchLinux setup. To install the package, run:

# pacman -S base-devel

The version of the kernel header files to compile the driver against must match the version of the kernel that is currently running on the BBBs:

# uname -a
Linux mybeaglebone 3.8.13-35-ARCH #1 SMP Thu Sep 25 20:15:28 MDT 2014 armv7l GNU/Linux

This device is running 3.8.13-35.

Now verify that the correct version of the headers is available in the repository. We use am33x as a search string, because that is the BBB’s processor type.

# pacman -Ss am33x
core/linux-headers-am33x-legacy 3.8.13-35

Here, a matching version of the legacy headers is available. If the only package headers available are for versions newer than the one you are running, then you need to update your kernel first:

# pacman -Syu
# reboot

We can now install the header files and scripts for building am33x kernel modules. We will use wget to download the driver’s PKGBUILD file, so let’s install it as well:

# pacman -S linux-headers-am33x-legacy wget

Build & Install Kernel Module

Now acquire the PKGBUILD for the AX88179 driver and unpack it:

# wget https://aur.archlinux.org/packages/as/asix-ax88179-dkms/asix-ax88179-dkms.tar.gz
# tar -xvf asix-ax88179-dkms.tar.gz

By default, the ARM processor architecture is not enabled in the PKGBUILD. We have to enable it manually by adding armv7h to the existing architecture setting:

# cd asix-ax88179-dkms
# nano PKGBUILD

arch=('i686' 'x86_64' 'armv7h')

Save the file and close nano (press ‘Ctrl+X’ and ‘Y’).

Finally, the driver module can be compiled:

# makepkg -s

-s will automatically pull in any required package dependencies. You can append –asroot when compiling as the root user (not recommended).

After compilation finishes successfully, the module can be installed:

# pacman -U asix-ax88179-dkms-x.xx.x-x-armv7h.pkg.tar.xz

Test Connectivity

Plug the adapter and Ethernet cable into the BBB, then reboot the device:

# reboot

After the BBB rebooted, check the system logs for any problems:

# dmesg | grep ax88179
[    2.396519] usbcore: registered new interface driver ax88179_178a
[  122.760539] ax88179_178a 1-1:1.0: usb_probe_interface
[  122.760562] ax88179_178a 1-1:1.0: usb_probe_interface - got id
[  123.067981] ax88179_178a 1-1:1.0 (unregistered net_device): MAC [00-50-b6-0f-21-9d]
[  123.069435] ax88179_178a 1-1:1.0 (unregistered net_device): Monitor mode = 0x64
[  123.079976] ax88179_178a 1-1:1.0 (unregistered net_device): mtu 1500
[  123.082341] ax88179_178a 1-1:1.0 eth1: register 'ax88179_178a' at usb-musb-hdrc.1.auto-1, ASIX AX88179 USB 3.0 Gigabit Ethernet, 00:50:b6:0f:21:9d

Everything looks good. Now bring up the link:

# ip link set eth1 up

At this point we can set up a static IP address for the network interface, or we can do a quick connectivity test by acquiring an IP address via DHCP:

# dhcpcd eth1
# ifconfig

Verify that the network interface received a valid IP address.

Enable DHCP

To enable DHCP permanently, create a systemd configuration file for the interface:

# nano /etc/systemd/network/eth1.network

[Match]
Name=eth1

[Network]
DHCP=both

Uninstall

If you ever need to remove the package, you can do so easily via pacman:

# pacman -R asix-ax88179-dkms

Related Resources