BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Достъп до серийните портове под linux
thrawn
Публикувано на: 28-10-2025, 16:13
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3765
Регистриран на: 17.01.17



Цял ден се мъча да получа списък със серийните портове на Linux машина. Проблемът е, че SerialPort.GetPortNames() не ги вижда. Ако се опитам да отворя порт който знам, че е там (например /dev/ttyS0) се отваря успешно.

Това е инсталирано на машината:
CODE

.NET SDK:
Version:           8.0.121
Commit:            5b9595625d
Workload version:  8.0.100-manifests.21648041

Runtime Environment:
OS Name:     ubuntu
OS Version:  24.04
OS Platform: Linux
RID:         ubuntu.24.04-x64
Base Path:   /usr/lib/dotnet/sdk/8.0.121/

.NET workloads installed:
Workload version: 8.0.100-manifests.21648041
There are no installed workloads to display.

Host:
 Version:      8.0.21
 Architecture: x64
 Commit:       362ab6669d

.NET SDKs installed:
 8.0.121 [/usr/lib/dotnet/sdk]

.NET runtimes installed:
 Microsoft.AspNetCore.App 8.0.21 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
 Microsoft.NETCore.App 8.0.21 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
 None

Environment variables:
 Not set

global.json file:
 Not found

Learn more:
 https://aka.ms/dotnet/info

Download .NET:
 https://aka.ms/dotnet/download
PMEmail Poster
Top
ici
Публикувано на: 28-10-2025, 16:39
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 18938
Регистриран на: 06.06.04



Ами мен лично .NET ме отвращава, но на Питон PySerial си ги вижда, а за C++ boost::asio проверявам /dev/ttyS* и /dev/ttyUSB* и няма проблем.


--------------------
Ние не сме в една лодка, ние сме в една буря. Лодките са различни.

Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп.
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 28-10-2025, 16:50
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3765
Регистриран на: 17.01.17



И мен ме отвращава, ама няма особен избор сега.

Всичко е ОК с портовете. Работят си, имам права и се менаджират коректно от udev (добавям постоянни линкове за usb устройствата). Виждам си ги под java, но .net не ги вижда. Конкретно функцията GetPortNames() връща празен масив.

Но въпреки, че не се вижда портът, ако се опитам да го отворя като изрично посоча името му се отваря без проблеми (под .net).

Сега свалих платформата директно от MS и пак е същата работа
CODE
.NET SDK:
Version:           8.0.415
Commit:            7bd5a8c970
Workload version:  8.0.400-manifests.c414f008
MSBuild version:   17.11.48+02bf66295


Между другото с chatgtp циклим в кръг - той твърди че трябва да имам libSystem.IO.Ports.Native.so която да ползва libudev. На една от платформите с които се мъча я има билиотеката но не ползва libudev
CODE
ldd libSystem.IO.Ports.Native.so
       linux-vdso.so.1 (0x00007ffe643e1000)
       libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007283fbc00000)
       /lib64/ld-linux-x86-64.so.2 (0x00007283fbeda000)


Но и с нея не става.

След това твърди, че от версия 6 в платформата тая библиотека не била отделна и ми казва да сваля официалната исталация защото моята била орязана ...

Това мнение е било редактирано от thrawn на 28-10-2025, 16:55
PMEmail Poster
Top
ici
Публикувано на: 28-10-2025, 17:13
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 18938
Регистриран на: 06.06.04



С libc.so.6 аз имах големи болки които не можах да реша. Исках да направя портабъл приложение за Linux със PyInstaller, но работеше само на моята машина заради libc.so.6. В крайна сметка го направих като *.pyz, прави venv, качва с pip каквото му трябва и така работи.


--------------------
Ние не сме в една лодка, ние сме в една буря. Лодките са различни.

Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп.
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 28-10-2025, 18:50
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3765
Регистриран на: 17.01.17



Вече го докарахме до тук
CODE
От .NET 6 и нагоре, System.IO.Ports под Linux има следното поведение:

Методът SerialPort.GetPortNames() не връща всички /dev/ttyS* устройства автоматично.

Той обикновено връща само USB базирани tty устройства (ttyUSB*, ttyACM*) и виртуални серийни портове.

Стандартните „builtin“ UART порта (ttyS0, ttyS1 и т.н.) често не се включват в списъка, дори ако udev ги знае.

Тоест това е поведение по дизайн на .NET Core/8 под Linux, а не проблем с библиотеката или права.
PMEmail Poster
Top
akrachev
Публикувано на: 28-10-2025, 20:15
Quote Post



Име: акрачев
Група: Потребител
Ранг: Почетен член

Мнения: 1204
Регистриран на: 27.11.09



ОК - тогава правиш проба да инициализираш порт - ако има грешка - значи няма!


--------------------
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 29-10-2025, 06:48
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3765
Регистриран на: 17.01.17



Тествал съм. Знам, че имам /dev/ttyS0 на машината. GetPortNames() връща празен масив. Въпреки това пробвам да отворя порт с това име и да пратя нещо по него. Портът се отваря и данните се пращат.

Днес смятам да свалям версията на платформата под 6 - 5, 4, 3 и 2 за да проверя теорията на бота за библиотеката и да видя дали в някоя версия на платформата тя няма да използва наистина libudev за да ги изброява.

Това мнение е било редактирано от thrawn на 29-10-2025, 06:50
PMEmail Poster
Top
relax4o
Публикувано на: 29-10-2025, 15:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2841
Регистриран на: 04.04.07



Предполагам си reference-нал правилната версия на System.IO.Ports в проекта. Аз мога да потвърдя под Mac (въпреки, че е Unix, е отделен метод, който чете, така че не е доказателство), с .NET 9 GetPortNames() ми връща устройства.

По-късно ще тествам и на линукс машината, отново с 9 (а може и с 8) да видим какво ще стане и дали ще върне нещо.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
ici
Публикувано на: 29-10-2025, 15:53
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 18938
Регистриран на: 06.06.04



Едва ли имаш истински сериен порт, по-скоро имаш някакво USB CDC устройство с което няма проблеми.

Това мнение е било редактирано от ici на 29-10-2025, 15:54


--------------------
Ние не сме в една лодка, ние сме в една буря. Лодките са различни.

Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп.
PMEmail PosterUsers Website
Top
relax4o
Публикувано на: 29-10-2025, 16:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2841
Регистриран на: 04.04.07



QUOTE (ici @ 29-10-2025, 15:53)
Едва ли имаш истински сериен порт, по-скоро имаш някакво USB CDC устройство с което няма проблеми.

QUOTE

> sudo dmesg | grep ttyS
[    0.444780] serial8250: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    5.145522] tty ttyS15: hash matches



Това вижда dmesg, но SerialPort.GetPortNames() нищо не вижда и при мен под Линукс. Предполагам, че трябваше да ми върне поне ttyS0 в случая.

Иначе има една архивирана библиотека NetCoreSerial, но при нея SerialDevice.GetPortNames() просто връща списък с всички /dev/ttyS0-N. Не съм сигурен дали това би ти помогнало за твоя случай.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0