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

1. openwrt编译与clean均会先读取buildroot根目录下的.config文件,以确认哪些软件包与选项需要编译与清除,即使你针对某个包进行编译与clean,例如:

  make package/network/services/hostapd/clean V=s

  打印信息将会出现两次进入:make[2]: Entering directory `/work/to/buildroot/package/network/services/hostapd'

2. OP编译环境buildroot中常常会出现BUILD_VARIANT变量,该变量是在软件包定义控制器菜单里面定义的:

  例如openvpn:

define Package/openvpn/Default
TITLE:=Open source VPN solution using $()
SECTION:=net
CATEGORY:=Network
URL:=http://openvpn.net
SUBMENU:=VPN
MENU:=
DEPENDS:=+kmod-tun +OPENVPN_$()_ENABLE_LZO:liblzo +OPENVPN_$()_ENABLE_IPROUTE2:ip $()
VARIANT:=$()
MAINTAINER:=Mirko Vogt <mirko@openwrt.org>
endef

  然后buildroot根据.config读取编译目标与顺序,进行编译,从而带入该变量,该量适用于一个软件工程中包含多个组件的情况。

3. 关于openwrt下hostapd依赖问题说明

  a. DEPENDS:=@PACKAGE_hostapd表示只有变量PACKAGE_hostapd被定义了,该组件(包)才会显示菜单

  b. DEPENDS:=uhttpd表示只有选择了uhttpd,该组件(包)才会显示在菜单中,被选择,并且选择状态不能高于uhttpd(例如:uhttpd为模块-M,那么该组件最多也是模块或者不选择)

  c. DEPENDS:=+liblua表示该组件(包)被选择后,其依赖liblua也会被选择。

  d. DEPENDS:=+PACKAGE_arpd:libpcap, 选择该组件(包),如果arpd被成功选择了,将自动选择libpcap

4. 最后我们来看看openwrt下hostapd源码组织结构

  buildroot编译配置树: 

hostapd
├── Config.in
├── files
├── Makefile
└── patches

Config.in提供选择额外组件与功能选项,files为hostapd的相关配置文件、启动脚本等,根据上一篇文章,op下的hostapd是由netifd管理的,所以与常规的op启动配置有点不同,Makefile为功能选择主菜单配置,patches为hostapd官方或者感言提供的补丁。

hostapd源码树:

├── Android.mk
├── build_release
├── CONTRIBUTIONS
├── COPYING
├── doc
├── eap_example
├── hostapd
├── hs20
├── ipkg-ar71xx
├── mac80211_hwsim
├── patches
├── radius_example
├── README
├── src
├── tests
├── wlantest
├── wpadebug
├── wpaspy
└── wpa_supplicant

其中,本系列主要讨论hostapd,那么该源码树相关的有(http://w1.fi/wpa_supplicant/devel/dir_22f5a0c5f1f5dd1a61a0e5968e7769c4.html):

  hostapd:hostapd主程序与控制接口主程序源码。

  src: 主要是扩展组件:

├── ap
├── common
├── crypto
├── drivers
├── eap_common
├── eapol_auth
├── eapol_supp
├── eap_peer
├── eap_server
├── l2_packet
├── lib.rules
├── Makefile
├── p2p
├── pae
├── radius
├── rsn_supp
├── tls
├── utils
└── wps

  其它相关均为测试与认证客户端相关源码,暂时可以先不关心。

hostapd阅读(openwrt)-3的更多相关文章

  1. hostapd阅读(openwrt)-2

    深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https:// ...

  2. hostapd阅读(openwrt)-1

    好久没有来博客园写点东西了,这段时间主要搞了openwrt系统的移植,无线的校验等相关工作,鉴于我是一个懒惰的大龄菜鸟程序员,就先自我原谅自己了,好了废话少说,直奔主题--hostapd. 由于我主要 ...

  3. hostapd阅读(openwrt)-4

    接下来,咱们来看看hostapd的源码目录之hostapd,今天我们先分析整体功能,然后从main.c开始注释 hostapd下代码主要作用有:配置解析,环境初始化,控制接口建立,AP接口管理模块. ...

  4. 【openwrt】再设置

    https://wiki.openwrt.org/zh-cn/doc/uci/network https://wiki.openwrt.org/zh-cn/doc/uci/wireless https ...

  5. OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎

    本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...

  6. openwrt 更改 debug 等级(hostapd)

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

  7. OpenWrt笔记

    ## 1. OpenWrt目录结构说明 作者:辛勤的摆渡人 来源:CSDN 原文:https://blog.csdn.net/hunter168_wang/article/details/507805 ...

  8. CentOS_7 OpenWrt Eclipse 环境搭建与 Dr.com 开发笔记

    一:内核的编译. 1,linux 编译环境的搭建与源码的准备工作 2,常用软件的安装 (make menuconfig) 3,  针对TP-Link WR740N 一些软件的openwrt 的移植 4 ...

  9. OpenWrt——神奇的路由系统

    鉴于最近大家对这个系统比较感兴趣而且疑问很多所以本渣就整理下我对这个系统的理解和最实用的802.1x认证的理解.还望大家多多互相交流. 如果您时间紧张直接看最后的步骤,时间充裕的请仔细阅读,理解. O ...

随机推荐

  1. vue全家桶(2.6)

    3.9.滚动行为 设置滚动行为的作用是导航到新路由时,让页面滚动到你想要的位置. const router = new VueRouter({ routes: [...], scrollBehavio ...

  2. .NET中一些关键词的意义

    const关键字用于修改字段或局部变量的声明.它指定字段或局部变量的值是常数,不能被修改.例如: const int x = 0; public const double gravitationalC ...

  3. 一个很酷炫也挺实用的JS库leader-line

    简单粗暴,直入主题,看看效果再说. 是不是这效果挺棒?这样的效果在做系统时,可以有很多的应用,可以让枯燥的页面生动起来. 具体效果,大家可以上这个搜索网站Mag[i]上面看,切身体会一下. 这是一个开 ...

  4. Netty源码学习系列之5-NioEventLoop的run方法

    前言     NioEventLoop的run方法,是netty中最核心的方法,没有之一.在该方法中,完成了对已注册的channel上来自底层操作系统的socket事件的处理(在服务端时事件包括客户端 ...

  5. 看球的巴士——线性dp

    [题目描述] 两个球队的支持者要一起坐车去看球,他们已经排成了一列.我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的.为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D.有一 ...

  6. MySQL 事务 异常 事务隔离的级别

    MySQL 事务 异常 事务隔离的级别   事务 在你操作数据库的同时,有可能其他用户还会不断地对数据进行增删改查操作.为了避免并行进行时出现混乱,就产生了"事务".事务就是要保证 ...

  7. 一文梳理Web存储,从cookie,WebStorage到IndexedDB

    前言 HTTP是无状态的协议,网络早期最大的问题之一是如何管理状态.服务器无法知道两个请求是否来自同一个浏览器.cookie应运而生,开始出现在各大网站,然而随着前端应用复杂度的提高,Cookie 也 ...

  8. python中pymysql executemany 批量插入数据

    import pymysqlimport timedb = pymysql.connect("IP","username","password&quo ...

  9. Python3笔记027 - 6.2 参数传递

    第6章 函数 6.2 参数传递 在理解形参和实参的基础上,理解位置参数.关键字参数.可变参数这三种情形,以及这三种的混合情形. 6.2.1 形式参数和实际参数 形式参数:在定义函数时,函数名后面括号中 ...

  10. java 基本语法(十四)Lambda (一)表达式

    1.Lambda表达式使用前后的对比:举例一: @Test public void test1(){ Runnable r1 = new Runnable() { @Override public v ...