全志科技
直播中

corkia

4年用户 657经验值
擅长:嵌入式技术
私信 关注
[经验]

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

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

问题分析
移植到 Linux-5.4 内核版本时出现如下编译错误:
  1. 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 内核版本时运行的错误:
04e7d843b1934a02af9d0335885f837c.jpg
出现该问题的原因是 Linux-5.3 及以后版本 cfg80211.h 里结构体 wiphy_vendor_command 新增了变量 policy 和 maxattr。

解决方案

出现编译错误时解决方案如下:
  1. diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
  2. index c4b515763ac8..466a3b27f521 100644
  3. --- a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
  4. +++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c
  5. [url=home.php?mod=space&uid=1999721]@@[/url] -28,6 +28,8 @@ MODULE_LICENSE("GPL");
  6. MODULE_DESCRIPtiON("Realtek Wireless Lan Driver");
  7. MODULE_AUTHOR("Realtek Semiconductor Corp.");
  8. MODULE_VERSION(DRIVERVERSION);
  9. +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

出现运行错误时解决方案为遍历驱动里所有使用 wiphy_vendor_command 结构体并修改如下:
  1. diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
  2. index 6bac27d37766..09e24dcc9480 100644
  3. --- a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
  4. +++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c
  5. @@ -1756,6 +1756,11 @@ static const struct wiphy_vendor_command rtw_vendor_cmds[] = {
  6.                 },
  7.                 .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
  8.                 .doit = rtw_cfgvendor_gscan_get_capabilities
  9. +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0))
  10. +               ,
  11. +               .policy = VENDOR_CMD_RAW_DATA,
  12. +               .maxattr = 1
  13. +#endif
  14.         },

> 原贴链接:https://bbs.aw-ol.com/topic/756/
> 全志在线开发者交流企鹅群(客服机器人24小时在线解答):498263967
> 资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
> 全志及开发者最新动态可以关注全志在线微信公众号

更多回帖

发帖
×
20
完善资料,
赚取积分