当前位置: 首页 > news >正文

嵌入式Linux学习_rk3588移植无线网卡驱动

记录移植无线网卡驱动遇到的各种问题:
从官网上下载8821的驱动源码
在这里插入图片描述
复制一份上面的CONFIG_PLATFORM_ARM_RK2818,改成3588,然后选项改成y,并把autodetect关掉。
找到CONFIG_PLATFORM_ARM_RK2818,复制一份,改成RK3588,然后把交叉编译工具链、内核目录改好
在这里插入图片描述
make编译成.ko内核模块

出现问题
在这里插入图片描述
问了AI回复如下,仔细看了一下网卡驱动的README,发现它是提供monitor的版本,于是我重新下了一个普通版的
在这里插入图片描述
普通版的链接如下:
https://github.com/brektrou/rtl8821CU
这里边依然有一些问题:

下面这俩函数过时了,没有在一个命名空间内,在当前目录通过如下命令,可以定位到哪个源文件使用了这个函数,最终找到是osdep_service.c。

grep -r "kernel_read" .

只需要在该源文件加上,下面的声明,明确告诉内核:“我这个驱动程序需要访问文件系统内部命名空间中的符号”。这样,modpost 阶段就不会再报错了

MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

在这里插入图片描述

make,编译出.ko文件,拷贝到板端
板端实验,在加载ko前,不管插不插网卡,都是四个节点。
在这里插入图片描述
加载网卡驱动,在用ifconfig看,依然是四个,需要找出问题。
在这里插入图片描述
查看内核日志,可以看到,驱动加载正常,但是usb网卡被识别成usb设备了
在这里插入图片描述
在这里插入图片描述
使用命令进行模式切换
在这里插入图片描述

 sudo usb_modeswitch -KW -v 0bda -p 1a2b

在这里插入图片描述
然后再lsusb,可以看到它的id变成了0bda:c820,和内核源码进行比对,如果有的话,就是对的。
且后面也写了NIC(Network Interface Card),已经识别成功。
在这里插入图片描述
再次ifconfig,已经多了一个节点。
在这里插入图片描述
测试:如果要给新的节点分配ip,记得要绕开同一网段,因为如果是同一个网段,手动设置的 IP 地址与系统中已有的默认路由规则可能会产生冲突,导致ssh失效。

sudo ifconfig enx0826ae302ae0 down
sudo ifconfig enx0826ae302ae0 192.168.1.100 netmask 255.255.255.0
sudo route add -net 192.168.1.0 netmask 255.255.255.0 dev enx0826ae302ae0

但是实际测试不能这么做,按照以下步骤进行:
第一步1.检查物理状态和驱动:
首先,确认系统已经识别了你的无线网卡。

lsusb | grep -i network 

如下图所示,虽然没有network字样,但是有NIC,证明系统已经识别了无线网卡:
在这里插入图片描述

第二步:扫描附近的Wi-Fi网络,这是测试无线网卡射频功能是否正常的关键。需要使用 iwlist 或 nmcli 工具。
(找到自己的节点名,我一开始用ifconfig看以为是enx0826ea…,结果是上一次这是旧的、无效的接口名,看状态为"down"可以知道。输出如下,已经找到网络,证明无线网卡使用正常。)

# 先确保接口已UP
sudo ip link set enx0826ae302ae0 up
# 扫描
sudo iwlist enx0826ae302ae0 scan | grep ESSID

在这里插入图片描述
第三步:连接网络。

# 查看可用的Wi-Fi列表(更友好的方式)
nmcli device wifi list# 连接到你的Wi-Fi网络(将 MyWiFi 和 your_password 替换成你的实际名称和密码)
nmcli device wifi connect "MyWiFi" password "your_password" 

用第一条命令命名能发现wifi,但是用第二条连接的时候却说没有找到ssid。需找到问题。看一下是不是被软屏蔽了。

# 检查无线接口的射频状态(是否被软屏蔽)
sudo rfkill list# 如果显示软屏蔽(soft blocked: yes),请解除屏蔽
sudo rfkill unblock wifi

可以看到确实是被软屏蔽了。
在这里插入图片描述
解决办法:

# 解除所有无线接口的软屏蔽
sudo rfkill unblock all
#再次检查
sudo rfkill list

所有的都变成no了
在这里插入图片描述
重新启用无线网口:

#重新启用无线网口:
sudo ip link set enxbcfd0c4f2669 up
#重新扫描:
nmcli device wifi list

在这里插入图片描述
在这里插入图片描述

新问题:找得到wifi,但是连不上。解决:重启wifi,重新up网卡sudo ip link set enxbcfd0c4f2669 up
在这里插入图片描述
又有一个问题:
在这里插入图片描述
尝试解决
从内核日志可以看出,驱动 rtl8821cu 成功识别了USB网卡,它最初创建了一个名为 wlan1 的标准无线网络接口。但是,系统随后强制将这个接口的名称从 wlan1 重命名(renamed) 为了 enxbcfd0c4f2669。
这是由 systemd 的 predictable network interface names(可预测的网络接口名称) 策略导致的。该系统策略旨在根据固件、拓扑和MAC地址为接口分配稳定的名称,以防止接口名(如 wlan0, wlan1)在每次启动时发生变化。它给无线设备命名的规则就是 wlx<MAC地址>,而有线设备是 enx<MAC地址>。

问题的核心是: 这个策略错误地将您的无线网卡识别并命名为了一个有线网卡的格式 (enx…),这导致 iw 等工具无法正确识别它为无线设备。
解决方案:禁用这个“可预测”的命名规则
我们需要告诉系统:“不要给这个特定的网卡重命名,就用驱动创建的名字(wlan1)”。

方法:创建链接文件(推荐,永久有效)
这是最正规的解决方法。我们创建一个 udev 规则来覆盖系统的默认重命名行为。

找出您网卡的MAC地址。从名称 enxbcfd0c4f2669 可以看出,它就是 bcfd0c4f2669(即 BC:FD:0C:4F:26:69)。
创建udev规则
sudo vim /etc/udev/rules.d/70-disable-rename-usb-wifi.rules
在文件中输入SUBSYSTEM==“net”, ACTION==“add”, ATTR{address}==“bcfd0c4f2669”, NAME=“wlan1”。
然后再输入下面命令。实测无效

sudo udevadm control --reload-rules
sudo udevadm trigger

在这里插入图片描述
是不是网络安全协议的原因呢?今天是第二天,该问题仍未解决。


文章转载自:

http://oSVi2iSh.nzhzt.cn
http://0n4PTUMb.nzhzt.cn
http://ENlcEEQA.nzhzt.cn
http://QB3osc0U.nzhzt.cn
http://zEcvNRcv.nzhzt.cn
http://dXSM5snm.nzhzt.cn
http://3sLXb4o9.nzhzt.cn
http://4zP4cH4H.nzhzt.cn
http://MUMB9lej.nzhzt.cn
http://rbQfSwnv.nzhzt.cn
http://qdnsii5S.nzhzt.cn
http://PwPdA6gZ.nzhzt.cn
http://NWI7L1DJ.nzhzt.cn
http://WUVtclQu.nzhzt.cn
http://mJ5H8saY.nzhzt.cn
http://IfjUhUil.nzhzt.cn
http://Ur9biKtn.nzhzt.cn
http://ax9zZS5R.nzhzt.cn
http://RasE4Vp7.nzhzt.cn
http://Z9hD79GC.nzhzt.cn
http://ZOEOf4HE.nzhzt.cn
http://WJKs5eyS.nzhzt.cn
http://99KFHsWf.nzhzt.cn
http://uc199Nf5.nzhzt.cn
http://Mbe1K2Qo.nzhzt.cn
http://e0bCjzmw.nzhzt.cn
http://3PseHSQ2.nzhzt.cn
http://bOVvdgGX.nzhzt.cn
http://v3iSK0jL.nzhzt.cn
http://2I3iLHdX.nzhzt.cn
http://www.dtcms.com/a/380793.html

相关文章:

  • 【Spring】原理解析:Spring Boot 自动配置进阶探索与优化策略
  • Rust : 关于Deref
  • domain_auto_trans,source_domain,untrusted_app
  • prometheus安装部署与alertmanager邮箱告警
  • 【数据可视化-112】使用PyEcharts绘制TreeMap(矩形树图)完全指南及电商销售数据TreeMap绘制实战
  • rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
  • Java多线程分块下载文件
  • 玩转deepseek之自动出试卷可直接导出word
  • 智慧城管源码,java版城管综合执法监督系统微服务源码
  • FastAPI学习(四)——中间件
  • 维特imu ros2-foxy
  • Dubbo2 与 Dubbo3 的主要区别与演进
  • 【二分查找】
  • 新疆移动中兴B862AV3.1-M2_晨星mso9385_uwe5621ds_优盘免拆卡刷固件包
  • C++:map容器
  • Java内存模型与线程私有共享区域与直接内存的理解
  • MCP专题五、MCP 的未来趋势与展望
  • SIFT特征匹配实战:KNN算法实现指纹认证
  • ETL 不只是数据搬运工:如何实现智能转换与清洗?
  • UDP套接字的使用
  • 【Vue2手录11】Vue脚手架(@vue_cli)详解(环境搭建+项目开发示例)
  • Vue 使用docx-preview,渲染word后,继续其他操作(word中内容相关)的实现
  • [优选算法专题二——NO.16最小覆盖子串]
  • Nginx生产级优化配置全解析和配置原因解析
  • 14自由度汽车动力学模型
  • FS950R08A6P2B 双通道汽车级IGBT模块Infineon英飞凌 电子元器件核心解析
  • 交换机协议栈FRR中使用
  • C++ 二叉搜索树的详解与实现
  • 记录:离线部署
  • python逆向-逆向pyinstaller打包的exe程序反编译获取源代码