对于hostapd和wpa_supplicant 的调试时,希望显示更多的调试信息。

未改动代码时,可以将hostapd 进程拉起时所跟的参数加上"-dd"。

即使这样,也不能满足我们对详细log信息的需要,查看代码,wpa_printf打印信息没有输出,更改如下:

make中增加
#add by hbg, 2017-12-27
CONFIG_DEBUG_SYSLOG=y
在/lib/netifd/hostapd.sh中运行wpa_supplicant时加入参数"-s"可以增加打印信息(对应代码中的wpa_msg)
eg:
Wed Dec 27 11:14:14 2017 daemon.notice wpa_supplicant[4472]: wlan0: Associated with 78:00:00:00:00:ad
Wed Dec 27 11:14:14 2017 daemon.notice wpa_supplicant[4472]: wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Wed Dec 27 11:14:14 2017 daemon.notice wpa_supplicant[4472]: wlan0: WPA: Key negotiation completed with 78:00:00:00:00:ad [PTK=CCMP GTK=CCMP]
Wed Dec 27 11:14:14 2017 daemon.notice wpa_supplicant[4472]: wlan0: CTRL-EVENT-CONNECTED - Connection to 78:00:00:00:00:ad completed [id=0 id_str=]
修改文件/src/utils/wpa_debug.c
static int wpa_debug_syslog = 1;
使得记录log日志开关打开。
在/lib/netifd/wireless/mac80211.sh中运行hostapd时加入参数"-dd"可以增加打印信息(对应代码中的wpa_msg)
Tue Dec 26 10:07:55 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED 78:c2:c0:e0:00:06

一直以为wpa_printf没有起效,其实已经起效了,修改完后:
当_wpa_print中修改成这样子时
#ifdef CONFIG_DEBUG_SYSLOG
        if (wpa_debug_syslog) {
            syslog(syslog_priority(level),"%s", fmt);
            //vsyslog(syslog_priority(level), fmt, ap);
        } else {
#endif /* CONFIG_DEBUG_SYSLOG */
串口中调试信息如下:

Mon Dec 25 15:53:52 2017 daemon.err hostapd: Configuration file: %s
Mon Dec 25 15:53:52 2017 kern.info kernel: [ 4439.320000] device wlan0 entered promiscuous mode
Mon Dec 25 15:53:52 2017 daemon.notice hostapd: %s: interface state %s->%s
Mon Dec 25 15:53:52 2017 daemon.err hostapd: Using interface %s with hwaddr %02x:%02x:%02x:%02x:%02x:%02x and ssid "%s"
Mon Dec 25 15:53:53 2017 kern.info kernel: [ 4440.010000] br-net: port 3(wlan0) entered forwarding state
Mon Dec 25 15:53:53 2017 kern.info kernel: [ 4440.020000] br-net: port 3(wlan0) entered forwarding state
Mon Dec 25 15:53:53 2017 daemon.notice hostapd: %s: interface state %s->%s
Mon Dec 25 15:53:53 2017 daemon.notice hostapd: %s%s
Mon Dec 25 15:53:53 2017 daemon.notice netifd: Network device 'wlan0' link is up
Mon Dec 25 15:53:54 2017 daemon.notice hostapd: %s

未修改 wpa_printf时打印如下:

Mon Dec 25 15:45:26 2017 daemon.err hostapd: Configuration file: /var/run/hostapd-phy0.conf
Mon Dec 25 15:45:26 2017 daemon.notice hostapd: wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
Mon Dec 25 15:45:26 2017 kern.info kernel: [ 3933.670000] device wlan0 entered promiscuous mode
Mon Dec 25 15:45:26 2017 daemon.err hostapd: Using interface wlan0 with hwaddr 78:00:00:00:00:ad and ssid "mytvws_hbg"
Mon Dec 25 15:45:27 2017 kern.info kernel: [ 3934.490000] br-net: port 3(wlan0) entered forwarding state
Mon Dec 25 15:45:27 2017 kern.info kernel: [ 3934.490000] br-net: port 3(wlan0) entered forwarding state
Mon Dec 25 15:45:27 2017 daemon.notice hostapd: wlan0: interface state COUNTRY_UPDATE->ENABLED
Mon Dec 25 15:45:27 2017 daemon.notice hostapd: wlan0: AP-ENABLED
Mon Dec 25 15:45:27 2017 daemon.notice netifd: Network device 'wlan0' link is up

说明 wpa_printf功能已经生效,可以输出更多的调试信息。

但是还有一个问题,就是只能打印出MSG_INFO,MSG_WARNING,MSG_ERROR三个等级的调试信息。

enum {
    MSG_EXCESSIVE,  // 0

MSG_MSGDUMP,    // 1

MSG_DEBUG,        // 2

MSG_INFO,            // 3

MSG_WARNING,     // 4

MSG_ERROR         // 5
};
 由相关的enum可以看出,低等级的未能打印出来。

再继续查看源代码:

#define wpa_printf(level, ...)                        \
    do {                                \
        if (level >= CONFIG_MSG_MIN_PRIORITY)            \
            _wpa_printf(level, __VA_ARGS__);        \
    } while(0)

红色部分也必须满足才可以,而一直错误得认为CONFIG_MSG_MIN_PRIORITY 值为0

在同一个文件中(/src/utils/wpa_debug.c)开始处有如下宏定义:
#ifndef CONFIG_MSG_MIN_PRIORITY
#define CONFIG_MSG_MIN_PRIORITY 0

#endif

其实在其他地方中已经对其另外定义了值。

在hostapd的Makefile中定义如下:

STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)

TARGET_CPPFLAGS := \
    -I$(STAGING_DIR)/usr/include/libnl-tiny \
    -I$(PKG_BUILD_DIR)/src/crypto \
    $(TARGET_CPPFLAGS) \
    -DCONFIG_LIBNL20 \
    -D_GNU_SOURCE \
    $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
可见与 CONFIG_WPA_MSG_MIN_PRIORITY变量有关。
继续搜索词变量:

可见与 CONFIG_WPA_MSG_MIN_PRIORITY变量有关。
继续搜索词变量:
hbg@root:~$ grep "CONFIG_WPA_MSG_MIN_PRIORITY" -r *
package/network/services/hostapd/Makefile:STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
package/network/services/hostapd/Makefile:      $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
tmp/.config.old:CONFIG_WPA_MSG_MIN_PRIORITY=3
tmp/.config:CONFIG_WPA_MSG_MIN_PRIORITY=3
可见CONFIG_MSG_MIN_PRIORITY变量的值也是3,因此就解释了为什么只能打印出MSG_INFO,MSG_WARNING,MSG_ERROR三个等级的调试信息。
因此还需要修改./config中的等级
CONFIG_WPA_MSG_MIN_PRIORITY=2

才能打印出更多的调试信息。

关于hostapd的调试的更多相关文章

  1. openwrt 更改 debug 等级(hostapd)

    https://wiki.openwrt.org/doc/devel/debugging 调试hostapd,其中hostapd的调试等级如下: # Levels (minimum value for ...

  2. hostapd源代码分析(一):网络接口和BSS的初始化

    [转]hostapd源代码分析(一):网络接口和BSS的初始化 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004349 最近在做一 ...

  3. [转载]Android开发常用调试技术记录

    ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/ ...

  4. zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210

    //zz//####################################################################### zz-rtl8188eu的linux-usb ...

  5. hostapd阅读(openwrt)-3

    从官网下载相对而言比较干净的源码版本http://w1.fi/hostapd/,然后将其移植到openwrt下,方便在源码阅读时候进行调试编译,移植的过程总结如下心得. 1. openwrt编译与cl ...

  6. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  7. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  8. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  9. 写出易调试的SQL(修订版)

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

随机推荐

  1. 细说java之编码

    JAVA编程中涉及的编码 1.J2EE中涉及的编码(1) HttpServletResponse响应内容编码: resp.setCharacterEncoding(charset); (2)JSP文件 ...

  2. Mac 建PHP 环境 及 配置 apache 默认目录

    网上找的帮助,试一下,记录在此: 在Mac下配置php开发环境:Apache+php+MySql  https://www.imooc.com/article/15705?block_id=tuiji ...

  3. SQL Server进阶(十一)存储过程

    存储过程和函数的区别 存储过程是第一次编译之后就会被存储的下来的预编译对象,之后无论何时调用它都会去执行已经编译好的代码.而函数每次执行都需要编译一次.总结下来有下面几个区别: 基本不同: 函数必须有 ...

  4. Div Height设置高度后不能自适应

    解决方法$("#div1").css("height", "");

  5. C# 获取程序运行时路径

    Ø  前言 开发中,很多时候都需要获取程序运行时路径,比如:反射.文件操作等..NET Framework 已经封装了这些功能,可以很方便的使用. C# 中有很多类都可以获取程序运行时路径,我们没必要 ...

  6. 二十六、Linux 进程与信号---system 函数 和进程状态切换

    26.1 system 函数 26.1.1 函数说明 system(执行shell 命令)相关函数 fork,execve,waitpid,popen #include <stdlib.h> ...

  7. Tomcat7基于redis的session共享

    一,项目需求 因开发人员在登录后台时需要反复认证,tomcat反复切换,所以给运维组提出需求,解决session共享问题. 二,解决方法 环境:基于Centos6.8 Jdk 版本   java ve ...

  8. nnet3中的数据类型

    目标与背景 之前的nnet1和nnet2基于Component对象,是一个组件的堆栈.每个组件对应一个神经网络层,为简便起见,将一个仿射变换后接一个非线性表示为一层网络,因此每层网络有两个组件.这些旧 ...

  9. mybatis批量更新报错

    批量更新sql <update id="updateAutoAppraiseInfo" parameterType="Object"> <fo ...

  10. Gui图形化界面

    .py 脚本 .pyc 导入临时文件 .pyw 图形化的Python文件 Python 常用的几种图形化 1.pywin: python基于Windows的图形化,可以实现键盘钩子之类的使用功能 2. ...