小藤可以连上WiFi了!
收藏回复举报
小藤可以连上WiFi了!
发表于2023-06-02 16:01:41
0 查看

下面介绍从内核编译WiFi驱动的步骤,从而使能小藤的WiFi功能。

  1. 准备一个 x86 Ubuntu 22.04 的系统,以及一款基于USB或M.2接口的WiFi外设。

  2. 下载并解压内核源码包:

    1. 下载地址:https://www.hiascend.com/zh/hardware/firmware-drivers/community?product=1&model=23&cann=6.2.RC1.alpha001&driver=1.0.19.alpha

    2. 下载Ascend-hdk-310b-sdk-soc_23.0.rc1.1.zip,解压后获得工具链安装包toolchain.tar.gz、源码包Ascend310B-source tar.gz、制卡脚本工具包sdtool.tar.gz

    3. 解压Ascend310B-source tar.gz

      tar -xzvf Ascend310B-source.tar.gz

  3. 找到WIFI外设的芯片型号,这里以型号为RTL8192CU的USB WIFI为例,介绍驱动的编译方法。

  4. 切换到Ascend310B-source目录,执行内核编译

    cd Ascend310B-source
    bash build.sh kernel
  5. 编译过程中会弹出内核配置主界面,如下所示

    true

  6. 配置无线网络依赖。在内核配置主界面,依次选择“Networking support” -> "Wireless",按照如下配置进行勾选。 true

  7. 配置具体的设备驱动。返回内核配置主界面,依次选择“Device Drivers” -> "Network device support" -> "Wireless LAN",在这里可以看到不同设备的厂家,比如Intel、Cisco、Realtek等,在我们这个示例中,WiFi厂家是Realtek,芯片型号为RTL8192CU,于是可以按照如下配置进行勾选。 true true

  8. 保存配置,执行内核编译。在配置界面的下方选择“Save”,之后退出配置界面即可,脚本会继续执行内核编译。

  9. 找到ko驱动的正确插入顺序。编译完成后,我们可以在Ascend310B-source/output/kernel_modules看到很多ko格式的驱动文件。
    a. 找到无线网络依赖的ko,分别是cfg80211.ko和mac80211.ko,这两个是配置WiFi功能必须要装的驱动。
    b. 找到RTL8192CU相关驱动的插入顺序。执行以下命令,可以看到内核配置主界面。

    cd ./Ascend310B-source/kernel/kernel/kernel/out/linux-4.19
    make ARCH=arm64 CROSS_COMPILE=aarch64-target-linux-gnu- menuconfig

    接着在键盘按下“/”,可以看到搜索界面,输入芯片型号8192CU,如下所示: true
    我们可以看到如下搜索结果,最后一行即标明了依赖驱动的正确插入顺序,这个要记下来。
    true
    随后我们在Ascend310B-source/output/kernel_modules目录下寻找依赖的驱动文件,可以用grep命令进行过滤,比如要找名称带有rtl的ko,可以执行如下命令:

    ls | grep rtl

    通过以上步骤找到rtl8192CU依赖三个驱动,rtlwifi.ko, rtl_usb.ko, rtl8192c-common.ko,最后,还要找名称为rtl8192cu.ko的文件,这个驱动需要最后插入,即前面的驱动都是它的依赖驱动。

  10. 把所有驱动的插入命令写成脚本,方便一次性执行。新建一个文件,比如insert_rtl8192cu.sh,写入如下内容:

    insmod cfg80211.ko
    insmod mac80211.ko
    insmod rtlwifi.ko
    insmod rtl_usb.ko
    insmod rtl8192c-common.ko
    insmod rtl8192cu.ko

    执行命令chmod +x insert_rtl8192cu.sh,为脚本加上可执行权限,接着执行以下命令:

    ./insert_rtl8192cu.sh

    执行命令dmesg | tail查看日志,显示如下内容,说明WiFi驱动已加载成功。

    [ 1135.772997] usbcore: registered new interface driver rtl8192cu
  11. (可选) 有些WiFi模块可能还依赖额外的固件,这里以M.2.的8822ce为例,完成以上步骤以后,dmesg会显示如下内容:

    [ 1021.292412] rtw_8822ce 0001:09:00.0: Direct firmware load for rtw88/rtw8822c_fw.bin failed with error -2
    [ 1021.292419] rtw_8822ce 0001:09:00.0: failed to request firmware
    [ 1021.298375] rtw_8822ce 0001:09:00.0: Direct firmware load for rtw88/rtw8822c_wow_fw.bin failed with error -2
    [ 1021.298379] rtw_8822ce 0001:09:00.0: failed to request firmware
    [ 1021.298506] rtw_8822ce 0001:09:00.0: failed to load firmwar

    这里说明还依赖两个路径下的bin格式的固件:rtw88/rtw8822c_fw.binrtw88/rtw8822c_wow_fw.bin。我们可以从这个链接获取对应固件。根据dmesg的回显提示,找到并下载rtw88目录下的两个文件rtw88/rtw8822c_fw.binrtw88/rtw8822c_wow_fw.bin。执行以下命令,将固件放在指定目录。

    mkdir -p /usr/lib/firmware/rtw88/
    cp rtw88/rtw8822c_fw.bin /usr/lib/firmware/rtw88/
    cp rtw8822c_wow_fw.bin /usr/lib/firmware/rtw88/

    配置好固件后,需要重启系统才能生效。重启系统后,ko要重新插入。

  12. 验证WiFi设备是否已加载。执行nmcli device,若回显中含有TYPE为wifi的的设备,且显示disconnected,说明WiFi设备已成功加载。

    DEVICE                   TYPE      STATE         CONNECTION
    wlx08beac2cb42a          wifi      disconnected  --
    eth0                     ethernet  unmanaged     --
    eth1                     ethernet  unmanaged     --
    usb0                     ethernet  unmanaged     --
    lo                       loopback  unmanaged     --
  13. nmcli的常用命令。

    nmcli device wifi list  # 扫描附近的WiFi设备
    
    nmcli dev wifi connect network-ssid password network-password  # 将network-ssid替换为上面找到的ssid名称,network-password替换为实际的wifi密码
  14. 网络连通测试。在小藤的终端执行以下命令,测试网络是否已打通。

    ping www.baidu.com

本帖最后由 匿名用户2025/04/01 16:57:06 编辑

我要发帖子