前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志D1-H芯片 如何移植 rtl8821cu wifi 驱动到 Linux-5.4内核?

全志D1-H芯片 如何移植 rtl8821cu wifi 驱动到 Linux-5.4内核?

作者头像
阿志小管家
发布2024-02-02 15:46:53
2030
发布2024-02-02 15:46:53
举报

问题背景 移植 Linux-4.9 或之前的内核版本下的 wifi 驱动到 Linux-5.4 内核版本时会出现编译和运行错误, 该 FAQ 主要用于帮助开发人员解决驱动移植出现的问题。

问题分析 移植到 Linux-5.4 内核版本时出现如下编译错误:

代码语言:javascript
复制
WARNING: module 8821cu uses symbol kernel_read from namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver, but does not import it.

出现该 WANRING 的原因是内核版本升级后文件系统存在差异,驱动调用了 kernel_read()和 kernel_write() 函数,需要进行 import VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver 处理。

移植到 Linux-5.4 内核版本时运行的错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLYVUueE-1646285792029)(/assets/uploads/files/1638946891720-04e7d843b1934a02af9d0335885f837c.jfif)] 出现该问题的原因是 Linux-5.3 及以后版本 cfg80211.h 里结构体 wiphy_vendor_command 新增了变量 policy 和 maxattr。

解决方案

出现编译错误时解决方案如下:

代码语言:javascript
复制
diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
index c4b515763ac8..466a3b27f521 100644
--- a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
+++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
@@ -28,6 +28,8 @@ MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
 MODULE_AUTHOR("Realtek Semiconductor Corp.");
 MODULE_VERSION(DRIVERVERSION);
+MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

出现运行错误时解决方案为遍历驱动里所有使用 wiphy_vendor_command 结构体并修改如下:

代码语言:javascript
复制
diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
index 6bac27d37766..09e24dcc9480 100644
--- a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
+++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
@@ -1756,6 +1756,11 @@ static const struct wiphy_vendor_command rtw_vendor_cmds[] = {
                },
                .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
                .doit = rtw_cfgvendor_gscan_get_capabilities
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0))
+               ,
+               .policy = VENDOR_CMD_RAW_DATA,
+               .maxattr = 1
+#endif
        },

原贴链接:https://bbs.aw-ol.com/topic/756

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com