konto usunięte

Temat: Programowanie pod linuxem

Chciałbym napisać program na linux. Powinien uruchamiać się automatycznie i mieć dostęp do sieci i peryferiów jak port RS-232. A mówiąc bardziej precyzyjnie w kwestiach sieci, to powinien móc wykorzystać przynajmniej bilbiotekę CURL.
I tutaj mam prośbę o poradę bardziej doświadczonych. Co byście polecali do takich zadań. Czy język C/C++ będzie dobrym pomysłem? Jak ogarnąć autostart razem z systemem i jakiś watchdog?

Jestem otwarty na propozycje literatury. Tak czy inaczej chcę zgłębić działanie linuxa od strony mocno technicznej.
Darek M.

Darek M. specjalista d/s
wypelniania
formularza

Temat: Programowanie pod linuxem

W uni* wszystkie te rzeczy otwiera sie jak pliki. Curl tez jest pod reka, wiec mozna zaczac od skryptu w bashu i dojechac do C. W kwestii startu - wedlug starej szkoly jak bylo cos waznego, to uruchamialo sie to bezposrednio initem (z inittab), bo init mial wszystko, czego trzeba do pilnowania procesu. Teraz narobilo sie cudow na kiju, jest tez systemd, wiec mozesz napisac skrypt LSB do startowania, ale imho nie warto jesli to ma dzialac wylacznie dla Ciebie.

C bylo zawsze moim ulubionym rozwiazaniem, ale mialem kiedys zasysacz danych z portu LPT (ssal "wydruki" z centralki i ladowal do SQLa) bedacy skryptem w perlu.

konto usunięte

Temat: Programowanie pod linuxem

Perla nie znam, wolałbym nie wchodzić w kolejny zaawansowany język programowania. Skoro C działa to na nim będę bazował. Korzystałem z zapisu/odczytu plików portów, jednak nie miałem pewności czy całość tak działa.

O inittab coś słyszałem ale uleciało z pamięci dopóki nie przypomniałeś. Tylko nie mam pomysłu na watchdog który przypilnuje mi procesu.

konto usunięte

Temat: Programowanie pod linuxem

Tu jest przykład w Pythonie:
http://www.varesano.net/blog/fabio/serial%20rs232%20co...
Rozeznanie się w systemie dalej do zrobienia, ale nie trzeba zastanawiać się co i jak zwalniać. Nawet jeżeli nie jako docelowe rozwiązanie... polecam do prototypowania. Tak jest sporo łatwiej. Można też w GO, zawsze to nowocześniej. :) Chyba, że celem jest zrobienie, żeby działało i tyle.

Curl: http://pycurl.io/docs/latest/quickstart.html
Chociaż jest coś takiego jak mechanize: http://www.pythonforbeginners.com/mechanize/browsing-i... samo będzie ogarniać ciasteczka i parę innych takich. Do tego https://www.crummy.com/software/BeautifulSoup/bs4/doc/ do parsowania HTMLa i można sporo zdziałać.

konto usunięte

Temat: Programowanie pod linuxem

Ciasteczka to mi nie potrzebne. Mam na myśli raczej wysyłanie JSON po HTTP lub HTTPS. Czyli bardziej ma znaczenie tutaj SSL niż ciasteczka.

Chętnie skorzystałbym z jakiegoś solidnie szyfrowanego połączenia pomiędzy linuxami. Ale nie znam się na tym i brakuje mi pomysłów. Tym bardziej że musi to być narzędzie automatyczne. Tzn. po początkowej konfiguracji musi działać 10-20 lat.

konto usunięte

Temat: Programowanie pod linuxem

Ciasteczka, nie ciasteczka - chodzi o to, że można sporo zrobić. Do wszystkiego są przykłady, a sam język jest bardzo prosty. Jeżeli decydowałbym się robić coś, co ma długo działać to raczej tak prosto jak tylko się da.
Dariusz J.

Dariusz J. Administrator sieci
komputerowej

Temat: Programowanie pod linuxem

Na swoim przykładzie
- ja zaczynam od bardzo prostych rzeczy , zagłębiam się ostatnio w IoT i z pomocą przyszedł https://flows.nodered.org

Nie znam się na językach programowania dobrze ale to pomogło chociaż jakoś wystartować

Ciężko to nazwać "czystym" programowaniem ale jest dosyć proste i da się sporo nauczyć :-)

konto usunięte

Temat: Programowanie pod linuxem

U mnie programowanie to nie problem, szczególnie jeśli chodzi o C/C++.
W związku z tym nie chcę się bawić w jakieś obejścia. Plusem programu w zwykłym języku jest jego wydajność. Nie ma to jak zaprogramować zaawansowany IoT zużywający 5MB RAM. A testuje ostatnio dedykowane linuxy pod IoT, które działaja płynnie przy 4x240MHz i 20MB RAM (domyślnie +50 MB logi zapisywane w RAM)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Programowanie pod linuxem

Cześć,

jeśli znasz C/C++ to jest to bardzo dobry wybór dla Linux'a. Jeśli chodzi o "watchdog timer" to od dłuższego czasu takowy jest wbudowany w jądro Linux'a. Nie wiem na jakim sprzęcie będzie chodził twój system (ARMxx, x86, amd64 itp.), ale większość nowoczesnych CPU ma wbudowany "watchdog timer" sprzętowy.

Jeśli chodzi o użycie to polecam Google (hasło "Linux kernel watchdog timer"). Zobacz np. te linki:

https://embeddedfreak.wordpress.com/2010/08/23/howto-us...

https://www.kernel.org/doc/Documentation/watchdog/watch...

http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-back...

https://github.com/torvalds/linux/blob/master/Documenta...

Podstawowe API dla tego watchdog-timera jest bardzo proste, wystarczy (po utworzeniu) co jakiś czas wypisać cokolwiek na /dev/watchdog (patrz przykład).

Jeśli chodzi o same Unix'y (Linux) to jak koledzy wyżej wspomnieli dużo można zrobić w samym shell'u (Bash, Ash itp), korzystając z wbudowanych mechanizmów systemu (przydatne bywają dodatki do skryptów shell jak sed, awk).

Coraz więcej można też osiągnąć korzystając z Python'a (na wszystkie problemy można znaleźć przykłady ich rozwiązania w tym języku - Python zaczyna wypierać Perl'a używanego kiedyś jako podstawowy język skryptowy dla tej platformy. Może ze względu na jego promocje (Python'a) razem z platformą "Raspberry Pi" i na coraz szerszą znajomość tego języka wśród programistów, ale jak sam wspomniałeś C (szczególnie nieobiektowy) zapewnia największą wydajność i jest "najtywnym" językiem systemów Unix/Linux.

Pozdrawiam.Ten post został edytowany przez Autora dnia 29.01.17 o godzinie 17:42
Tomasz L.

Tomasz L. informatyk

Temat: Programowanie pod linuxem

Nie wiem co dalej z tymi danymi chcesz robić.
Ja zwykle korzystam z bibliotek w C, C# , pythonie, albo nawet php, żeby czytać z RS232/485 czy ethernet i wrzucam do bazy danych (zwykle jest archiwizacja), potem wystawiam to na www.
Dane do analizy dla innego systemu wystawiam w json.
Do uruchamiania skryptu możesz również użyć crona i wywoływać cyklicznie.
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Programowanie pod linuxem

Dawid Z.:
Ciasteczka to mi nie potrzebne. Mam na myśli raczej wysyłanie JSON po HTTP lub HTTPS. Czyli bardziej ma znaczenie tutaj SSL niż ciasteczka.

Chętnie skorzystałbym z jakiegoś solidnie szyfrowanego połączenia pomiędzy linuxami. Ale nie znam się na tym i brakuje mi pomysłów. Tym bardziej że musi to być narzędzie automatyczne. Tzn. po początkowej konfiguracji musi działać 10-20 lat.

Myślę, że wystarczyłoby Ci pewnie "scp" czyli przesyłanie plików przez ssh (standardowo szyfrowane przez SLL). Poszukaj hasła "scp Linux" w Google .

Patrz np. linki:

http://www.hypexr.org/linux_scp_help.php
http://www.tecmint.com/scp-commands-examples/
http://www.computerhope.com/unix/scp.htm
http://blog.bestnet.pl/jak-kopiowac-dane-przy-pomocy-s...

Pozdrawiam.
Darek M.

Darek M. specjalista d/s
wypelniania
formularza

Temat: Programowanie pod linuxem

Dawid Z.:
O inittab coś słyszałem ale uleciało z pamięci dopóki nie przypomniałeś. Tylko nie mam pomysłu na watchdog który przypilnuje mi procesu.

Init sam to zalatwia - trzyma proces za ogon (nie moze uciekac w BG) i jak zniknie, to uruchamia. Jest wystarczajaco sprytny zeby nie zrobic forkbomby - startuje kilka razy i jak ciagle zdycha, to pare minut przerwy. Tak ze jesli masz init, to wpisujesz w inittab i z glowy.

Co do watchdoga wymienionego po drodze - to inna bajka, pilnuje czy kernel nie fiknal na twardo. Z tym, ze ten softdog, to raczej nie upilnuje, bo tez zdechnie, wypada miec hardware do tego. Domyslam sie jednak, ze nie o kernel ci chodzi, tylko o proces.
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Programowanie pod linuxem

Darek M.:

Co do watchdoga wymienionego po drodze - to inna bajka, pilnuje czy kernel nie fiknal na twardo. Z tym, ze ten softdog, to raczej nie upilnuje, bo tez zdechnie, wypada miec hardware do tego. Domyslam sie jednak, ze nie o kernel ci chodzi, tylko o proces.

Nie jest to tak jednoznaczne jak piszesz - ten "softdog" używa jednego z timerów procesora (hardware) i raczej nie zdechnie. Chodzący w tle "watchdog daemon" może podjąć bardziej skomplikowane działania niż tylko "twardy restart systemu". Ale zgadzam się, iż czasami wygodniej jest używać dedykowanego sprzętu (i własnego "daemon watchwer'a") do pilnowania ważnych dla nas procesów. Kilka lat temu sam zaprojektowałem i używałem sprzętowego "watch-dog timera" USB (opartego na AVR ATtiny-45 i stosie V-USB).

Teoretycznie "watchdog daemon" może wykonać takie testy:


Supported tests by the watchdog daemon to check the system status:

Is the process table full?
Is there enough free memory?
Are some files accessible?
Have some files changed within a given interval?
Is the average work load too high?
Has a file table overflow occurred?
Is a process still running? The process is specified by a pid file.
Do some IP addresses answer to ping?
Do network interfaces receive traffic?
Is the temperature too high? (Temperature data not always available.)
Execute a user defined command to do arbitrary tests.
Execute one or more test/repair commands found in /etc/watchdog.d. These commands are called with the argument test or repair.



Myślę, że szczególnie przydatny byłby dla Ciebie ten test:
Is a process still running? The process is specified by a pid file.

Patrz te linki:

https://www.jann.cc/2013/02/02/linux_watchdog.html

http://stackoverflow.com/questions/9072879/how-to-use-...

http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-back...

http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-conf...

Pozdrawiam.

BWT: Jeśli chodzi o literaturę, to najlepszą książkę jaką przeczytałem o programowaniu w systemach *nix była: wydana przez "Wydawnictwa Naukowo-Techniczne" książka o tytule:

"Programowanie zastosowań sieciowych w systemie Unix" - autor W.Richard Stevens

Niestety pewnie trudno osiągalna - moje wydanie jest z 1995 roku .Tytuł oryginału:
"UNIX Network Programming" by Prentice Hall, Inc.Ten post został edytowany przez Autora dnia 30.01.17 o godzinie 12:44
Darek M.

Darek M. specjalista d/s
wypelniania
formularza

Temat: Programowanie pod linuxem

Maciej G.:
Nie jest to tak jednoznaczne jak piszesz - ten "softdog" używa jednego z timerów procesora (hardware) i raczej nie zdechnie.

Zdechnie, bo jak kernel lezy, to nic nie dziala. Sprzetowe dzialaja odwrotnie - staja sie widoczne jako plik urzadzenia, do ktorego trzeba regularnie pisac (tak nieco upraszczajac). Brak zapisu oznacza, ze system lezy. Jak chwile polezy, to karta (ktora nadal dziala) wysyla reset na plyte. No i jest reset. Udaje sie wylacznie dlatego, ze karta dziala na zewnatrz systemu. Emulacja zdycha razem ze wszystkim.
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Programowanie pod linuxem

Darek M.:
Maciej G.:
Nie jest to tak jednoznaczne jak piszesz - ten "softdog" używa jednego z timerów procesora (hardware) i raczej nie zdechnie.

Zdechnie, bo jak kernel lezy, to nic nie dziala. Sprzetowe dzialaja odwrotnie - staja sie widoczne jako plik urzadzenia, do ktorego trzeba regularnie pisac (tak nieco upraszczajac). Brak zapisu oznacza, ze system lezy. Jak chwile polezy, to karta (ktora nadal dziala) wysyla reset na plyte. No i jest reset. Udaje sie wylacznie dlatego, ze karta dziala na zewnatrz systemu. Emulacja zdycha razem ze wszystkim.

Chyba nie wiesz, że większość CPU ma wbudowany "watch-dog timer" sprzętowy. Jak taki timer został odpowiednio zainicjowany (właśnie w module jądra podczas startu systemu) to działa na poziomie procesora i może dokonać restartu systemu nawet jak inne moduły jądra zdechły(jak niezależny sprzęt zewnetrzny). Poza tym w systemie operacyjnym nie wszystko jest czarno-białe ( jak w życiu) i czasami zdycha część demonów z jakiegoś specyficznego powodu (np. brak pamieci, za wysoka temperatura CPU), ale po wyeliminowaniu powodu można "umarłe" demony znów przywrócić do życia, bez restartu całego systemu i jądra - do tego służy wspomniany "watch-dog daemon" - teoretycznie można z niego kontrolować specyficzny proces )program usera).

Ten "watchdog timer" z jądra jest tak samo sprzętowy jak zewnętrzne urządzenia (no prawie).
Poczytaj sobie o architekturze nowoczesnych procesorów - szczególnie opartych na architekturze ARM, bo teraz bardzo duża część komputerów jest na nich oparta. Każdy w miarę aktualny ARM ma wbudowany sprzętowy "watch-dog timer" .

Patrz ten link:

http://infocenter.arm.com/help/index.jsp?topic=/com.ar...

Sytuacja o której piszesz: soft- dog timer może wystąpić tylko wtedy, kiedy platforma sprzętowa (CPU) nie ma hardwarowych timerów (aktualnie sytuacja bardzo rzadko spotykana, w przeszłości spotykana dużo częściej). Wtedy przy niesprzyjających warunkach (awaria jądra ) taka hipotetyczna sytuacja może wystąpić.

Nie wiem jak to jest aktualnie dla CPU Intela czy AMD (tam timery były kiedyś w osobnej kostce), ale nadal były to rozwiązania sprzętowe.

Pozdrawiam

Zrobiłem małe "investigation" i dla Intel'a WDT jest zlokalizowane w chipsecie dla CPU (ale jest to nadal pełnoprawne rozwiązanie sprzętowe). Nawet znalazłem info, iż jeden z "screen of death" dla Windowsa jest spowodowany właśnie przez 'watch-dog timer".

Patrz linki:

http://forums.guru3d.com/showthread.php?t=404409

https://hardforum.com/threads/what-is-intel-watchdog-ti...

http://www.reviversoft.com/pl/blog/2013/01/clock-watch...Ten post został edytowany przez Autora dnia 30.01.17 o godzinie 17:51
Darek M.

Darek M. specjalista d/s
wypelniania
formularza

Temat: Programowanie pod linuxem

Sciagnij sobie zrodla do setserial, tam bedzie troche przydatnych dupereli do skopiowania, np. jak inicjowac porty.

Następna dyskusja:

Wine pod linuxem i DUDE




Wyślij zaproszenie do