目录
内核自带
内核配置
在linux内核4.19版本中已经把mt7601的驱动加入到内核源码中。
内核需要需要开启mac802.11
wifi连接工具 iwlist_for_visteon-master
使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用
/opt/ko # iwpriv
lo no private ioctls.
wlan0 no private ioctls.
eth0 no private ioctls.
看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv
内核的mt7601为何不能使用iwpriv,驱动方式的变化
nl80211 与 wext 驱动方式
nl80211 内核与用户空间交互采用 netlink iw 使用
wext 内核与用户空间交互采用采用 ioctl iwxxxx 已经废弃
移植 iw工具
源码地址:https://git.sipsolutions.net/iw.git/
使用文档:https://wireless.wiki.kernel.org/en/users/Documentation/iw
依赖libnl-3.2.23
iw 的makefile的修改
ifeq ($(NO_PKG_CONFIG),)
NL3xFOUND := Y#$(shell $(PKG_CONFIG) --atleast-version=3.2 libnl-3.0 && echo Y)
ifeq ($(NL3xFOUND),Y)
# libnl 3.2 might be found as 3.2 and 3.0
override CFLAGS += -DCONFIG_LIBNL30 -I/home/wy/hisi/tools/libnl-3.2.23/build/include/libnl3
override LIBS += -L/home/wy/hisi/tools/libnl-3.2.23/build/lib -lnl-3 -lnl-cli-3 -lnl-genl-3 -lnl-idiag-3 -lnl-nf-3 -lnl-route-3 -Wl,-rpath=/home/wy/hisi/tools/libnl-3.2.23/build/lib
NLLIBNAME = libnl-3.2
endif
endif # NO_PKG_CONFIG
ifeq ($(V),1)
Q=
NQ=true
else
Q=@
NQ=echo
endif
all: $(ALL)
version.c: version.sh $(patsubst %.o,%.c,$(VERSION_OBJS)) nl80211.h iw.h Makefile \
$(wildcard .git/index .git/refs/tags)
@$(NQ) ' GEN ' $@
$(Q)./version.sh $@
nl80211-commands.inc: nl80211.h
@$(NQ) ' GEN ' $@
$(Q)sed 's%^\tNL80211_CMD_%%;t n;d;:n s%^\([^=]*\),.*%\t[NL80211_CMD_\1] = \"\L\1\",%;t;d' nl80211.h | grep -v "reserved" > $@
%.o: %.c iw.h nl80211.h nl80211-commands.inc
@$(NQ) ' CC ' $@
#$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
ifeq ($(IW_ANDROID_BUILD),)
iw: $(OBJS)
@$(NQ) ' CC ' iw
$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o iw
endif
连网步骤如下
1.扫描SSID
# sudo iw dev wlan0 scan
找到SSID:test
2.配置连接wifi
# cat /etc/wpa_supplicant.conf
network={
ssid="test"
psk="12345678"
}
3.连接wifi设备
# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
4.查看连接转状态
# iw wlan0 link
5.为wlan0获取ip地址
# sudo dhclient wlan0
移植mt7601源码
想要使用iwpriv需要移植mt7601源码,移植时有很多错误。
版本:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913
源码下载地址:https://www.mediatek.com/products/broadband-wifi/mt7601u
编译文件修改
makefile的修改
os/linux/config.mk 文件修改
错误提示
解决如下:
1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup
/* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */
static inline VOID __RTMP_OS_Init_Timer(
IN VOID *pReserved,
IN OS_NDIS_MINIPORT_TIMER * pTimer,
IN TIMER_FUNCTION function,
IN PVOID data)
{
if (!timer_pending(pTimer)) {
//init_timer(pTimer);
//pTimer->data = (unsigned long)data;
//pTimer->function = function;
timer_setup(pTimer, function, 0);
}
}
2、
3、
./os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time
编译出来的文件
DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.ko
内核配置
以下配置很重要,否则模块编译错误
- Cfg80211
Mac80211
Wext
Lib80211
以及相关的依赖
不配置有以下错误
连接时需要的文件
1、MT7601.bin
所在源码位置 : DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/mcu/bin
放置在板子上位置: /lib/firmware/mt7601u.bin
2、RT2870STA.dat
放置在板子上位置 /etc/Wireless/RT2870STA/RT2870STA.dat