mtk 无线配置文件生效过程

openwrt 下无线接口的配置文件位于 /etc/config/wirless 中。 启动 /sbin/wifi 脚本后,生效过程如下: (1)通过 uci2dat 工具生成所需要的 .dat文件 (例如: mt7603e.dat ) 一般存放在 /etc/wireless/mt7603e 目录下。 (2)每当接口down 或 up 时,会调用所需的 .dat 文件来进行接口属性的配置。 其中定义了结构体 typedef struct __RT_CMD_INF_UP_DOWN { IN int (*rt28xx_open)(VOID *net_dev); IN int (*rt28xx_close)(VOID *net_dev); } RT_CMD_INF_UP_DOWN; 在虚拟接口 up 或者 down 时来进行实例化。 __inline INT VIRTUAL_IF_UP(VOID *pAd) { RT_CMD_INF_UP_DOWN InfConf = { rt28xx_open, rt28xx_close }; if (RTMP_COM_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_VIRTUAL_INF_UP, 0, &InfConf, 0) != NDIS_STATUS_SUCCESS) return -1; return 0; } __inline VOID VIRTUAL_IF_DOWN(VOID *pAd) { RT_CMD_INF_UP_DOWN InfConf = { rt28xx_open, rt28xx_close }; RTMP_COM_IoctlHandle(pAd, NULL, CMD_RTPRIV_IOCTL_VIRTUAL_INF_DOWN, 0, &InfConf, 0); return; } 然后查看 rt28xx_open 函数, 对芯片和其他初始化时 /* Chip & other init */ if (rt28xx_init(pAd, mac, hostname) == FALSE) goto err; 包含了对 AP模式、 Client模式 以及 通常情况下的配置。 /* Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default*/ if (rtmp_cfg_init(pAd, pHostName) != TRUE) goto err5; 这些配置过程中就包含了读取dat数据的钩子函数: RTMPPreReadParametersHook(pAd); status = RTMPReadParametersHook(pAd); if (status != NDIS_STATUS_SUCCESS) { DBGPRINT_ERR(("RTMPReadParametersHook failed, Status[=0x%08x]\n",status)); return FALSE; } 在钩子(回调)函数RTMPReadParametersHook中真正实现读取配置文件的是函数 src = get_dev_profile(pAd); 只有读取到配置文件内容后,才能进行其他的操作,在钩子函数中。 (3)读取配置文件 static UCHAR *get_dev_profile(RTMP_ADAPTER *pAd) { UCHAR *src = NULL; { #ifdef CONFIG_AP_SUPPORT // AP 模式下 IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { src = AP_PROFILE_PATH; } #endif /* CONFIG_AP_SUPPORT */ } return src; } AP_PROFILE_PATH 的宏定义如下: #ifdef CONFIG_AP_SUPPORT #ifdef RTMP_MAC_PCI #if defined(CONFIG_SUPPORT_OPENWRT) #define AP_PROFILE_PATH "/etc/wireless/mt7603e/mt7603e.dat" #else #define AP_PROFILE_PATH "/etc/Wireless/RT2860AP/RT2860AP.dat" #endif #define AP_RTMP_FIRMWARE_FILE_NAME "/etc/Wireless/RT2860AP/RT2860AP.bin" #endif #endif
posted @ 2017-03-21 16:55  hbg-rohens  阅读(1941)  评论(0编辑  收藏  举报