NFC on Linux (PDF)
Transcript of NFC on Linux (PDF)
![Page 1: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/1.jpg)
NFC on Linux
Samuel OrtizIntel Open Source Technology Center
November 5th, 2012
![Page 2: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/2.jpg)
2
Agenda
● NFC basics● NFC open source stacks● The Linux NFC stack● One example
![Page 3: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/3.jpg)
3
NFC basics
![Page 4: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/4.jpg)
4
Near Field Communication
● A short range ( < 5cm) wireless technology.
● Low throughput (< 500 kbps).
● Low cost.
● Not Bluetooth, not RFID.
● Partly standardized by the NFC Forum.
● “Tap-to-share” NDEFs.
● NFC tags and NFC devices.
![Page 5: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/5.jpg)
5
Three NFC modes
● Reader● One device reads a tag.
● Peer to peer● Two devices talk to each others
● Card emulation● One device pretends to be a tag
![Page 6: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/6.jpg)
6
Use cases
● Very wide...
● Data exchange.● Playlists, URLs, business cards...
● Connection Handover.● Simplified Bluetooth pairing
● Payments, loyalty cards.
● Ticketing.
● Security, access control.● Key-less rental cars
![Page 7: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/7.jpg)
7
NFC Open Source Stacks
![Page 8: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/8.jpg)
8
● The Android bounty. ● Android as the single
supported platform.● No kernel support for NFC.● No standard Linux
distribution support.
![Page 9: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/9.jpg)
9
Two stacks, same issues
● Two Android stacks.– libnfc-nxp, opennfc.
● 100% userspace, ad hoc kernel interface.● Exclusive HW support.
– NXP pn544, INSIDE microread: HCI only. ● No community, no source code repositories.● Exclusive support, no visibility.
– Google, INSIDE.
![Page 10: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/10.jpg)
10
Other stacks
● nfcpy● Nice implementation, 100% python.● Sony sponsored.● No HCI or NCI support.
● libnfc● Academic project, LGPL licensed.● Only USB and UART devices supported.● Missing features.● SVN repository, community.
![Page 11: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/11.jpg)
11
The Linux NFC stack
![Page 12: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/12.jpg)
12
Yet another stack ?
● HW independence.● NFC for non Android platforms.● POSIX NFC APIs.● Kernel/User space split.● Consistent behavior and APIs.● Open development process.
![Page 13: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/13.jpg)
13
The Linux NFC stack
● The official NFC Linux kernel stack.● Maintained by Intel.● Hosted on git.kernel.org.● GPLv2 licensed.● 1.5 year old.● Split between kernel and user spaces.● Open development.
![Page 14: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/14.jpg)
14
The overall picture
Kernel space
User space
AF_NFC Sockets
applicationneard
NFC Netlink
D-Bus API
application
NFC Core
NFC Drivers
NFC Hardware
![Page 15: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/15.jpg)
15
Kernel Architecture
NFC Core
HCI
SHDLC
NCI
Netlink socket PROTO_LLCP
LLCP
PROTO_RAW
μread pn544wilinkpn533
AF_NFC
![Page 16: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/16.jpg)
16
The NFC daemon● Tag specific handling (R/W).
● Transport protocols on top of LLCP.
● Adapter and targets management.
● NDEF parsing.
● Handover.
● D-Bus APIs.
● Plugin based.
● GLib and libnl dependency.
neard core
NPP Tag R/W
D-Bus API
Handover
SNEP
LLCP RAW
BlueZ
Netlink
AF_NFC
plugins
KU
![Page 17: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/17.jpg)
17
Hardware and Features Support
Interfaces Tag R/W LLCP Handover Card Emulation
Linux HCI, NCI, USB Yes SNEP, NPP Bluetooth No
Android HCI Yes SNEP, NPP Bluetooth Yes
Inside Secure HCI Yes SNEP Bluetooth, WiFi Yes
libnfc USB, UART Yes No No Yes
nfcpy USB Yes SNEP Bluetooth No
Supported Hardware
Linux NXP pn544, NXP pn53x¹, TI nfcwilink
Android NXP pn544
Inside Secure Inside Secure microread
libnfc NXP pn53x
nfcpy NXP pn53x
¹ PN532 not supported yet
![Page 18: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/18.jpg)
18
Plans
● Short term● Secure Element and card emulation netlink API.● Improve MIFARE support.● Inside Secure microread support.
● Long term● Wi-Fi Handover● OBEX and IP over NFC.● Personal Health Device Communication.● libneard.
![Page 19: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/19.jpg)
19
One Example - PHDC
![Page 20: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/20.jpg)
20
Personal Health Device Communication
● Medical and fitness devices.
● IEEE 11073 APDUs.● NFC as a carrier.● LLCP
● APDUs over LLCP.
● Reader/Writer● PHD NDEFs.
![Page 21: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/21.jpg)
21
PHDC over LLCP with neard
Implemented as plugins/phdc.c
struct near_p2p_driver phdc_driver = {.name = "PHDC",.service_name = “urn:nfc:sn:phds”,.read = phdc_read,.push = NULL,.close = phdc_close,
};
near_p2p_register(&phdc_driver);
health-api.txt: org.neard.Health for fd passing.
![Page 22: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/22.jpg)
22
PHDC raw implementation: Device
struct sockaddr_nfc_llcp addr;
fd = socket(AF_NFC, SOCK_STREAM, NFC_SOCKPROTO_LLCP);
addr.sa_family = AF_NFC;addr.dev_idx = adapter_idx;addr.nfc_protocol = NFC_PROTO_NFC_DEP;addr.service_name = “urn:nfc:sn:phds”
bind(fd, (struct sockaddr *) &addr, sizeof(addr));
![Page 23: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/23.jpg)
23
PHDC raw implementation: Manager
struct sockaddr_nfc_llcp addr;
fd = socket(AF_NFC, SOCK_STREAM, NFC_SOCKPROTO_LLCP);
addr.sa_family = AF_NFC;addr.dev_idx = adapter_idx;addr.target_idx = target_idx;addr.nfc_protocol = NFC_PROTO_NFC_DEP;addr.service_name = “urn:nfc:sn:phds”
connect(fd, (struct sockaddr *) &addr, sizeof(addr));
![Page 24: NFC on Linux (PDF)](https://reader036.fdocuments.net/reader036/viewer/2022082212/58a1aa3f1a28abb5488b9f08/html5/thumbnails/24.jpg)
24
Questions ?● NFC daemon
http://git.kernel.org/?p=network/nfc/neard.git;a=summary
● NFC kernelhttp://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-3.0.git
● Web site● https://www.01.org/linux-nfc
● Mailing list
https://lists.01.org/mailman/listinfo/linux-nfc