如何在 Xubuntu 13.10 上安装 backports-3.12-8 的 ath9k 驱动程序?

如何在 Xubuntu 13.10 上安装 backports-3.12-8 的 ath9k 驱动程序?

我下载了3.12-8内核文件linux-headers-all.deb,linux-headers-generic_i368.deb;linux-image-generic_i386.deb来自 kernel.org 并通过以下方式安装:

 dpkg -i *.deb

现在,我正在尝试消除一些 wifi 信号丢失问题,这可能是由驱动程序本身引起的。显然,ath9k 驱动程序已经有一些修复,所以我想用反向移植版本替换默认版本。

我下载了backports-3.12.8-1.tar.gz来自 kernel.org 并尝试通过以下方式准备好 ath9k 模块:

cd ~/.source/backports-3.12.8-1/
sudo apt-get install build-essential
sudo apt-get build-dep linux-image-$(uname -r)
sudo ln -s /usr/src/linux-headers-$(uname -r) /usr/src/linux
make defconfig-ath9k

这让我遇到以下“缺少原型错误”:

cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o zconf.tab.o zconf.tab.c
cc   conf.o zconf.tab.o   -o conf

但当我继续:

sudo modprobe -r ath9k
sudo make
sudo checkinstall

一切正常!

我的问题是:

  • 该模块是否依赖于某些其他内核模块?

    是的,以下命令确实告诉您:

    modinfo ath9k

  • 如果是的话,关于这些东西的信息在哪里?

    请查看 wireless.kernel.org/en/users/Drivers/ath9k。

  • 是否有正确的方法来安装此内核模块和驱动程序?

    可能通过获得内核编译方面的专业人员:-)。

谢谢

答案1

对于那些可能偶然发现这个问题的人,就像我刚才一样:

这让我遇到以下“缺少原型错误”:

cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o zconf.tab.o zconf.tab.c
cc   conf.o zconf.tab.o   -o conf

这些行实际上不是错误。该make命令运行一堆其他命令,如名为的文件中所述Makefile。默认情况下,make将在运行这些命令之前将其写入终端。例如,如果Makefile说运行foo然后bar然后baz,make 将写入foo终端然后运行命令foo;然后它将写入bar终端并运行bar;然后它将写入baz终端并运行baz

在这种情况下,这些cc行是make指示运行的命令Makefile。该cc命令将运行系统默认的C 编译器,这可能是海湾合作委员会. 以开头的东西-选项,这会影响 C 编译器的行为。

对于 GCC 这样的编译器,以...开头的选项-W告诉编译器在看到技术上有效但通常不合适的代码时发出警告(例如,代码中的一些模式,许多程序员思考会以某种方式行动,但实际上会以另一种方式行动。

在这种情况下,-Wall会打开许多​​(不是全部!)GCC 的警告。-Wmissing-prototypes-Wstrict-prototypes打开额外的警告,以发现与 C 相关的问题函数原型特征。

因此,这些消息实际上告诉我们命令cc即将运行,并且(除其他事项外)如果它认为代码不可靠,它应该警告我们;特别是,如果函数原型被误用。

GCC 警告如下所示:

main.c: In function ‘main’:
main.c:1:5: warning: traditional C rejects ISO C style function definitions [-Wtraditional]
 int main(int argc, char **argv) {
     ^

由于输出中没有出现类似内容,因此没有发生任何警告或错误;甚至这些额外的-W检查已启用。

答案2

我建议安装一个较新的内核,尽管它从 2.6.30 或类似的版本开始就应该可以正常工作。我将其用作内核中的 AP 3.13.0-24-generic,尽管我知道最好安装一个新内核。我一直在使用它http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.18.12-vivid/或类似的版本(直到我的硬盘崩溃)。我可以为您提供上述内核中使用的版本的详细信息。

  1. 依赖:ath9k_hw、mac80211、ath9k_common、cfg80211、ath
  2. 我曾在某处看到过这些信息和硬件功能,但我不记得在哪里了
  3. 当然是了 :) 查找 compat-wireless

相关内容