zepete: (Default)
[personal profile] zepete

В интернетах продаются платы чтения/записи rfid карт с микросхемой pn532. Они выглядят по разному, но внутри у них микроконтроллер nxp pn532 с прошивкой от adafruit. Они предназначаются для работы с платами arduino, ибо для компьютера нет работоспособных версий libnfc. Как скомпилировать свою версию libnfc, способную работать с этими платами, я опишу в этом посте.

1. linux

1.1. Компиляция компиляция без модификации кода старой версии: libnfc v1.5.0 и mfoc mfoc-0.10.2

#apt-get install autoconf libtool subversion pkg-config make libusb-dev

$cd /usr/share/aclocal
$wget https://gnunet.org/svn/Extractor/m4/pkg.m4

$wget http://github.com/nfc-tools/libnfc/archive/libnfc-1.5.0.tar.gz
$tar -xvzf libnfc-1.5.0.tar.gz
$cd libnfc-libnfc-1.5.0
$autoreconf -vis
$./configure --with-drivers=pn532_uart --enable-serial-autoprobe
$make
#make install
$echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
$ldconsufig

$wget http://github.com/nfc-tools/mfoc/archive/mfoc-0.10.2.tar.gz
$tar -xvzf mfoc-0.10.2.tar.gz
$cd mfoc-mfoc-0.10.2
$autoreconf -vis
$./configure
$make
#make install

Это займет несколько десятков минут.

1.2  Компиляция последних версий с модификацией кода

#apt-get install autoconf libtool subversion pkg-config make libusb-dev git
$git clone https://github.com/nfc-tools/libnfc.git
$cd libnfc
$autoreconf -vis
$./configure --enable-doc
$sed -i -e 's/res->allow_intrusive_scan *= *false;/res->allow_intrusive_scan *= *true;/ ./libnfc/nfc-internal.c
$sed -i -e 's/const *uint8_t *pn532_wakeup_preamble[[][]] *= *[{] *0x55, *0x55, *0x00,/const uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,/ ./libnfc/drivers/pn532_uart.c
$make
#make install




2. Windows

2.1. Загрузить и установить слеедующие компоненты

КомпонентИмя файлаРазмерОкуда качать в интернетеКуда распаковать/установить
tdm-gcctdm64-gcc-5.1.0-2.exe45.8Мhttps://sourceforge.net/projects/tdm-gcc/files/latest/downloadd:/tools/tdm-gcc, обязательно 32/64 установка
libusb-win32libusb-win32-bin-1.2.6.0.zip891кhttps://sourceforge.net/projects/libusb-win32/files/latest/downloadd:/tools/libusb-win32-bin-1.2.6.0
PCRE for Windowspcre-7.0.exe1.34Мhttps://sourceforge.net/projects/gnuwin32/files/pcre/7.0/pcre-7.0.exe/downloadd:/tools/libusb-win32-bin-1.2.6.0
cmakecmake-3.4.3-win32-x86.exe12.5Мhttps://cmake.org/files/v3.4/cmake-3.4.3-win32-x86.exeD:\tools\CMake
doxygendoxygen-1.8.11-setup.exe24Мhttps://sourceforge.net/projects/doxygen/files/latest/download?source=filesD:\tools\doxygen
libnfclibnfc-libnfc-1.7.1.zip351кhttps://github.com/nfc-tools/libnfc/archive/libnfc-1.7.1.zipd:/tools/libnfc-libnfc-1.7.1
mfocmfoc-mfoc-0.10.7.zip42кhttps://github.com/nfc-tools/mfoc/archive/mfoc-0.10.7.zipd:\tools\mfoc-mfoc-0.10.7
mfcukmfcuk-mfcuk-0.3.8.zip74.5кhttps://github.com/nfc-tools/mfcuk/archive/mfcuk-0.3.8.zipd:\tools\mfcuk-mfcuk-0.3.8

2.2. Интергрировать mfoc в libnfc
2.2.1. Выполнить следующие команды для копирования "сырцов" mfoc в libnfc
copy d:\tools\mfoc-mfoc-0.10.7\src\mfoc.* d:\tools\libnfc-libnfc-1.7.1\utils
copy d:\tools\mfoc-mfoc-0.10.7\src\cr*.* d:\tools\libnfc-libnfc-1.7.1\utils
copy d:\tools\mfoc-mfoc-0.10.7\src\mifare.* d:\tools\libnfc-libnfc-1.7.1\utils\mifare4mfoc.*
copy d:\tools\mfoc-mfoc-0.10.7\src\nfc-utils.* d:\tools\libnfc-libnfc-1.7.1\utils\nfc-utils4mfoc.*

2.2.2 Отредактировать файлы в папке d:\tools\libnfc-libnfc-1.7.1\utils для предотвращения конфликта версий
Имя файлаЧто искать На что менять
CMakeLists.txtSET(UTILS-SOURCES
  nfc-emulate-forum-tag4
  nfc-jewel
  nfc-list
  nfc-mfclassic
  nfc-mfultralight
  nfc-read-forum-tag3
  nfc-relay-picc
  nfc-scan-device
)
SET(UTILS-SOURCES
  nfc-emulate-forum-tag4
  nfc-jewel
  nfc-list
  nfc-mfclassic
  nfc-mfultralight
  nfc-read-forum-tag3
  nfc-relay-picc
  nfc-scan-device
  mfoc
)
  IF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic"))
    LIST(APPEND TARGETS mifare)
  ENDIF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic"))

  IF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic"))
    LIST(APPEND TARGETS mifare)
  ENDIF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic"))

  IF((${source} MATCHES "mfoc"))
    LIST(APPEND TARGETS mifare4mfoc)
    LIST(APPEND TARGETS nfc-utils4mfoc)
    LIST(APPEND TARGETS crapto1)
    LIST(APPEND TARGETS crypto1) 
  ENDIF((${source} MATCHES "mfoc"))

Makefile.ambin_PROGRAMS = \
  nfc-emulate-forum-tag4 \
  nfc-jewel \
  nfc-list \
  nfc-mfclassic \
  nfc-mfultralight \
  nfc-read-forum-tag3 \
  nfc-relay-picc \
  nfc-scan-device
bin_PROGRAMS = \
  nfc-emulate-forum-tag4 \
  nfc-jewel \
  nfc-list \
  nfc-mfclassic \
  nfc-mfultralight \
  nfc-read-forum-tag3 \
  nfc-relay-picc \
  nfc-scan-device \
  mfoc
nfc_mfclassic_SOURCES = nfc-mfclassic.c mifare.c mifare.h nfc-utils.h
nfc_mfclassic_LDADD = $(top_builddir)/libnfc/libnfc.la \
      libnfcutils.la
nfc_mfclassic_SOURCES = nfc-mfclassic.c mifare.c mifare.h nfc-utils.h
nfc_mfclassic_LDADD = $(top_builddir)/libnfc/libnfc.la \
      libnfcutils.la

mfoc_SOURCES = mfoc.c crypto1.c crapto1.c mifare4mfoc.c nfc-utils4mfoc.c mifare4mfoc.h nfc-utils4mfoc.h crapto1.h mfoc.h
mfoc_LDADD = $(top_builddir)/libnfc/libnfc.la
dist_man_MANS = \
  nfc-emulate-forum-tag4.1 \
  nfc-jewel.1 \
  nfc-list.1 \
  nfc-mfclassic.1 \
  nfc-mfultralight.1 \
  nfc-read-forum-tag3.1 \
  nfc-relay-picc.1 \
  nfc-scan-device.1
dist_man_MANS = \
  nfc-emulate-forum-tag4.1 \
  nfc-jewel.1 \
  nfc-list.1 \
  nfc-mfclassic.1 \
  nfc-mfultralight.1 \
  nfc-read-forum-tag3.1 \
  nfc-relay-picc.1 \
  nfc-scan-device.1 \
  mfoc.1
mifare4mfoc.c#include "mifare.h"#include "mifare4mfoc.h"
nfc-utils4mfoc.c#include "nfc-utils.h"#include "nfc-utils4mfoc.h"


2.3. интегрирование mfcuk в libnfc
2.3.1. Так как файлов здесь очень много, то буду создавать отдельную папку "d:\tools\libnfc-libnfc-1.7.1\mfcuk", в которую буду копировать все содержимое "d:\tools\mfcuk-mfcuk-0.3.8\src".
2.3.2 Теперь надо отредактировать несколько файлов для их компиляции.
Имя файла Что искатьНа что менять
d:\tools\libnfc-libnfc-1.7.1\CMakeLists.txtADD_SUBDIRECTORY(examples)ADD_SUBDIRECTORY(examples)
ADD_SUBDIRECTORY(mfcuk)
Makefile.amSUBDIRS = libnfc utils examples include contrib cmake testSUBDIRS = libnfc utils examples include contrib cmake test mfcuk

2.4. Отредактировать исходники libnfc для нормального поиска устройства
Имя файлаЧто искать На что менять Смысл 
C:\tools\libnfc-libnfc-1.7.1\libnfc\drivers\pn532_uart.cconst uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

const uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

увеличение времени на просыпание устройства
C:\tools\libnfc-libnfc-1.7.1\libnfc\nfc-internal.cres->allow_intrusive_scan = false;  res->allow_intrusive_scan = true;разрешение искать устройство

2.5. Создать папку d:\libnfc и в ней файл "start console.bat" со строкой "@cmd /k path=%path%;D:\tools\TDM-GCC\bin;D:\tools\Cmake\bin;D:\tools\GnuWin32\bin;d:\libnfc\utils"

2.6. Запусть команду start console.bat

2.7. Запустить cmake-gui. В появившемся окне параметру "Where is source code" дать значение "D:/tools/libnfc-libnfc-1.7.1" и нажать "configure".


2.8. Нажать Finish


2.9. Дождаться появления сообщения об ошибке.


2.10. Задать значения переменным
ПеременнаяЗначение Назначение
CMAKE_INSTALL_PREXIXd:/libnfc Куда будет пытаться устанавливать приложения
LIBNFC_SYSCONFDIR./Путь к конфигурациооным файлам 
LIBUSB_INCLUDE_DIRSD:/tools/libusb-win32-bin-1.2.6.0/includeПуть к заголовком библиотеки libusb
LIBUSB_LIBRARIESD:/tools/libusb-win32-bin-1.2.6.0/lib/gcc/libusb.aПуть к файлу библиотеки libusb

2.11. Нажать configure и generate. После завершения операций закрыть приложение.

2.12. запустить mingw32-make в консоле.

2.13. Выполнить последовательности команд "cd libnfc" и "nfc-list" при поднесенной карте rfid к считывателю.



PN544

Date: 2016-11-29 02:51 pm (UTC)
From: [identity profile] Евгений Лизнёв (from livejournal.com)
Существует ли возможность сконфигурировать libnfc для работы с встроенным в устройство чипом PN544 (PN65)?

х64 Window???

Date: 2019-03-01 07:07 pm (UTC)
From: [identity profile] Серрат Магамедов (from livejournal.com)
Учитывает ли гайд возможность создания бинарных файлов для х64 Windows. Где-то встречал информацию о том, что для создания корректного драйвера Win64 указываются иначе прописываются libusb libraries.. или я что-то путаю??

Re: х64 Window???

Date: 2019-03-03 05:43 pm (UTC)
From: [identity profile] zepete.livejournal.com
Нет.

Потом выяснилось еще, что гайд не учитывает версию libnfc. Компиляция и запуска программы происходит отлично, только данные сохраняет левые.

Надо для компиляции грузить исходник libnfc 1.5 вероятно.

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 05:51 pm
Powered by Dreamwidth Studios