目录
内核自带
内核配置
移植 iw工具
移植mt7601源码
内核自带
内核配置
在linux内核4.19版本中已经把mt7601的驱动加入到内核源码中。
内核需要需要开启mac802.11
使用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工具
依赖libnl-3.2.23
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.0override CFLAGS += -DCONFIG_LIBNL30 -I/home/wy/hisi/tools/libnl-3.2.23/build/include/libnl3override 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/libNLLIBNAME = libnl-3.2endifendif # NO_PKG_CONFIGifeq ($(V),1)Q=NQ=trueelseQ=@NQ=echoendifall: $(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 iwendif
连网步骤如下
1.扫描SSID
# sudo iw dev wlan0 scan找到SSID:test2.配置连接wifi
# cat /etc/wpa_supplicant.conf
network={ssid="test"psk="12345678"}
3.连接wifi设备
# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf4.查看连接转状态
# iw wlan0 link5.为wlan0获取ip地址
# sudo dhclient wlan0
移植mt7601源码
想要使用iwpriv需要移植mt7601源码,移植时有很多错误。
版本:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913
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