[xhr4412][abandon] 移植 mt6620 到 xhr4412

文章目录

  • 零、@ _ @
  • 一、前言
  • 二、随手笔记
    • 2.1 Files
    • 2.2 Makefile & Kconfig
  • 三、编译报错
    • 1. IEEE80211_BAND_5GHZ
    • 2. flush_delayed_work_sync
    • 3. struct cfg80211_ops
    • 4. cfg80211_scan_done
    • 5. struct net_device_ops
    • 6. WIPHY_FLAG_CUSTOM_REGULATORY
    • 7. alloc_netdev_mq
  • 记录
    • 1. 编译单个模块
    • 2. Makefile 打印变量值
  • 参考

零、@ _ @

   被迫放弃,联x科官方驱动只看到了 linux-3.0 左右的版本,移植到 linux-5.8.5 难度太大。只是简单替换一下 API 还好,不过过程中发现似乎有些结构体成员也不同了,没有 know-how ,并不清楚这些 API 是否用得正确,就算编译通过可能也没有办法使用,先通过其他方式来使用 WiFi 。

一、前言

   之前的练习就是为了移植 mt6620 ,想让开发板使用 wifi ,就可以只使用电源线开始开发了。

   不过讯为官方和联x科官方并没有基于高版本内核的 mt6620 驱动,只有自己动手移植了,可能是第一人吧,也不知道是否可以成功。

二、随手笔记

2.1 Files

cd xhr4412-linux-5.8.5
mkdir drivers/misc/mt6620
cd drivers/misc/mt6620
export MT6620PATH=$PWD
cd $MTK_OF_DRV  # 联x科官方驱动路径
cp -rp New/kernel/drivers/net/wireless/combo_mt66xx/mt6620/wlan/ $MT6620PATH/
cp -rp New/kernel/drivers/misc/mediatek/combo_mt66xx/* $MT6620PATH/

2.2 Makefile & Kconfig

2.2.1 vim driver/misc/Makefile

obj-$(CONFIG_MTK_WIRELESS_SOLUTION)	+= mt6620

2.2.2 vim driver/misc/Kconfig

source "drivers/misc/mt6620/Kconfig"

2.2.2 vim driver/misc/mt6620/Kconfig

在这里插入代码片

三、编译报错

1. IEEE80211_BAND_5GHZ

../drivers/misc/mt6620/wlan/os/linux/gl_init.c:743:27: error: incompatible types when initializing type ‘enum nl80211_band’ using type ‘struct ieee80211_channel *743 |     .band               = IEEE80211_BAND_5GHZ,      \

   使用 NL80211_BAND_5GHZ 替换 IEEE80211_BAND_5GHZ

2. flush_delayed_work_sync

../drivers/misc/mt6620/wlan/os/linux/gl_init.c:3083:5: error: implicit declaration of function ‘flush_delayed_work_sync’; did you mean ‘flush_delayed_work’? [-Werror=implicit-function-declaration]
 3083 |     flush_delayed_work_sync(&workq);
      |     ^~~~~~~~~~~~~~~~~~~~~~~
      |     flush_delayed_work

   看了一下 include/linux/workqueue.h 里的定义,没有 flush_delayed_work_sync() API 了,可能 flush_delayed_work() 可以替代它,就换成这个 API 。

3. struct cfg80211_ops

  1. change_virtual_intf,删除 u32 *flags,
  2. get_station,添加 const
  3. scan,删除 struct net_device *ndev,
  4. remain_on_channel,删除 enum nl80211_channel_type channel_type,struct net_device *ndev, 改为 struct wireless_dev *wdev,
  5. cancel_remain_on_channel,struct net_device *ndev, 改为 struct wireless_dev *wdev,
  6. mgmt_tx
  7. mgmt_tx_cancel_wait
  8. testmode_cmd,添加 struct wireless_dev *wdev,

4. cfg80211_scan_done

../drivers/misc/mt6620/wlan/os/linux/include/gl_typedef.h:84:33: warning: passing argument 2 of ‘cfg80211_scan_done’ makes pointer from integer without a cast [-Wint-conversion]
   84 |     #define TRUE                ((BOOL) 1)
      |                                 ^~~~~~~~~~
      |                                 |
      |                                 unsigned char

   看起来该 API 变化叫大。

猜测改成这样也许可以:

struct cfg80211_scan_info scan_info;
scan_info.aborted = TRUE;
cfg80211_scan_done(prScanRequest, &scan_info);

5. struct net_device_ops

  1. ndo_select_queue,添加 struct net_device *sb_dev

6. WIPHY_FLAG_CUSTOM_REGULATORY

更换为 WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK,感觉是,bit 位一致,不过命名好像变换很大,不知道是否正确。

7. alloc_netdev_mq

../drivers/misc/mt6620/wlan/os/linux/gl_init.c: In function ‘wlanNetCreate’:
../drivers/misc/mt6620/wlan/os/linux/gl_init.c:2161:113: error: macro "alloc_netdev_mq" requires 5 arguments, but only 4 given
 2161 |     prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), NIC_INF_NAME, ether_setup, CFG_MAX_TXQ_NUM);
      |                                                                                                                 ^
In file included from ../drivers/misc/mt6620/wlan/os/linux/include/gl_os.h:534,
                 from ../drivers/misc/mt6620/wlan/os/linux/gl_init.c:644:
../include/linux/netdevice.h:4280: note: macro "alloc_netdev_mq" defined here
 4280 | #define alloc_netdev_mq(sizeof_priv, name, name_assign_type, setup, count) \

现在应该多加一个参数 NET_NAME_UNKNOWN

记录

1. 编译单个模块

make  SUBDIRS=drivers/misc/mt6620/wlan  modules

2. Makefile 打印变量值

$(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量

$(warning   ST40_IMPORTS is $(ST40_IMPORTS)) 
   变量名,一定要加括号。不加的话,可以发现前面都无法输出变量的值。

1、输出打印信息的方法是:$(warning xxxxx),$(error xxxxx)
2、输出打印变量值的方法是:$(warning  $(XXX))

在makefile中打印警告或者错误消息的方法:$(warning
xxxxx)或者$(error xxxxx) 
输出变量方式为:$(warning  $(XXX)) 

参考

  • WiFi简介 - WIFI学习总结
  • 【经验分享】迅为iTOP4412开发板上移植SDIO接口WIFI方法
  • Makefile编译时怎么打印出变量值
  • linux kernel怎么编译单独某个模块
  • 如何查看kernel社区的变更历史

你可能感兴趣的:(wifi,makefile,kernel)