Raspberry PI 2上的802.11ac网卡驱动编译

最近在树莓派2上折腾视频,用来做FPV,但是发现2.4G的控会严重干扰2.4G WIFI,在开控的时候我的台式机+外置USB网卡都频频掉线。考虑了一下,5.8G的频段虽然相对2.4G穿透能力更低,但是现阶段5.8G更干净,并且5.8G与2.4G没有倍频关系,不容易互相干扰(1.2G的图传就会干扰2.4G的控)。

于是去买了个支持双频11AC的网卡,拿到之后直接插上Pi2,果然——不认,lsusb查了下这个网卡还比较新,用的是RTL8811芯片,官网上提供了Linux下的驱动,和GitHub上的比较了一下还算比较新。仔细看了下驱动包发现里面没有RTL8811的驱动,对比Github上的源码Makefile,认定应该是用RTL8821A的驱动就可以。

首先在PC上实验一下,解压驱动包,安装脚本加上执行权限chmod +x install.sh,然后./install.sh(需要配好内核代码和编译环境),就可以了,至少这个驱动是可以用的。

进一步在树莓派上编译内核驱动,首先是要获取树莓派Linux内核源码。树莓派的Linux内核是定制的,源码发布在https://github.com/raspberrypi/linux 。从GitHub上不一定可以找到原装镜像的源码版本,如果源码版本和运行的镜像内核版本不对应,编译出来的内核模块就无法插入。为了减少不必要的麻烦,最好直接编译一份最新的内核来使用,我是直接在树莓派上做的内核编译,至少需要4个小时。为了节约时间,经常编译的话可以在PC上搭建交叉编译环境,这里就不展开说了。

准备内核编译环境和源码,当前的镜像(官方镜像:2015-09-24-raspbian-jessie.zip)中已经包含了大部分编译环境:

sudo apt-get bc #内核编译环境需求:高精度计算语言
git clone https://github.com/raspberrypi/linux.git #假设源码在/home/pi/linux
cd /lib/modules
mkdir 4.1.y #先随便建立一个目录,有可能需要sudo,酌情添加,以下不再提示cd 4.1.yln -s /home/pi/linux buildln -s /home/pi/linux source

接下来要获取现在运行内核的内核配置,make的时候就可以根据这个现成配置自动编译(不需要手工去指定各项配置,解除了一件很繁重的工作)。由于最新树莓派内核已经把configs作为一个模块编译,所以需要先加载:

sudo modprobe configscd /home/pi/linuxzcat /proc/config.gz > .config #得到内核配置文件make #开始编译内核

执行make之后,需要回答几个问题(因为老版本内核配置没有包含新版本的某些设置),这里我全部按m编译为模块,以便以后需要的时候可以modprobe加载。

编译开始之后就需要好几个小时等待内核编译完成,如果用SSH等网络方式登陆到树莓派上,很容易掉线导致编译停止,最好直接用串口或者screen等方式启动make。

在Pi2上如果想快一点可以用make -j4,使用4核编译。

内核编译完成后需要继续编译module,这一步比较快:

make modules
sudo make modules_install
sudo cp arch/arm/boot/Image /boot/kernel-4.1.y.img #将新编译的内核拷贝到/boot

接下来需要配置树莓派使用新内核启动,编辑/boot/config.txt,追加一行:

kernel=/boot/kernel-4.1.y.img

保存退出之后,用sudo reboot重启即可,启动完成之后/lib/modules下面会多一个以当前内核版本命名的目录,这个目录名字和uname -r获取的结果是一致的。

终于可以开始编译内核驱动了。由于驱动没有提供树莓派的编译选项,需要手工修改Makefile,就不再执行./install.sh脚本,而是手工调用make:

sudo apt-get install unrar
cd /home/pi #假设驱动包在/home/piunrar x 8811linux.rarcd 8811linux/driver/rtl8821AU_linux_v4.3.14_13455.20150212_BTCOEX20150128-51 #具体路径根据版本调整vim Makefile

在Makefile中确认CONFIG_RTL8821A = y存在,然后搜索CONFIG_PLATFORM_I386_PC将其设为n,并添加一行CONFIG_PLATFORM_ARM_RPI = y。

继续搜索CONFIG_PLATFORM_I386_PC的处理代码块,在其后面添加以下处理脚本:

ifeq ($(CONFIG_PLATFORM_ARM_RPI), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE :=
KVER  := $(shell uname -r)
KSRC := /lib/modules/$(KVER)/build
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
endif

保存退出,到现在准备活动终于完成,可以开始编译驱动:

make
sudo make install
sudo insmod 8821au.ko

以上是正常编译Linux内核模块的步骤,同样make的时候可以加上-j4参数。

实际上在树莓派上编译的时候有两个坑。首先是编译的时候会报错:

-Werror=date-time/macro “__DATE__” might prevent reproducible builds

解决这个错误只需要在Makefile中查找EXTRA_CFLAGS,并添加一行EXTRA_CFLAGS += -Wno-error=date-time即可。

其次,我这个版本的驱动引用了strnicmp函数,但是目前的树莓派Linux内核源码(4.1.17)并没有定义这个函数,不过定义了strncasecmp,功能是相同的。grep驱动代码找到所有的strnicmp替换为strncasecmp即可。

顺利的话insmod之后网卡会亮起来,可以用dmesg和iwconfig进行确认。

最后修改/etc/network/interfaces添加WIFI配置就可以上网了:

allow-hotplug wlan0
iface wlan0 inet dhcp

wpa-ssid <YOUR-ACCESS-POINT-SSID>
wpa-psk <YOUR-ACCESS-POINT-PASSKEY>

测试了一下5.8G的网络确实干扰少很多,但穿墙效果不行。由于FPV是在空中,较少有阻隔,问题也不大就是了。

另外研究了一下这个网卡是50mW发射功率的,比起正常图传来说小了很多,用来前期做实验折腾是不错的,后期需要增程的话可以换大功率网卡或者加装双向WIFI功放。

时间: 2024-08-05 05:55:58

Raspberry PI 2上的802.11ac网卡驱动编译的相关文章

Raspberry pi 2 wireless settings.

主要参考: 0.https://www.raspberrypi.org/forums/viewtopic.php?p=462982#p462982 1.https://www.maketecheasier.com/set-up-raspberry-pi-as-wireless-access-point/ 2.http://www.jenssegers.be/43/Realtek-RTL8188-based-access-point-on-Raspberry-Pi 3.https://www.em

【树莓派】【转】将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)

下文为转载,文章转自:http://wangye.org/blog/archives/845/,仅供本次学习实践参考. 最近又开始折腾起Raspberry Pi来了,因为某处上网需要锐捷拨号,于是我就想能不能让我的树莓派代劳,当然首先要将其改造为路由器,默认自带的网口作为WAN口,我们还缺一个网口,木有办法,只好占用一个USB口,接上一个USB网卡,网上的USB转RJ45网线口的适配器比较少,价格也不便宜,于是就考虑干脆将其改造成无线路由,也符合时下高端大气上档次的标准. 准备工作,当然要先去购

[转] Raspberry Pi 樹莓派使用場合及時機

在買了 Raspberry Pi 後,到底能拿來做什麼事情呢?有幾個想法一起分享 這裡有初學者教學的影片,非常值得一看. http://www.youtube.com/user/RaspberryPiBeginners 1. 插上擴充卡,DIY 或教學. 當然最主要用法,插上 GPIO 卡,接上麵包板,拉一些電路,控制 LED 來顯示些什麼,或是生產啤酒 (http://forum.talkonly.net/viewthread.php?tid=15049) 等等,似乎是主要的用法. 2. 放在

一个23岁大学生的Raspberry Pi开源项目

对大多数人来说,谷歌阅读器的关闭是件苦恼的事,但对大学生雅各布·库克(Jacob Cook)而言,却是个一展抱负的机会.他自主开发了一个名为" ARKOS"的操作系统,声称可以取代谷歌或者其他云公司提供的所有服务,包括运行电子邮件.聊天.文件共享.虚拟主机等基本服务,它通过一个信用卡大小的私人服务器来实现. ARKOS是一个基于Linux的服务器操作系统,可在小巧的Raspberry Pi硬件上运行(将来有望在BeagleBoard开发板甚至全尺寸PC上运行).如图所示,Raspber

用树莓派Raspberry Pi和Micro:bit做一个自拍器

在这个项目中,我们将使用Python来构建一个由Micro:bit触发树莓派Raspberry Pi和相机模块的自拍器.这是开始使用硬件和简单文本编程的好方法. 我们将学习: 如何设置Raspberry Pi相机 如何在Micro:bit和Raspberry Pi上使用输入和输出引脚 用Python代码控制GPIO引脚 用Python代码控制相机模块 材料: 带有SD卡和常规外围设备的Raspberry Pi Raspberry Pi camera module Micro:bit USB A

网卡驱动设计---架构分析加回环网卡驱动设计(网卡驱动上)

网卡驱动架构分析: 1. Linux网络子系统 2. 重要数据结构 总结一下三个重要的数据结构: 2.1. net_device 2.2. net_device_ops 2.3. sk_buff 3. 网卡驱动架构分析 CS8900.c //早期2410使用的网卡芯片 3.1. 网卡初始化 首先找到驱动程序的入口: 早期的驱动入口并不是module_init()函数,而是init_module,所以找到这个函数 int __init init_module(void) { struct net_

Linux 网卡驱动的安装

一.网卡驱动安装的一般思路 1.首先从硬 件安装,检查网卡本身故障 2.检查网卡芯片型号(注意不是硬件品牌) 常见的网卡芯片有Intel RC82545EM/Realtek 8139D/ Broadcom NetXtreme/3Com 3C940/SIS900/VIA VT6105L 通过命令查看本机:lspci 3.查看系统是否包含对应型号的网卡驱动 目录:/lib/modules/release/kernel/drivrs/net 4.检查网卡驱动是否加载 lsmod命令查看当前系统加载的模

raspberry pi 上使用 MQ-7一氧化碳传感器模块

MQ-7一氧化碳传感器模块介绍 简要说明: 一. 尺寸:32mm X22mm X27mm   长X宽X高 二. 主要芯片:LM393.MQ-7气体传感器 三. 工作电压:直流5伏 四. 特点: 1.具有信号输出指示. 2.双路信号输出(模拟量输出及TTL电平输出) 3.TTL输出有效信号为低电平.(当输出低电平时信号灯亮,可直接接单片机) 4.模拟量输出0~5V电压,浓度越高电压越高. 5.对一氧化碳具有很高的灵敏度和良好的选择性. 6.具有长期的使用寿命和可靠的稳定性 五.应用: 用于家庭.环

在树莓派2代B型/3代 上安装Fedora23 - Installing Fedora 23 on Raspberry Pi 2 model B or Raspberry Pi 3

本文主要用于记录安装过程,以便日后查阅回顾. 之前在自己的树莓派上运行的一直是通过NOOB安装的Raspbian,但是本人平时更喜欢用Fedora作为开发和使用环境,而且Raspbian上的软件包通常更新比较缓慢.因为树莓派2代B型上市前,树莓派的芯片都是armv6或者更早的架构,只能运行ARM架构的Raspbian或者Fedora 18及更早版本.树莓派2代B型搭载的芯片架构是armv7,树莓派3代搭载的芯片架构是armv8,这两种芯片都能够运行ARM架构的Fedora 23,而仅运行Rasp