Linux驱动-网络设备-移植 RTL8723DU(wifi)驱动
2026/9/24 8:47:21 网站建设 项目流程

提示:Linux驱动-网络设备-移植 RTL8723DU(wifi)驱动

文章目录

  • 前言
  • 一、参考资料
  • 二、编译WIFI驱动
    • WIFI驱动包
  • 三、配置wifi驱动
    • 修改 Makefile 文件
    • make 命令进行编译
      • 编译指令
        • make
        • ARCH=arm64
        • CROSS_COMPILE=/home/topeet/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
        • -C /home/topeet/rk356x_linux/kernel
        • M=/home/topeet/rk356x_linux/kernel/drivers/net/wireless/rtl8723DU_WiFi_linux_v5.13.4.2-4
        • modules
  • 四、验证移植驱动是否成功-检查网卡
  • 总结

前言

Linux驱动-网络设备-移植 RTL8723DU(wifi)驱动

这里举例如何移植WIFI驱动。 思路:

  • 对于绝大多数 WIFI驱动和RJ485 网线驱动一样,要么原厂BSP工程师 已经写好了、要么第三方公司WIFI芯片芯片公司已经写好了,你只需要移植到系统里面去就可以了。
  • 对于硬件连接:这个偏向于硬件工程师的工作,就是芯片如何焊接到主板上偏向于硬件工程师的工作,需要了解下
  • 那么如何移植,基本操作要会,不管哪一款WIFI芯片,移植工作大同小异。

一、参考资料

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

linux 移植rtl8723du蓝牙驱动

二、编译WIFI驱动

WIFI驱动包

如如下这样,wifi 芯片供应商会提供类似的驱动包

将 wifi 厂家提供的驱动资料包拷贝到 Linux 源码的 kernel/drivers/net/wireless 目录下, 然后解压缩,

三、配置wifi驱动

修改 Makefile 文件

CONFIG_MULTIDRV=nCONFIG_RTL8188E=nCONFIG_RTL8812A=nCONFIG_RTL8821A=nCONFIG_RTL8192E=nCONFIG_RTL8723B=nCONFIG_RTL8814A=nCONFIG_RTL8723C=nCONFIG_RTL8188F=nCONFIG_RTL8188GTV=nCONFIG_RTL8822B=nCONFIG_RTL8723D=y//因为适配的模块是 RTL8723du, 所以此选项为 yCONFIG_RTL8821C=nCONFIG_RTL8710B=nCONFIG_RTL8192F=nCONFIG_RTL8822C=nCONFIG_RTL8814B=nCONFIG_RTL8723F=n #########################Interface###########################CONFIG_USB_HCI=y//模块为 usb 接口 设置为 yCONFIG_PCI_HCI=nCONFIG_SDIO_HCI=nCONFIG_GSPI_HCI=nCONFIG_PLATFORM_I386_PC=n//此选项修改为 nCONFIG_PLATFORM_ANDROID_X86=nCONFIG_PLATFORM_ANDROID_INTEL_X86=nCONFIG_PLATFORM_JB_X86=nCONFIG_PLATFORM_ARM_S3C2K4=nCONFIG_PLATFORM_ARM_PXA2XX=nCONFIG_PLATFORM_ARM_S3C6K4=nCONFIG_PLATFORM_MIPS_RMI=nCONFIG_PLATFORM_RTD2880B=nCONFIG_PLATFORM_MIPS_AR9132=nCONFIG_PLATFORM_RTK_DMP=nCONFIG_PLATFORM_MIPS_PLM=nCONFIG_PLATFORM_MSTAR389=nCONFIG_PLATFORM_MT53XX=nCONFIG_PLATFORM_ARM_MX58_241H=nCONFIG_PLATFORM_FS_MX61=nCONFIG_PLATFORM_ACTIONS_ATJ227X=nCONFIG_PLATFORM_TEGRA3_CARDHU=nCONFIG_PLATFORM_TEGRA4_DALMORE=nCONFIG_PLATFORM_ARM_TCC8900=nCONFIG_PLATFORM_ARM_TCC8920=nCONFIG_PLATFORM_ARM_TCC8920_JB42=nCONFIG_PLATFORM_ARM_TCC8930_JB42=nCONFIG_PLATFORM_ARM_RK2818=nCONFIG_PLATFORM_ARM_RK3066=nCONFIG_PLATFORM_ARM_RK3568=y//新增此选项设置为 y//将下面的 3188 改成 3568CONFIG_PLATFORM_ARM_RK3188=nifeq($(CONFIG_PLATFORM_ARM_RK3568),y)EXTRA_CFLAGS+=-DCONFIG_LITTLE_ENDIAN-DCONFIG_PLATFORM_ANDROID-DCONFIG_PLATFORM_ROCKCHIPS#defaultsettingforAndroid4.1,4.2,4.3,4.4EXTRA_CFLAGS+=-DCONFIG_IOCTL_CFG80211-DRTW_USE_CFG80211_STA_EVENTEXTRA_CFLAGS+=-DCONFIG_CONCURRENT_MODE#defaultsettingforPowercontrol #EXTRA_CFLAGS+=-DRTW_ENABLE_WIFI_CONTROL_FUNCifeq($(CONFIG_SDIO_HCI),y)EXTRA_CFLAGS+=-DRTW_SUPPORT_PLATFORM_SHUTDOWNendif #defaultsettingforSpecialfunctionARCH:=arm64//修改为 arm64CROSS_COMPILE:=/home/topeet/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linuxgnu/bin/aarch64-linux-gnuKSRC:=/home/topeet/rk356x_linux/kernelMODULE_NAME:=wlan//模块名称endif

make 命令进行编译

编译指令

makeARCH=arm64 \CROSS_COMPILE=/home/topeet/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-\-C/home/topeet/rk356x_linux/kernel \M=/home/topeet/rk356x_linux/kernel/drivers/net/wireless/rtl8723DU_WiFi_linux_v5.13.4.2-4\ modules

make

调用编译构建工具。

ARCH=arm64
  • 作用:指定目标 CPU 架构为 ARM64。
  • 为什么需要:因为您的 Ubuntu 是 x86_64,而 RK356x 开发板是 ARM64,编译驱动必须告诉系统目标架构,才能加载正确的内核头文件和编译规则。
CROSS_COMPILE=/home/topeet/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
  • 作用:指定交叉编译工具链的前缀。
  • 为什么需要:编译 ARM64 代码不能用 Ubuntu 自带的 gcc(那是给 x86 用的),必须用专门的交叉编译器。这个路径指向了工具链的 bin 目录,前缀是 aarch64-linux-gnu-,Makefile 会自动拼接成 aarch64-linux-gnu-gcc、aarch64-linux-gnu-ld 等。
-C /home/topeet/rk356x_linux/kernel
  • 作用:告诉 make 先切换到 /home/topeet/rk356x_linux/kernel 这个目录。
  • 为什么需要:驱动编译需要依赖内核的顶层 Makefile、.config 配置和头文件,所以必须进入内核源码目录去读取这些信息。
M=/home/topeet/rk356x_linux/kernel/drivers/net/wireless/rtl8723DU_WiFi_linux_v5.13.4.2-4
  • 作用:指定外部模块(驱动源码)的路径。
  • 为什么需要:M= 是 Linux 内核编译外部模块的标准写法,告诉内核构建系统:“我要编译的驱动代码不在内核源码树里,而是在 M= 指向的这个目录下”。
modules
  • 作用:指定编译目标为 内核模块。
  • 结果:编译完成后,会在驱动目录下生成 .ko 文件(例如 8723du.ko),这就是可以 insmod 加载到开发板内核里的驱动模块。

编译完成之后生成 wlan.ko 驱动模块

四、验证移植驱动是否成功-检查网卡

将编译好的 wlan.ko 拷贝到开发板上, 加载 wlan.ko

加载完成之后, 生成 wlan 的 wifi 网卡

至此, 移植 RTL8723DU(wifi 驱动) 实验完成!

总结

  • 这里讲解了 移植WIFI驱动 基础必备知识,遇到实际问题可以参考
  • 细节也蛮多的,但是基础知识务必掌握
  • 实际工作中,如何编译到内核可以查阅资料,这里知识编译成.ko文件 然后验证移植是否成功而已。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询