首页 > 编程学习 > 树莓派cm4安装ax200驱动-wifi6

树莓派cm4安装ax200驱动-wifi6

发布时间:2022/5/14 19:24:08

操作过程

0. 准备

树莓派CM4-CMIO套装(目前只有这套装有PCIE接口)
AX200-WIFI6网卡
一台win10电脑用于我的主电脑用来烧写树莓派固件以及修改boot中的config.txt
一台ubuntu20电脑编译树莓派内核

1. 树莓派cm4基本操作

1.1 烧写最新固件到emmc
请看这里:树莓派CM4和CM4IO上手,https://blog.csdn.net/qq_27158179/article/details/113047158?spm=1001.2014.3001.5501

*. 树莓派默认是用32位内核启动,需要修改 boot 分区下的 config.txt[2] 文件(我的树莓派是运行EMMC上的系统,因此使用USB线连接,让其进入BOOT模式,U盘修改config.txt,最后一行添加)
arm_64bit=1 kernel=kernel8.img

1.2 ssh
树莓派和电脑连到同一个路由器
ssh登录树莓派
账号密码是:pi/raspberry

1.3 更新
sudo apt update
更新完毕后关机。
sudo shutdown -h now

2. 连接AX200

硬件连接AX200,重新让树莓派上电。
注意一般不能带电操作

pi@raspberrypi:~ $ lspci
00:00.0 PCI bridge: Broadcom Limited Device 2711 (rev 20)
01:00.0 Network controller: Intel Corporation Device 2723 (rev 1a)

3. 交叉编译生成kernel,开启intel的wifi驱动工具-iwlwifi

默认内核没有这个iwlwifi工具(intel的wifi驱动),需要重新编译内核

<3.1> 首先下载树莓派的内核

https://github.com/raspberrypi/linux
可以直接使用 git clone --depth=1 --branch rpi-5.9.y https://github.com/raspberrypi/linux 来下载 5.9 版本的内核
个人建议从 github 直接下载 zip 包,分支选择5.9.y,最新的5.10.y不知为什么总是下载失败,文件大小约200MB才是正常尺寸。

<3.2> 然后下载交叉编译工具(x86_64 编译 arm64)

https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

<3.3> 安装依赖项

sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev

<3.4> 解压操作

首先把内核源码和编译工具放到同一个给文件夹内~/raspberry

unzip linux-rpi-5.9.y.zip linux-rpi-5.9
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu gcc-linaro

<3.5>、把交叉编译工具添加到环境变量

首先 nvim ~/.bashrc
在 .bashrc 后面加上:export PATH=$PATH:~/gcc-linaro/bin
然后执行 source ~/.bashrc 刷新环境变量

<3.6>、进行编译前的处理

首先进入内核目录

cd ~/raspberry/linux-rpi-5.9

先用默认配置创建.config文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

再自定义内核

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

加入iwlwifi:
device drivers > network device support > wireless LAN > intel devices > intel wireless wifi next gen agn(iwlwifi)
device drivers > network device support > wireless LAN > intel devices > intel wireless wifi next gen agn(iwlwifi) > intel wireless wifi MVM

这两个

<3.7>、 fix bug1,如果不改这个,ax200会起不来,错误原因疑似检测温度出错,不断复位

cd ~/raspberry/linux-rpi-5.9/drivers/net/wireless/intel/iwlwifi/mvm
打开fw.c
找到并注释掉(大概第1200行): 
     /* Init RSS configuration */
//-    if (mvm->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
//-        ret = iwl_configure_rxq(mvm);
//-        if (ret) {
//-            IWL_ERR(mvm, "Failed to configure RX queues: %d\n",
//-                ret);
//-            goto error;
//-        }
//-    }
//-
  

<3.8>、启动编译过程

make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

整个编译时间可能会比较长,根据编译机器的硬件处理器数量来制定同时使用多少线程编译(-j{‌‌n},这里同时使用8个线程)。

<3.9> 使用sshfs复制编译完的内核到板子

*. pi部分-创建root账号并设置密码
sudo su
passwd    #设置root密码

修改/etc/ssh/sshd_config


PermitRootLogin prohibit-password

改为
PermitRootLogin yes

sudo reboot

重启后可以用root账号登录

*. ubuntu主机Setting up an SSHFS mount
注意我的树莓派IP是192.168.8.130

sudo apt install sshfs
sudo mkdir -p /mnt/pi-ext4
sudo mkdir -p /mnt/pi-fat32

sudo sshfs root@192.168.8.130:/ /mnt/pi-ext4
sudo sshfs root@192.168.8.130:/boot /mnt/pi-fat32

我树莓派重新安装了系统,如果用同一个IP,会出错error:   read: Connection reset by peer
开启调试sudo sshfs root@192.168.8.130:/ /mnt/pi-ext4 -o debug -o sshfs_debug
发现原因是主机更改了密钥
ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.8.130


Install the kernel modules onto the drive:
cd ~/raspberry/linux-rpi-5.9
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/pi-ext4 modules_install

Copy the kernel and DTBs onto the drive:
sudo cp arch/arm64/boot/Image /mnt/pi-fat32/kernel8.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/pi-fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/pi-fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /mnt/pi-fat32/overlays/


*. Unmount the filesystems:
sudo umount /mnt/pi-ext4
sudo umount /mnt/pi-fat32
Reboot the Pi and voila!, you're done!

4 安装驱动

AX200官方驱动在这里:https://www.intel.com/content/www/us/en/support/articles/000005511/wireless.html
AX200,复制链接

注意驱动要求内核版本大于等于5.1

mkdir wifi6-ax200
cd wifi6-ax200
wget https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi/iwlwifi-cc-46.3cfab8da.0.tgz

tar xzvf iwlwifi-cc-46.3cfab8da.0.tgz
cd iwlwifi-cc-46.3cfab8da.0/
sudo cp *.ucode /lib/firmware

sudo reboot
发现重启后的 ifconfig中wlan0已经正常了。我的CM4没有内置WIFI的,所以这里是wlan0

5. 连接WIFI,并测试

dmesg还是会有错误的,但是可以不用理会。WIFI正常使用了。 

连接wifi使用界面操作

sudo apt install iperf3
# Server 端
iperf3 -s

# Client 端
iperf3 -c SERVER_IP

主要是路由器是MT7688,百兆的。

结尾

本文在树莓派CM4上安装了WIFI6-AX200这款网卡的驱动。大部分都是根据参考资料[3]进行的,参考资料[2]的重要之处是点醒了笔者需要修改config.txt让树莓派运行在arm64,而不是32位。要64位的iwlwifi才会在dmesg中打印信息。 

 

参考1、Raspberry Pi Linux Cross-compilation Environment,https://github.com/geerlingguy/raspberry-pi-pcie-devices/tree/master/extras/cross-compile
参考2、编译树莓派 4B Linux 5.9 内核,https://shumeipai.nxez.com/2020/10/18/compile-raspberry-pi-4b-linux-5-9-kernel.html
参考3、https://www.jeffgeerling.com/blog/2020/wifi-6-gets-134-gbps-on-raspberry-pi-cm4


本文链接:https://www.ngui.cc/el/414798.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000