Jump to content
Форум по продукции MOXA

Сборка драйвера MOXA NPort Server Real TTY Driver под Fedora 30


Recommended Posts

Всем доброго дня!

Пытаюсь на Fedora 30 собрать драйвер https://www.moxa.com/Moxa/media/PDIM/S100000199/moxa-real-tty-drivers-for-linux-3.x.x-4.x.x-driver-v1.19.tgz. Все зависимости последней версии.

После запуска ./moxa/mxinst m64 пишет:

awk: fatal: cannot open file `np_ver.h' for reading (No such file or directory)

===============================================================================
Copyright (C) 2002-2017  Moxa Inc.
All Rights Reserved.

MOXA NPort Server Real TTY Driver  Installation.
System Information: Kernel 5.2.7-200.fc30.x86_64; Machine x86_64.
===============================================================================


Building driver...

If you want to use secure communication with target,
you might choose [y] to enable the SSL function.
Note: This function support RealCOM with secure mode only.
Do you want to enable secure function? [y/N].
y
make: *** Нет правила для сборки цели «ssl64».  Останов.
Check Driver...
FAILED !!!

Install Not Completed !

Где интересно ошибка? 

Команда ldconfig -p | grep libssl.so выводит такое:

 libssl.so.1.1 (libc6,x86-64) => /lib64/libssl.so.1.1

 libssl.so (libc6,x86-64) => /lib64/libssl.so

openssl-devel-1:1.1.1c и openssl-1:1.1.1c установлены.

С переходом в папку moxa и запуск ./mxinst m64 выдает следующее:

===============================================================================
Copyright (C) 2002-2017  Moxa Inc.
All Rights Reserved.

MOXA NPort Server Real TTY Driver Ver1.19 Installation.
System Information: Kernel 5.2.7-200.fc30.x86_64; Machine x86_64.
===============================================================================


Building driver...

If you want to use secure communication with target,
you might choose [y] to enable the SSL function.
Note: This function support RealCOM with secure mode only.
Do you want to enable secure function? [y/N].
y
make -C /lib/modules/5.2.7-200.fc30.x86_64/build SUBDIRS=/tmp/moxa modules
make[1]: вход в каталог «/usr/src/kernels/5.2.7-200.fc30.x86_64»
Makefile:213: ================= WARNING ================
Makefile:214: 'SUBDIRS' will be removed after Linux 5.3
Makefile:215: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:216: ==========================================
  CC [M]  /tmp/moxa/npreal2.o
/tmp/moxa/npreal2.c: В функции «npreal_ioctl»:
/tmp/moxa/npreal2.c:1323:60: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1323 |   error = access_ok(VERIFY_WRITE, (void *)arg, sizeof(long))?0:-EFAULT;
      |                                                            ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:1323:11: ошибка: «access_ok» не описан (первое использование в этой функции)
 1323 |   error = access_ok(VERIFY_WRITE, (void *)arg, sizeof(long))?0:-EFAULT;
      |           ^~~~~~~~~
/tmp/moxa/npreal2.c:1323:11: замечание: сообщение о каждом неописанном идентификаторе выдается один раз в каждой функции, где он встречается
/tmp/moxa/npreal2.c:1330:59: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1330 |   error = access_ok(VERIFY_READ, (void *)arg, sizeof(long))?0:-EFAULT;
      |                                                           ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:1346:33: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1346 |     sizeof(struct serial_struct))?0:-EFAULT;
      |                                 ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:1353:33: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1353 |     sizeof(struct serial_struct))?0:-EFAULT;
      |                                 ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:1360:25: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1360 |     sizeof(unsigned int))?0:-EFAULT;
      |                         ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:1417:42: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 1417 |     sizeof(struct serial_icounter_struct))?0:-EFAULT;
      |                                          ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c: В функции «npreal_net_ioctl»:
/tmp/moxa/npreal2.c:3374:50: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 3374 |   rtn = access_ok( VERIFY_WRITE, (void *)arg, len)?0:-EFAULT;
      |                                                  ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:3374:9: ошибка: «access_ok» не описан (первое использование в этой функции)
 3374 |   rtn = access_ok( VERIFY_WRITE, (void *)arg, len)?0:-EFAULT;
      |         ^~~~~~~~~
/tmp/moxa/npreal2.c:3398:52: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 3398 |   rtn = access_ok( VERIFY_READ,  (void *)arg, size )?0:-EFAULT;
      |                                                    ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:3523:52: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 3523 |   rtn = access_ok( VERIFY_READ,  (void *)arg, size )?0:-EFAULT;
      |                                                    ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
/tmp/moxa/npreal2.c:3548:52: ошибка: в макрос «access_ok» передано 3 аргументов, но используется только 2
 3548 |   rtn = access_ok( VERIFY_READ,  (void *)arg, size )?0:-EFAULT;
      |                                                    ^
In file included from ./include/linux/uaccess.h:11,
                 from ./include/asm-generic/termios.h:6,
                 from ./arch/x86/include/uapi/asm/termios.h:1,
                 from ./include/uapi/linux/termios.h:6,
                 from ./include/linux/tty.h:7,
                 from /tmp/moxa/npreal2.c:50:
./arch/x86/include/asm/uaccess.h:91: замечание: macro "access_ok" defined here
   91 | #define access_ok(addr, size)     \
      |
make[2]: *** [scripts/Makefile.build:285: /tmp/moxa/npreal2.o] Ошибка 1
make[1]: *** [Makefile:1601: _module_/tmp/moxa] Ошибка 2
make[1]: выход из каталога «/usr/src/kernels/5.2.7-200.fc30.x86_64»
make: *** [Makefile:71: module] Ошибка 2
Check Driver...
FAILED !!!

Install Not Completed !

Link to comment

В npreal2.c используется макрос с 3-мя аргументами в виде:

rtn = access_ok( VERIFY_READ,  (void *)arg, size )?0:-EFAULT;

А в /usr/src/kernels/5.2.7-200.fc30.x86_64/arch/x86/include/asm/uaccess.h она объявлена так:

#define access_ok(addr, size)                    \
({                                    \
    WARN_ON_IN_IRQ();                        \
    likely(!__range_not_ok(addr, size, user_addr_max()));        \
})

Похоже что налицо несоответствие ядра 5.2. Какие будут предложения ?

Попробую внести изменения как вот здесь.

Link to comment

Вроде бы собралось:

./mxinst m64

===============================================================================
Copyright (C) 2002-2017  Moxa Inc.
All Rights Reserved.

MOXA NPort Server Real TTY Driver Ver1.19 Installation.
System Information: Kernel 5.2.7-200.fc30.x86_64; Machine x86_64.
===============================================================================

There is an Real TTY Driver installed in your system.
Continue to install will overwrite the old driver.
Do you want to continue installing? [y/N].
y

Building driver...

If you want to use secure communication with target,
you might choose [y] to enable the SSL function.
Note: This function support RealCOM with secure mode only.
Do you want to enable secure function? [y/N].
y
make -C /lib/modules/5.2.7-200.fc30.x86_64/build SUBDIRS=/tmp/moxa modules
make[1]: вход в каталог «/usr/src/kernels/5.2.7-200.fc30.x86_64»
Makefile:213: ================= WARNING ================
Makefile:214: 'SUBDIRS' will be removed after Linux 5.3
Makefile:215: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:216: ==========================================
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: выход из каталога «/usr/src/kernels/5.2.7-200.fc30.x86_64»
cp -p npreal2.ko /lib/modules/5.2.7-200.fc30.x86_64/kernel/drivers/char/
depmod -a
cc  -c -m64 -DSSL_ON -DOPENSSL_NO_KRB5 npreal2d.c -I/tmp/moxa/include
cc      -m64 npreal2d.o -o npreal2d -lssl
strip   npreal2d
Check Driver...
Copying driver files ... OK!
Load driver...
OK!

Loading TTY Driver...
rm -f /dev/ttyr00
mknod -m 666 ttyr00 c 33 1
rm -f /dev/cur00
mknod -m 666 cur00 c 38 1
file open error


===============================================================================
Installation process is completed.
The all driver files are installed on /usr/lib/npreal2/driver.
Now you can cd /usr/lib/npreal2/driver and run ./mxaddsvr to add tty port.
===============================================================================

Но что означает после команды mknod -m 666 cur00 c 38 1  ошибка file open error ?

Link to comment
2 минуты назад, Незнайка сказал:

Добрый день. Зачем включаете защищённый обмен? Какой у вас NPort?

Добрый день! Если честно, то наверное он не нужен. 

NPort IA-5150
Link to comment
11 минут назад, Незнайка сказал:

Добрый день. Зачем включаете защищённый обмен? Какой у вас NPort?

Без включения защищенного обмена тоже самое:

./mxinst m64

===============================================================================
Copyright (C) 2002-2017  Moxa Inc.
All Rights Reserved.

MOXA NPort Server Real TTY Driver Ver1.19 Installation.
System Information: Kernel 5.2.7-200.fc30.x86_64; Machine x86_64.
===============================================================================

There is an Real TTY Driver installed in your system.
Continue to install will overwrite the old driver.
Do you want to continue installing? [y/N].
y

Building driver...

If you want to use secure communication with target,
you might choose [y] to enable the SSL function.
Note: This function support RealCOM with secure mode only.
Do you want to enable secure function? [y/N].
N
make -C /lib/modules/5.2.7-200.fc30.x86_64/build SUBDIRS=/tmp/moxa modules
make[1]: вход в каталог «/usr/src/kernels/5.2.7-200.fc30.x86_64»
Makefile:213: ================= WARNING ================
Makefile:214: 'SUBDIRS' will be removed after Linux 5.3
Makefile:215: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:216: ==========================================
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: выход из каталога «/usr/src/kernels/5.2.7-200.fc30.x86_64»
cp -p npreal2.ko /lib/modules/5.2.7-200.fc30.x86_64/kernel/drivers/char/
depmod -a
Check Driver...
Copying driver files ... OK!
Load driver...
OK!

Loading TTY Driver...
rm -f /dev/ttyr01
mknod -m 666 ttyr01 c 33 2
rm -f /dev/cur01
mknod -m 666 cur01 c 38 2
file open error


===============================================================================
Installation process is completed.
The all driver files are installed on /usr/lib/npreal2/driver.
Now you can cd /usr/lib/npreal2/driver and run ./mxaddsvr to add tty port.
===============================================================================

Link to comment
Только что, Незнайка сказал:

Попробуйте 1.9.11 из соседней темы. Может с ним получится B)

Предварительно его изменив с учетом макроса access_ok, как я сделал ранее ?

Link to comment
7 минут назад, Незнайка сказал:

Если не сложно, дайте сначала листинг установки исходного драйвера.

1.9.11 (хотя почему в np_ver.h #define    NPREAL_VERSION    "Ver1.19.9"  ?) вроде получилось:

 

 ./mxinst m64

===============================================================================
Copyright (C) 2002-2019  Moxa Inc.
All Rights Reserved.

MOXA NPort Server Real TTY Driver Ver1.19.9 Installation.
System Information: Kernel 5.2.7-200.fc30.x86_64; Machine x86_64.
===============================================================================


Building driver...

If you want to use secure communication with target,
you might choose [y] to enable the SSL function.
Note: This function support RealCOM with secure mode only.
Do you want to enable secure function? [y/N].
N
make -C /lib/modules/5.2.7-200.fc30.x86_64/build M=/tmp/moxa modules
make[1]: вход в каталог «/usr/src/kernels/5.2.7-200.fc30.x86_64»
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: выход из каталога «/usr/src/kernels/5.2.7-200.fc30.x86_64»
cp -p npreal2.ko /lib/modules/5.2.7-200.fc30.x86_64/kernel/drivers/char/
depmod -a
Check Driver...
Copying configurations files ... OK!
Copying driver files ... OK!
Load driver...
OK!

Loading TTY Driver...
Complete.

===============================================================================
Installation process is completed.
The all driver files are installed on /usr/lib/npreal2/driver.
Now you can cd /usr/lib/npreal2/driver and run ./mxaddsvr to add tty port.
===============================================================================

Link to comment
7 минут назад, Незнайка сказал:

:rolleyes:

После добавления устройства:

Adding Server...

ttyr00, cur00
Added RealCom server: ip : 10.96.1.89

mknod -m 666 ttyr00 c 33 0
mknod -m 666 cur00 c 38 0
Complete.

Как посмотреть вывод с порта? На нем данные постоянно поступают от устройства.

Команда stty -F /dev/ttyr00 9600 ничего не выводит, просто закрывается без ничего.

Link to comment
  • 1 month later...

Если интересно, то я делаю следующее:

1. На сервере под управлением Fedora 30 (на HyperV) ставлю Docker

2. Создаю на основе образа Fedora 30 образ с помощью Dockerfile и в нем собираю драйвера moxa

3. Далее в этот образ интегрирую свою приложение на .NET Core, которое опрашивает устройство через ttyr00 и выводит данные через веб-интерфейс (с испоьзованием WebSocket).

4. Назначаю автозапускаемым мое приложение.

Образ готов к употреблению. Получилось очень интересно.

Link to comment
  • 2 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...