无线网卡驱动的安装

1 发现问题

背景:想在TL62x上安装无线网卡驱动,但是不管是创龙官方提供的无线驱动,还是自己购买的EW-7822UAn,都会出现以下问题:

root@AM62x-Tronlong:/EW-7822UAn_Linux_Driver_4.0.9/rtl8188C_8192C_usb_linux_v4.0.9_20171222# sudo make
make ARCH=aarch64 CROSS_COMPILE= -C /lib/modules/5.10.168-rt83-g3d1626c9284a/build M=/EW-7822UAn_Linux_Driver_4.0.9/rtl8188C_8192C_usb_linux_v4.0.9_20171222 modules
make[1]: *** /lib/modules/5.10.168-rt83-g3d1626c9284a/build: No such file or directory. Stop.
make: *** [Makefile:730: modules] Error 2

这个错误是内核头文件(kernel headers)缺失或路径不正确。内核头文件是构建内核模块所必需的文件。错误信息表明/lib/modules/5.10.168-rt83-g3d1626c9284a/build目录不存在。通常,这个目录是一个符号链接,指向内核头文件所在的位置。

但是发现,实际上,是存在这个目录的,如下:

 这里的黑底红字表示这个符号链接存在问题,例如目标路径不存在或者无效。

为了进一步确定,可以查看该符号链接执行的目标路径:

 实际上,在相关的路径中存放了一些内核源文件:

 但是和我的内核版本5.10.168-rt83-q3d1626c9284a不匹配。这应该就是问题所在。

 2 失败尝试一

1. 准备内核头文件

在创龙官方提供的资料中,发现了相关的内核头文件:

 于是将这个内核头文件复制到TL62x的嵌入式开发板上,并解压

tar -xf linux-5.10.168-v1.2-g3d1626c.tar.gz

解压后进入目录,执行以下命令

make mrproper

cp /boot/config-$(uname -r) .config

发现报错:

 后来发现压根没有这个配置文件

因此需要手动下载对应内核版本的配置文件,可以从内核源码包获取

cd /usr/src/linux-5.10.168

zcat /proc/config.gz > .config

 然后继续在该目录中准备好内核头文件

 2. 创建正确的符号链接

如果成功安装了匹配版本的内核头文件,确保 build 符号链接指向正确的位置:

cd /lib/modules/5.10.168-rt83-g3d1626c9284a/

rm build
ln -s /usr/src/linux-5.10.168 build

然后我们就可以发现,现在的build不是黑底红字了

3. 继续安装无线网卡驱动

root@AM62x-Tronlong:/EW-7822UAn_Linux_Driver_4.0.9/rtl8188C_8192C_usb_linux_v4.0.9_20171222# sudo make
make ARCH=aarch64 CROSS_COMPILE= -C /lib/modules/5.10.168-rt83-g3d1626c9284a/build M=/EW-7822UAn_Linux_Driver_4.0.9/rtl8188C_8192C_usb_linux_v4.0.9_20171222 modules
make[1]: Entering directory '/usr/src/linux-5.10.168'
Makefile:694: arch/aarch64/Makefile: No such file or directory
make[1]: *** No rule to make target 'arch/aarch64/Makefile'. Stop.
make[1]: Leaving directory '/usr/src/linux-5.10.168'
make: *** [Makefile:730: modules] Error 2
然后出现了新的问题,发现我的内核头文件中没有arch/aarch64/Makefile文件

后来发现,虽然没有aarch64,但是有arm64,在Linux内核源代码中,这两者应该是相同的

 因此,修改make命令如下:

sudo make ARCH=arm64

 发现报了新的错误。。

这个错误是因为内核版本的变化可能导致一些API的变化。例如,timer_list结构的成员变量已经被修改或移除。需要更新驱动代码以适应新的API。在新的内核版本中,timer_list结构的使用方式有所改变。具体来说,data成员已经被移除,init_timer函数也已经被替换为其他方法。

因此尝试修改驱动的源码:

将源码:

 

修改为:

发现还是无法解决问题。。。。

 3 尝试2

这次还是尝试回使用创龙官方提供的无线驱动【必联 BL-R8188EU2】

1. 编译驱动

将驱动解压后,需要自己编写配置文件

 然后进入driver目录,对Makefile的配置文件进行针对性修改:

 发现这里的配置文件并没有我们使用的TL62x,所以我们自己增加有关的配置选项,以下步骤参考博客:

https://blog.csdn.net/zhang_danf/article/details/19195931

https://www.ebaina.com/articles/140000016781

(1)首先将原来的平台配置选项关掉,然后添加自己的设置TL62X

 (2)添加对COFIG_PLATFORM_TL62X的判断和配置

 (3)在当前Makefile的目录输入make && make install,出现报错

make ARCH=arm CROSS_COMPILE= -C /lib/modules/5.10.168-rt83-g3d1626c9284a/build M=/run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003 modules
make[1]: Entering directory '/usr/src/linux-5.10.168'
CC [M] /run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/core/rtw_cmd.o
gcc: error: unrecognized argument in option ‘-mabi=apcs-gnu’
gcc: note: valid arguments to ‘-mabi=’ are: ilp32 lp64
gcc: error: unrecognized command line option ‘-mapcs’
gcc: error: unrecognized command line option ‘-mno-sched-prolog’
gcc: error: unrecognized command line option ‘-msoft-float’
make[2]: *** [scripts/Makefile.build:286: /run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/core/rtw_cmd.o] Error 1
make[1]: *** [Makefile:1822: /run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003] Error 2
make[1]: Leaving directory '/usr/src/linux-5.10.168'
make: *** [Makefile:2644: modules] Error 2

 这个错误是说明编译

器遇到了几个未识别的命令行选项。错误信息表明 gcc 编译器无法识别一些特定于 ARM 架构的选项,如 -mabi=apcs-gnu-mapcs-mno-sched-prolog-msoft-float

这些选项通常用于 ARM 32 位架构,而你的系统是 ARM 64 位架构 (aarch64)。——>驱动程序的 Makefile 或编译配置文件中包含了不适合系统的编译选项。

要解决这个问题,需要检查并修改驱动程序的 Makefile 或编译配置文件,确保它们使用适用于 aarch64 的编译选项。

(4)修改MakeFile

然后输入编译命令:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /lib/modules/5.10.168-rt83-g3d1626c9284a/build M=/run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003 modules

 但是出现警告:表明 Module.symvers 文件缺失。这个文件包含符号版本信息,用于检查模块之间的依赖关系和符号版本。如果缺少该文件,可能会导致内核模块之间的符号解析问题。也缺少 vmlinux 的符号信息,因此无法进行未解析符号的检查。这意味着模块在插入内核时可能会出现问题,尤其是如果模块依赖于内核中的某些符号。

 (5)解决问题

参考博客:https://www.jianshu.com/p/05450481c10e

 发现缺少ncurses库,因此下载有关库

sudo apt-get install libncurses5-dev libncursesw5-dev

然后再

make menuconfig

我们直接退出

然后继续make

 很久很久之后,终于编译完了

继续make modules

这次虽然也需要一会儿,但就三四十分钟的样子

可以看到,在当前目录下生成了需要的文件

然后将需要的文件拷贝到无线网卡驱动源代码要编译的目录

 重新编译驱动

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /lib/modules/5.10.168-rt83-g3d1626c9284a/build M=/run/media/mmcblk1p1/RTL8188EUS_linux_v5.15.11-0-g96e5f190c.20231003/driver/rtl8188EUS_linux_v5.15.11-0-g96e5f190c.20231003 modules

 可以发现这次没有警告,但是依旧没有生成.ko文件

参考百度回答:https://zhidao.baidu.com/question/509591434.html

怀疑商家给的资料压根没有给出 指定编译模块的命令,即没有obj-m += 8188eu.o的命令,于是再次修改Makefile文件

在文件最开头加上

并将生成文件的目录改为当前目录

修改完成后,再次执行编译命令

 终于看起来像是在编译了!

编译完成后,发现当前目录终于生成了8188eu.ko

 然后用以下命令加载驱动:
modprobe rtlwifi

modprobe rtl8192c-common

modprobe rtl_usb

modprobe cfg80211

insmod 8188eu.ko

注意要在8188eu.ko的目录下!

利用以下命令,可发现8188eu驱动已启动

我们利用ifconfig命令,可以发现有了相关的无线网络

然后参考博客:https://www.cnblogs.com/smallwxw/p/17917164.html

我们使用 nmtui-connect 图形化联网

 进入有关图形化界面

 使用键盘的 上下左右 键选择要连接的 WiFi 按下 回车 键,页面提示输入 WiFi 密码,输完后选择 OK 并按 回车 键则会弹出页面,选择 Quit 按 回车 键退出,页面会显示 * 标变动代表联网完成。

 我们可发现已有ip

 并且可以成功ping通百度

 终于成功了!

 

 

posted @   碳酸钾K2CO3  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示