android pn551模块分析笔记

android pn551模块分析笔记

pn551的底层是I2C模块,这里采用断点+函数调用的自底向上的分析方式

模块架构

hal_->phNxpNciHal_->phTmlNfc_*,其中phNxpNciHal内部维护了一个队列

从i2c读取数据

phTmlNfc_TmlThread->phTmlNfc_i2c_Thread。猜测phTmlNfc_TmlThread应该是某个线程的入口函数
,果然,在同文件下phTmlNfc_startThread通过pthread_create创建了上述线程。在phTmlNfc_startThread中先后创建了读写线程

nfc_nci.c

nfc_open打开或者创建nfc设备实例,内部注册hal_*函数,将nfc_open注册到HAL_MODULE_INFO_SYM中

command and response

phNxpNciHal_process_ext_cmd_rsp:

send ext command -- start timer -- wait for response -- stop timer

下断点技巧

rbreak对文件内容下断点。在NFC没有完全启动前,phDnldNfc_*函数会被调用。启动后不再调用

自顶向上分析

对hardware层的write函数下断点,跟进,发现其进入pn551的nci模块。

打开设备

在dev目录下并没有找到hal层的代码中的pn54x,仅有一个pn551。这让我一度怀疑人生。发现内核中注册的设备为pn551,感觉代码hal层的表述出现了偏差。于是:

关闭NFC前对phNxpNciHal_open下断点,重启nfc,中断到phNxpNciHal_open。待函数执行过GetNxpStrValue后,执行p nfc_dev_node 显示 /dev/pn551。这和代码中的pn54x不同。

真想只有一个,nfc驱动也只有一个,那就是pn551!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,684评论 25 709
  • 李改婷老师 见字如面,问声好。时间往回拉一年,差不多此时,我还在背大学语文和视听语言这几门功课。画的重点,散...
    五月过后阅读 1,761评论 0 0
  • 请你允许我还是戏称你为L君,L君是何许人也,是昨日楼里人人夸赞的年级学霸,是学校呼风唤雨的二道杠,是所有小区孩子仇...
    栖楸阅读 3,723评论 10 7
  • 我有几样爱好,藏茶陈酒打油。 茶杂诗野字俗,或者窖藏够喉。
    大可化之阅读 1,521评论 1 3