[-->笔者发给吴劲良先生的邮件]
吴兄:
我有个问题想和你深层次讨论,就是关于这本书的定位。先说说我的看法。
1)对于初学者(就是完全没有Wi-Fi、NFC、GPS经验的人),这本书肯定是入门书,但是它
的难度比普通意义上认为的入门书难。
2)对于中级学者,这些人定位在1~2年或者有过实际修改bug的经验,但是缺乏全局理解
的人,这本书也合适。不过,可能有部分内容对他们来说比较简单。另外,关于NFC和GPS的知
识,从统计情况来看,NFC和GPS的问题非常少。从面试情况来看,对NFC芯片datasheet的了解
(GPS应该是没有这方面公开的资料)也很重要。不过本书没有考虑NFC、GPS以及Wi-Fi HAL
层的内容。一方面我感觉Wi-Fi驱动层和协议结合非常紧密,有点钻研精神的读者在本书基础
上,再有一些驱动经验就可以搞定。而NFC HAL层未来发展趋势可能会和wpa_supplicant一
样,即不会出现NXP、Broadcom这样太过特定的内容。GPS一般不太可能让外人看到驱动的代
码。我专门看过QC开源项目CODEAurora[^①]中GPS的HAL代码,它是C/S架构的,只有Client端内
容,而且都是简单地发些命令,然后接收回复,没有核心技术。
3)对于高级学者,经验和理论知识都比较到位的人,本书可以当做参考书来看,不过内容
相对会显得浅显。
一方面,昨天和Eva沟通后,觉得本书没有太多实际经验,确实如此。我自己定位这本书还
是想打通整个知识面,实际经验的话,需要理论联系实践。现在很多工程师只有实践,没有理
论,或者理论关注较少。另一方面,如果专门讲实践,这种书反而价值不高,因为可操作性太
低。它不像网管类的书籍,一步一步跟着做就行了。
这是我对本书定位的一些看法,吴兄,你能否从一线工程师,培养新人等多方面讲下你的
感受?不足之处也提出来哈。
最后,写完这本书后,我感觉在Wi-Fi、NFC和GPS这几块,核心都是芯片厂商做好了,我
们唯一可做的就是改改bug,攒足实战经验,似乎可发挥的地方非常少(NFC CE模式还有很多
发挥空间,尤其是安全交付解决方案之类的)。吴兄,对这个问题又怎么看呢?
诚挚欢迎吴兄的金玉良言!
邓凡平
[-->吴劲良先生的回复]
邓兄:
正如邓兄提到,本书对不同知识深度的学者而言,会有各自的收获,可引初学者入门,可
给中级学者问题分析的线索,可给高级学者一个知识思索的机会(对比自己的理解和补充知
识),本书能起抛砖引玉的作用,不同读者从中收获多少还得看个人,多思考的读者还可以从
书中学习到邓兄分析问题的思路,反思如何提升自己的搜索技巧。
本书以理论分析为主,没有具体问题的解答,但是我觉得够了。这不是一本Q&A的书,
Wi-Fi、NFC、GPS这三大部分,Android涉及的主干支知识都有,读者可以选择性地深入分析,
每个人对知识点的追求都不一样,很难满足所有人的需求。就个人而言,我会对Android Wi-Fi
的休眠策略、Location的网络定位感兴趣,跟实际工作遇到的问题相关。
“NFC和GPS问题非常少”,这会跟功能模块是否被广泛使用和应用的广度有关,被使用多
了可能会暴露问题多些,应用场景多也会促使功能的开发,自然会引出新问题。GPS HAL的代
码各厂家都不提供,Broadcom、MTK、RDA只是提供so,有可能是涉及核心技术,估计是一些
Command的实现,GPS一般是UART接口,UART只负责上层与模组的数据通信。
对于负责无线模组的新人,我对他们工作的安排是:先做功能的验证测试,让他从测试中
加深对功能点的理解,知道哪些点是容易出问题;然后会给一些已经调试好的模组让其单独调
试,目的是熟悉调试一个模块需要做哪些工作;最后会渐渐地让其承担一些实际任务。学习的
安排是:学习NL802.11,USB、SDIO、UART和I2C等模组接口驱动的分析,然后会从内核开始学
习,如:Wi-Fi driver->netd->wpa_supplicant->HAL->framework,Android会安排一些核心知识点
的学习,主要是理清工作的机制。最终是希望新人在头脑中有一幅Android网络结构图,并能
将其画出来。
由于需要先确保相关的外围模组能配合主控使用,这也决定平常无线工作的重点会在模
组的移植调试上,涉及的内核驱动的调试较多,现在Android做得越来越完善,大问题很少,小
问题还是有,但解决起来还好(Android 4.4上Wi-Fi目前测试出原生代码有几个bug,较严重的
一个是在关闭Wi-Fi时没关闭supplicant创建的socket,每次打开Wi-Fi时又创建,socket打开个数
累积超过65536时,后续操作将失败)。
无线模块Wi-Fi、BT、NFC和GPS,核心的技术是在芯片厂,而且是在芯片设计中,driver的
编写只是其中的很小一部分,即使是相对复杂的Wi-Fi driver,投入两三个人,花两个月的时间
把driver写出来完全没问题。这个我也认同发挥的地方很少,除非是从应用角度去开发新的功
能或做一些功能创新。但从工作的角度看,要把这些无线模块支持好,也很容易,调一款新的
Wi-Fi就像在弄一个小系统,需要把系统调稳,没有bug并可以达到量产的标准,往往会耗上一
两个月的时间。虽然发挥的地方少,但当前看来这方面技术人员的需求还是挺大的。
吴劲良
[^①]:https://www.codeaurora.org/ , 此处可下载高通参考设计(QC Reference Design)的代码。
- 前言
- 第1章 准备工作
- 1.1 Android系统架构
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本书资源下载说明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函数分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener构造函数和测试工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介绍
- 2.4.1 create函数详解
- 2.4.2 systemReady函数详解
- 2.5 本章总结和参考资料说明
- 2.5.1 本章总结
- 2.5.2 参考资料说明
- 第3章 Wi-Fi基础知识
- 3.1 概述
- 3.2 无线电频谱和802.11协议的发展历程
- 3.2.1 无线电频谱知识
- 3.2.2 IEEE 802.11发展历程
- 3.3 802.11无线网络技术
- 3.3.1 OSI基本参考模型及相关基本概念
- 3.3.2 802.11知识点导读
- 3.3.3 802.11组件
- 3.3.4 802.11 Service介绍
- 3.3.5 802.11 MAC服务和帧
- 3.3.6 802.11 MAC管理实体
- 3.3.7 无线网络安全技术知识点
- 3.4 Linux Wi-Fi编程API介绍
- 3.4.1 Linux Wireless Extensions介绍
- 3.4.2 nl80211介绍
- 3.5 本章总结和参考资料说明
- 3.5.1 本章总结
- 3.5.2 参考资料说明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初识wpa_supplicant
- 4.2.1 wpa_supplicant架构
- 4.2.2 wpa_supplicant编译配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函数分析
- 4.3.2 wpa_supplicant_init函数分析
- 4.3.3 wpa_supplicant_add_iface函数分析
- 4.3.4 wpa_supplicant_init_iface函数分析
- 4.4 EAP和EAPOL模块
- 4.4.1 EAP模块分析
- 4.4.2 EAPOL模块分析
- 4.5 wpa_supplicant连接无线网络分析
- 4.5.1 ADD_NETWORK命令处理
- 4.5.2 SET_NETWORK命令处理
- 4.5.3 ENABLE_NETWORK命令处理
- 4.6 本章总结和参考资料说明
- 4.6.1 本章总结
- 4.6.2 参考资料说明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的创建及初始化
- 5.2.1 HSM和AsyncChannel介绍
- 5.2.2 WifiService构造函数分析
- 5.2.3 WifiStateMachine介绍
- 5.3 加入无线网络分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介绍
- 5.5 Captive Portal Check介绍
- 5.6 本章总结和参考资料说明
- 5.6.1 本章总结
- 5.6.2 参考资料说明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基础知识
- 6.2.1 WSC应用场景
- 6.2.2 WSC核心组件及接口
- 6.3 Registration Protocol详解
- 6.3.1 WSC IE和Attribute介绍
- 6.3.2 802.11管理帧WSC IE设置
- 6.3.3 EAP-WSC介绍
- 6.4 WSC代码分析
- 6.4.1 Settings中的WSC处理
- 6.4.2 WifiStateMachine的处理
- 6.4.3 wpa_supplicant中的WSC处理
- 6.4.4 EAP-WSC处理流程分析
- 6.5 本章总结和参考资料说明
- 6.5.1 本章总结
- 6.5.2 参考资料说明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基础知识
- 7.2.1 P2P架构
- 7.2.2 P2P Discovery技术
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介绍
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模块初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章总结和参考资料说明
- 7.5.1 本章总结
- 7.5.2 参考资料说明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基础知识
- 8.2.1 NFC概述
- 8.2.2 NFC R/W运行模式
- 8.2.3 NFC P2P运行模式
- 8.2.4 NFC CE运行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相关规范
- 8.3 Android中的NFC
- 8.3.1 NFC应用示例
- 8.3.2 NFC系统模块
- 8.4 NFC HAL层讨论
- 8.5 本章总结和参考资料说明
- 8.5.1 本章总结
- 8.5.2 参考资料说明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基础知识
- 9.2.1 卫星导航基本原理
- 9.2.2 GPS系统组成及原理
- 9.2.3 OMA-SUPL协议
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架构
- 9.3.2 LocationManager应用示例
- 9.3.3 LocationManager系统模块
- 9.4 本章总结和参考资料说明
- 9.4.1 本章总结
- 9.4.2 参考资料说明
- 附录