本帖最后由 おおおじ。 于 2023-1-9 14:04 编辑
前言
野火imx6ull板子已经添加了RTL8188cus的wifi驱动,但使用其他型号wifi则需添加相应的驱动,野火相关教程文档暂时没有相应教程,笔者这里在开发过程中移植了rtl8723bu的wifi驱动,移植和调试过程分享给大家,希望对大家有所帮助。
该教程不仅适用rtl8723bu型号,其他型号的也同样适用,也请看完本教程后再对比野火适配的RTL8188cus wifi驱动,两者大同小异。
一、驱动移植 虚拟机环境:ubuntu18.04 开发板:imx6ull 开发板镜像:野火debian 2022_10_08镜像
搭建编译内核环境 sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop
获取内核源码 初次编译内核(如果之前编译过可以不用重新编译)
获取驱动源码 将驱动源码移动到内核源码ebf_linux_kernel_6ull_depth1/drivers/net/wireless目录下
在ebf_linux_kernel_6ull_depth1/drivers/net/wireless/Makefile添加: obj-$(CONFIG_RTL8723BU) += rtl8723bu/
在ebf_linux_kernel_6ull_depth1/drivers/net/wireless/Kconfig添加 source "drivers/net/wireless/rtl8723bu/Kconfig"
修改驱动源码ebf_linux_kernel_6ull_depth1/drivers/net/wireless/rtl8723bu/Makefile 将CONFIG_PLATFORM_I386_PC 改为n,添加CONFIG_PLATFORM_FS_MX6ULL = y
继续在ebf_linux_kernel_6ull_depth1/drivers/net/wireless/rtl8723bu/Makefile添加平台信息:
ifeq ($(CONFIG_PLATFORM_FS_MX6ULL), y) EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT ARCH := arm CROSS_COMPILE := arm-linux-gnueabihf- KSRC ?= /home/hyw/ebf_linux_kernel_6ull_depth1/build_image/build endif
其中
EXTRA_CFLAGS:小端模式;
ARCH: arm 平台;
CROSS_COMPILE:交叉编译器;
KSRC:内核所在目录; (需按实际路径填写) (注意,ebf_linux_kernel_6ull_depth1/build_image/build ,/build_image/build是编译内核生成的目录,用来存放内核的,需要提前编译一次内核,否则没有这个内核目录,文档开头已经介绍如何初级编译内核。如需查看详情,请参考https://doc.embedfire.com/linux/imx6/driver/zh/latest/linux_driver/exper_env.html) 2.1.2.2. 进行编译 小节)
在ebf_linux_kernel_6ull_depth1/arch/arm/configs/npi_v7_defconfig将驱动编译为模块 CONFIG_RTL8723BU=m 也可以=y编译进内核,这里为了调试方便编译成模块,实际可以=y编译进内核
(或者使用图像界面选中,编译为模块,效果和直接在ebf_linux_kernel_6ull_depth1/arch/arm/configs/npi_v7_defconfig添加CONFIG_RTL8723BU=m 一样 操作了上面可以不用操作以下步骤: sudo apt install libncurses-dev make menuconfig KCONFIG_CONFIG=arch/arm/configs/npi_v7_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 然后选择右下角save进行保存)
编译驱动: #清除之前编译环境 make mrproper #编译内核模块 make ARCH=arm npi_v7_defconfig make modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
驱动生成在ebf_linux_kernel_6ull_depth1/drivers/net/wireless/rtl8723bu目录下
二、驱动加载测试 将驱动模块发送到开发板
使用命令insmod 8723bu.ko 加载驱动
三、网络连接
ifconfig -a 查看网卡
打开wifi sudo ip link set wlan0 up
搜索附近的wifi iw dev wlan0 scan | grep SSID
打开/etc/wpa_supplicant/wpa_supplicant.conf文件配置wifi相关账号密码: sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
network={ ssid="wifi账号" psk="wifi密码" priority=1 }
保存内容后退出,并使用以下命令连接wifi sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
申请动态ip udhcpc -b -i wlan0
可能存在的问题,因为笔者一开始连了网线,路由表没有新添加的rtl8723路由信息 所以要添加路由网关信息 sudo route add default gw 192.168.10.1
网络测试 ping baidu.com -I wlan0
四、开机自动加载模块 (如果是编译进内核此步骤可以省略)
先将驱动模块放到/lib/modules/4.19.35-imx6目录下
执行sudo depmod -a建立依赖
查看依赖 cat modules.depa
在/etc/modules文件中添加该模块即可实现开机自动加载
重启后输入lsmod可以查看加载情况
五、开机自动连接wifi (请先确认前面扫描过wifi并在/etc/wpa_supplicant/wpa_supplicant.conf填写正确的wifi信息) systemctl enable autowifi.service systemctl status autowifi.service
重启开发板输入ifconfig -a查看wlan0 的ip并进行测试
(如果是其他系统可能没有autowifi.service服务,请根据当前使用的系统,按前面手动连接的步骤,添加自启动脚本/服务)
六、野火适配的RTL8188cus驱动 内核源码ebf_linux_kernel_6ull_depth1/drivers/net/wireless目录下 移植方法和以上介绍的大同小异,区别是野火将驱动编译进了内核,感兴趣的朋友自行研究下。
七、附件 提供驱动源码和编译生成的.ko文件
|