无线网卡驱动的安装
背景:想在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通百度
终于成功了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」