ath10k installation

653

Solution 1

Ubuntu 16.04 users with internet access (e.g. ethernet) should just have to install updates and reboot:

sudo apt-get update
sudo apt-get upgrade
sudo reboot

For those without internet, download the firmware drivers from here. Choose the latest version for your architecture. For example, version 1.157.5 (newest as of 29/11/16) for amd64 is here.

Once you have the .deb package, install as usual. For our example, it is:

sudo dpkg -i linux-firmware_1.157.5_all.deb

Reboot, and now it should be working.


It might be easier to install backports than trying to use github

sudo apt-get install build-essential linux-headers-generic
wget https://www.kernel.org/pub/linux/kernel/projects/backports/2015/03/13/backports-20150313.tar.xz
tar xvfJ backports-20150313.tar.xz
cd backports-20150313
make defconfig-ath10k
make
sudo make install

Then reboot when it is finished. Your wifi is fairly new to Linux so it might not be fully functional even with this

Solution 2

I've had a number of issues with my Acer Aspire V17 Nitro Black Edition and Ubuntu 15.10, but I managed to solve the Wi-Fi. I had to do a combination of things the answers from above, namely:

  1. Copy the QCA6174 directory from https://github.com/kvalo/ath10k-firmware into /lib/firmware/ath10k/. I already had an older version of QCA6174 in that directory, so I renamed the old folder to QCA6174.orig.
  2. Download the file from Comment 2 here: https://bugzilla.redhat.com/show_bug.cgi?id=1294263#c2 and save it as /lib/firmware/ath10k/QCA6174/hw3.0/board.bin (backing up the old board.bin as board.bin.orig)
  3. Reboot.

I'm posting this comment from my new internet connection over Wi-Fi. So far it seems to be working fine.

Solution 3

I had similar problem with my new laptop Asus Aspire V3-371-51 after installing the new Ubuntu (15.10) which has 4.2 kernel (so no backport is needed).

$ uname -r
4.2.0-16-generic

lspci showed the following data:

$ lspci
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 20)
$ lspci -n
02:00.0 0280: 168c:003e (rev 20)

Checking dmesg, I realized that in my case the firmware is missing.

[    2.360584] ath10k_pci 0000:02:00.0: Direct firmware load for ath10k/cal-pci-0000:02:00.0.bin failed with error -2
[    2.362523] ath10k_pci 0000:02:00.0: Direct firmware load for ath10k/QCA6174/hw2.1/board-pci-168c:003e:11ad:0804.bin failed with error -2
[    2.362527] ath10k_pci 0000:02:00.0: failed to load spec board file, falling back to generic: -2
[    2.362536] ath10k_pci 0000:02:00.0: Direct firmware load for ath10k/QCA6174/hw2.1/board.bin failed with error -2
[    2.362538] ath10k_pci 0000:02:00.0: failed to fetch generic board data: -2
[    2.362540] ath10k_pci 0000:02:00.0: failed to fetch board file: -2
[    2.362541] ath10k_pci 0000:02:00.0: could not fetch firmware files (-2)
[    2.362543] ath10k_pci 0000:02:00.0: could not probe fw (-2)

Copying an appropriate firmware from https://github.com/kvalo/ath10k-firmware/archive/master.zip to /lib/firmware/ath10k/QCA6174/hw2.1 did the trick - after reboot.

BTW I had to create the that path, because only QCA988X subdirectory was in /lib/firmware/ath10k before.

Solution 4

Not a complete answer (similar situation - ath10k/QCA6174 on a Fedora 22, 4.0 kernel), but more resources:

https://wireless.wiki.kernel.org/en/users/drivers/ath10k points to: https://github.com/kvalo/ath10k-firmware.

Looking at dmesg, I can get firmware-4.bin loaded (albeit untested), when place at:

/lib/firmware/ath10k/QCA6174/hw2.1

However, I also get:

Direct firmware load for ath10k/cal-pci-0000:03:00.0.bin failed with error -2
invalid firmware magic
Direct firmware load for ath10k/QCA6174/hw2.1/firmware-3.bin failed with error -2
could not fetch firmware file 'ath10k/QCA6174/hw2.1/firmware-3.bin': -2

So something still appears to be missing in this setup. Next step is to rename a long filename firmware-3.bin_xxxxxx to firmware-3.bin

PS (reload ath10k kernel module):

sudo rmmod ath10k_pci
sudo modprobe -v ath10k_pci

Then take your pick of iwconfig or NetworkManager.

So the steps to a complete installation are:

  1. Download drivers in https://github.com/kvalo/ath10k-firmware.

  2. sudo cp -r QCA6174 /lib/firmware/ath10k/

  3. cd /lib/firmware/ath10k/QCA6174/hw2.1

  4. sudo cp firmware-5.bin.SW_xxxxxx firmware-5.bin

    This step may change as driver is developed. xxxx and -5 are evolving.

  5. sudo rmmod ath10k_pci

  6. sudo modprobe -v ath10k_pci

After these steps I could connect to a WPA2 WiFi router and everything is working okay in an Acer v5 vn7-591g black nitro.

Solution 5

I was able to get my Qualcomm Atheros 61x4 running on a ubuntu 15.04 clean install. Actually not for the Lenovo model but for an Acer Aspire VN7 Nitro 791G These are the steps I accomplished:

  • install kernel sources: apt-get install linux-headers-(uname -r)
  • downloaded the athk master sources from kvalo:

    git clone https://github.com/kvalo/ath.git

  • downloaded the backports tree:

    git clone git://git.kernel.org/pub/scm/linux/kernel/git/backports/backports.git

  • built the new backport tree according to the instructions found on linux-wireless: https://wireless.wiki.kernel.org/en/users/drivers/ath10k/backports
  • downloaded the firmware from sumdog and copied it to /lib/firmware/ath10k/QCA6174/hw2.1/ :

    (Sorry I am not allowed to post more than two links)

  • wget github.com/sumdog/ath10k-firmware/raw/5faf5bb7c7413f9bbde54cca6fff58e/ath10k/QCA6174/hw2.1/board.bin

    and

    wget github.com/sumdog/ath10k-firmware/raw/5faf5bb7c7413f9bbde54cca6fff58e/ath10k/QCA6174/hw2.1/firmware-4.bin

  • created athk10 config file as described in this post before:

    sudo echo "options ath10k_core skip_otp=y" > /etc/modprobe.d/ath10k.conf
    
  • copied firmware-4.bin to firmware-5.bin as dmesg claimed about not finding firmware-5.bin
Share:
653

Related videos on Youtube

Jagdish Raika
Author by

Jagdish Raika

Updated on September 18, 2022

Comments

  • Jagdish Raika
    Jagdish Raika over 1 year

    I am working on a spring-boot multi-module application where we are creating a single custom fatty jar to bind all the third parties dependencies. The Spring cloud stream is also part of this fatty jar. Our application was running on spring-cloud-stream version 2.1.3.RELEASE (spring-boot 2.1.6.RELEASE ) and we are upgrading it to 3.0.2.RELEASE (spring-boot 2.2.4.RELEASE ). We are experiencing here an issue. If a particular module where there is no use of the spring-cloud-stream, but the spring-cloud-stream is on classpath so the spring-boot auto-configuration is looking for a default binder.

    {"mdc":{},"timestamp":"2020-03-20 12:53:04.150","level":"ERROR","logger":"org.springframework.boot.SpringApplication",
    "message":"Application run failed", "exception":"\r\norg.springframework.context.ApplicationContextException: 
    Failed to start bean 'outputBindingLifecycle'; 
    nested exception is java.lang.IllegalArgumentException: <b>A default binder has been requested, but there is no binder available</b>\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:185)\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53)\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360)\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158)\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122)\r\n\
     org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:894)\r\n\
     org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)\r\n\
     org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)\r\n\
     org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)\r\n\
     org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)\r\n\
     org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)\r\n\
     org.springframework.boot.SpringApplication.run(SpringApplication.java:315)\r\n\
     org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126)\r\n\
     org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal
     (DefaultCacheAwareContextLoaderDelegate.java:99)\r\n\
     org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)\r\n\
     org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123)\r\n\
     org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.outputConditionEvaluationReport
     (SpringBootDependencyInjectionTestExecutionListener.java:53)\r\n\
     org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance
     (SpringBootDependencyInjectionTestExecutionListener.java:46)\r\n\
     org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)\r\n\
     org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)\r\n\
     org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\r\n\
     org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\r\n\
     org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\r\n\
     org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\r\n\
     org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\r\n\
     org.springframework.test.context.junit4.s
    ements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)\r\n\
     org.springframework.test.context.junit4.s
    ements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)\r\n\
     org.junit.runners.ParentRunner.run(ParentRunner.java:363)\r\n\
     org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)\r\n\
     org.junit.runner.JUnitCore.run(JUnitCore.java:137)\r\n\
     org.junit.runner.JUnitCore.run(JUnitCore.java:115)\r\n\
     org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40)\r\n\
     java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)\r\n\
     java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)\r\n\
     java.util.Iterator.forEachRemaining(Unknown Source)\r\n\
     java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)\r\n\
     java.util.stream.AbstractPipeline.copyInto(Unknown Source)\r\n\
     java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)\r\n\
     java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)\r\n\
     java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)\r\n\
     java.util.stream.AbstractPipeline.evaluate(Unknown Source)\r\n\
     java.util.stream.ReferencePipeline.forEach(Unknown Source)\r\n\
     org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)\r\n\
     org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71)\r\n\
     org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)\r\n\
     org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)\r\n\
     org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)\r\n\
     org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)\r\n\
     org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:137)\r\n\
     org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89)\r\n\
     org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)\r\n\
     org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)\r\n\
     org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)\r\n\
     org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)\r\n\
     org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)\r\nCaused by: 
     java.lang.IllegalArgumentException: A default binder has been requested, but there is no binder 
     available\r\n\
     org.springframework.util.Assert.notEmpty(Assert.java:549)\r\n\
     org.springframework.cloud.stream.binder.DefaultBinderFactory.doGetBinder(DefaultBinderFactory.java:144)\r\n\
     org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:134)\r\n\
     org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:362)\r\n\
     org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:257)\r\n\
     org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.createAndBindOutputs(AbstractBindableProxyFactory.java:136)\r\n\
     org.springframework.cloud.stream.binding.OutputBindingLifecycle.doStartWithBindable(OutputBindingLifecycle.java:58)\r\n\
     java.util.LinkedHashMap$LinkedValues.forEach(Unknown Source)\r\n\
     org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:57)\r\n\
     org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:34)\r\n\
     org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)\r\n\t... 59 common frames omitted\r\n\r\n"}
    

    There are two approaches we can use:-

    • There is no use of spring-cloud-stream so either I can exclude spring-cloud-stream from that fatty jar so it will not look for any binder.
    • Below dependency provides a test-binder so without having the implementation of real binder we can test our application by using it.
    <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-stream-test-support</artifactId>
           <version>3.0.2.RELEASE</version>
           <scope>test</scope>
       </dependency>
    

    I would like to know if there is any other method or configurable property that I can use in the application so that I can stop looking for the default binder.

  • pybynumbers
    pybynumbers about 9 years
    Thanks, though this doesn't seem to do the trick. Card still not doing anything. lspci | grep Network gives: "07:00.0 Network controller: Qualcomm Atheros Device 003e (rev 20)". modprobe ath10k gives: "modprobe: FATAL: Module ath10k not found".
  • Jeremy31
    Jeremy31 about 9 years
    I think the module name is ath10k_pci
  • Jacklynn
    Jacklynn almost 9 years
    @diablo666 If it doesn't work, please don't "accept" the answer.
  • s.froehlich
    s.froehlich over 8 years
    I can confirm this. My QCA6147 works after copying the windows firmware to /lib/firmware/ath10k/QCA6147/hw3.0/board-2.bin and copying the firmware from ath10k-firmware to /lib/firmware/ath10k/QCA6147/hw3.0/firmware-5.bin
  • NumesSanguis
    NumesSanguis about 8 years
    Step 2 doesn't seem necessary anymore (tested on Ubuntu 16.04)
  • NumesSanguis
    NumesSanguis about 8 years
    If this doesn't work, rename QCA6174 (if previously existing) and copy the whole QCA6174 folder from the mentioned Github page (both hw2.1 and hw3.0). Then inside both folders rename firmware-x.bin_WLAN.etc to firmware-x.bin.
  • tgkprog
    tgkprog almost 8 years
    2016 June update - the wget and intall worked for me on acer aspire e 15 (E5-573G-34QR). Thank you! Had to follow this and the UEFI boot steps at askubuntu.com/a/630662/165511
  • sasha_trn
    sasha_trn almost 8 years
    It works for my Acer Aspire V 17 Nitro with Ubuntu 16.04 (kernel 4.4.0-28-generic). Thanks.
  • binaryanomaly
    binaryanomaly almost 8 years
    All I needed was a 'modprobe ath10k_pci' on 16.04 ...
  • Agustin Baez
    Agustin Baez almost 7 years
    Wow man, thanks! I can confirm that this is working on OpenSuse Leap 42.1 (kernel 4.4), in a Dell Latitude E5570 (same QCA6174 chip)