Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pisanie aplikacji pod Linuxa - kilka pytań

Franek k 18 Lip 2015 13:59 795 11
  • #1 18 Lip 2015 13:59
    Franek k
    Poziom 15  

    Witam.
    Na wstępie chcę zaznaczyć, że nie jestem profesjonalnym programistą bardziej amatorem-hobbystą. Mam podstawowe doświadczenie z pisaniem aplikacji na Windowsa. Ale było ich tylko kilka i to dość prostych, na własny użytek. Do tego celu używałem oprogramowania Visual Studio od Microsoftu i języka C++.

    Ostatnio wpadła mi w ręce płytka Olinuxino z procesorem A13. Na kartę pamięci micro SD wgrałem obraz systemu Linux a dokładnie jakaś odmiana Debiana. Teraz płytka startuje na tym systemie. Niestety nie posiada ona wyświetlacza, ma co prawda wyjście na monitor ale jest uszkodzone - w zasadzie to było powodem dla którego otrzymałem tą płytkę. Na szczęście płytkę można podłączyć do komputera przez konwerter USB-UART i Terminal UART na Windowsie, robi za konsole systemową. Po prostu płytka przez UART wysyła tak jakby zawartość okna konsolowego systemu Linux i można dzięki temu działać na tym systemie tak jak z konsoli.

    A wracając do głównego tematu. To znudziło mi się już taka "zabawa" bez celu. Chciałbym stworzyć aplikację na tą płytkę aby wykorzystać jeden z portów UART procesora i komunikować się z zewnętrznym urządzeniem opartym na AVR. Płytka ma też moduł WiFi więc można by też stworzyć jakąś komunikację przez internet. W każdym razie, możliwości i pomysłów sporo, ale najpierw trzeba stworzyć jakąś aplikację, która by była uruchomiona na tej płytce. Z racji tego, że jest tam Debian, a więc system Linux, to też przede mną pierwszy starcie z programowaniem na ten system. Dlatego mam kilka pytań:

    1. Czy istnieje jakieś środowisko podobne do Visual Studio z tym, że umożliwiające pisanie aplikacji pod Linuxa? Oczywiście chciałbym pisać w języku C.
    2. Rozumiem, że nie będzie problemu ze stworzeniem aplikacji konsolowej? Nie potrzebuję tworzyć aplikacji graficznej, bo nie mam jak tego wyświetlić, a przy okazji po co zamulać i tak dość słaby procek ;)
    3. Czy istnieje jakaś różnica na jaką odmianę linuxa się tworzy aplikacje? W sensie czy napisany program bez problemu odpalę na Debianie i Ubuntu? Pytam bo posiadam Ubuntu botowalne z USB i zastanawiam się czy testując tworzoną aplikacje na tym Ubuntu, odpalę ją również później na Debianie uruchomionym na tej płytce Olinuxino?
    4. Na koniec pytanie trochę z innej beczki. Z tego co wiem to ten Debian na mojej płytce rozwojowej, umożliwia jakby zdalne sterowanie przez internet za pomocą SSH. Czy można to wyłączyć, aby mieć pewność, że nikt mi się nie podłączy pod płytkę?

    0 11
  • #3 20 Lip 2015 11:03
    Franek k
    Poziom 15  

    Ok dzięki. Stworzyłem na Ubuntu próbny program wyświetlający w konsoli po uruchomieniu napis "Hello World!". Skompilowałem do pliku hello2 i na Ubuntu działa. Skopiowałem więc na kartę drugą kartę microSD plik wynikowy "hello2" i podłączyłem pod USB na płytce, czytnik kart microSD. I chcąc uruchomić ten programik wydałem polecenie:

    Pisanie aplikacji pod Linuxa - kilka pytań

    Jak widać nie mogę uruchomić ten programu, ponieważ jest odmowa dostępu. Sprawdziłem więc jakie uprawnienia ma ten plik poleceniem:

    Pisanie aplikacji pod Linuxa - kilka pytań

    nie znam się na linuxie, ale z tego co wyczytałem w internecie to widzę, że plik ten nie ma uprawnień do wykonywania (executable). Znalazłem gdzieś informację, że można nadawać plikom uprawnienia. Zrobiłem to tak:

    Pisanie aplikacji pod Linuxa - kilka pytań

    Widać, że konsole nie zwróciła, żadnego błędu czyli powinno być wszystko ok. Tymczasem sprawdzając uprawnienia dla tego pliku nadal nie widać aby miał ustawionego x. Próbowałem ten plik teraz też odpalić ale nadal pojawia się odmowa dostępu. Ktoś wie dlaczego nie mogę zmienić uprawnień?

    0
  • #4 20 Lip 2015 13:24
    yogi009
    Poziom 42  

    Przed Tobą dość obszerny i ciekawy materiał dotyczący uprawnień w linuksie. Drugi zrzut ekranu pokazuje, że ten plik został udostępniony do odczytu wszystkim, do zapisu właścicielowi, a do wykonywania nikomu. Myślę, że kilka ćwiczeń z dostępem do plików/katalogów dobrze Ci zrobi. Prawo do uruchomienia pliku jest jasne, natomiast polecam Ci (na marginesie) doczytać o własności tego prawa w stosunku do katalogu.

    A póki co polecam równoległe programowanie gdzieś w katalogu domowym.

    0
  • #5 20 Lip 2015 14:20
    Franek k
    Poziom 15  

    No właśnie czytałem juz o nadawaniu uprawnień i na screenie 3 widać nawet ze próbuje to zrobić według jednego poradnika. Ale niestety nic się nie zmienia i nie wiem dlaczego

    0
  • #7 20 Lip 2015 18:17
    mcvsama
    Poziom 15  

    Przede wszystkim pytanie o architekturę - skompilowałeś na Ubuntu pewnie pod Intelem? A płytka pewnie działa na ARM? Jeśli tak, to nigdy nie uruchomisz tego programu. Musisz skompilować albo gcc na tym Linuksie pod ARM-em, albo na intelowym Ubuntu cross-compilatorem dla ARM-a, żeby dał Ci binarkę dla ARM-a.

    To samo odnosi się do plików skompilowanych dla 64-bitowej architektury intelowo-amdowej, które próbuje uruchomić się pod 32-bitowym systemem. W drugą stronę to zadziała ze względu na kompatybilność wsteczną (pod warunkiem posiadania zainstalowanych wszystkich wymaganych 32-bitowych bibliotek).

    PS: Tak, przy złej architekturze dostaje się błąd „permission denied”. Podstawowe info na temat binarki możesz sprawdzić za pomocą:

    file /mnt/cośtam/plik-wykonywalny

    Gdzieś tam powinna być wypisana architektura (np. „x86-64”).

    0
  • #8 20 Lip 2015 18:41
    Franek k
    Poziom 15  

    Fakt o architekturze nie pomyślałem, ale ja nawet nie jestem w stanie spowodować uruchomienia tego programiku. A więc tutaj nie jest problemem architektura a brak dostępu. Zrobiłem teraz tak, że wrzuciłem pliki źródłowe z rozszerzeniem .c do folderu na karcie z systemem.

    Dokonałem teraz kompilacji bezpośrednio na płytce uruchomieniowej:

    Pisanie aplikacji pod Linuxa - kilka pytań

    zielona strzałka pokazuje plik wynikowy po kompilacji. I nadal nie mogę go uruchomić bo jest odmowa dostępu. Próbuję uruchomić go poprzedzając "sudo" ale wtedy jest jeszcze gorzej bo otrzymuję "command not found". Próbowałem teraz jeszcze raz nadać temu plikowi uprawnienia x ale nic się nie zmienia. Nawet nadając uprawnienia z "sudo", wszystko jest bez zmian.

    Oto cały zapis konsoli jak próbowałem odpalić ten plik po kompilacji:

    Pisanie aplikacji pod Linuxa - kilka pytań

    Nie mam już pomysłu.


    P.S. Architektura wydaje się być teraz dobra, a wiec ARM:

    Pisanie aplikacji pod Linuxa - kilka pytań

    0
  • Pomocny post
    #9 20 Lip 2015 18:45
    mcvsama
    Poziom 15  

    Teraz nie możesz uruchomić, bo nie masz uprawnień (rw-r--r--; powinno być rwxr-xr-x, albo co najmniej rwxr--r--). Jeszcze jedno pytanie: karta SD jest na jakimś systemie plików wspierającym POSIX-owe uprawnienia? Bo jeśli to jakiś FAT, to na pewno nie zmienisz uprawnień do pliku (FAT ich nie wspiera). Co najwyżej możesz zamontować całą kartę z jakimiś uprawnieniami nadanymi wszystkim plikom i opcją zezwalającą użytkownikowi na uruchamianie z zewnętrznych systemów plików. Ale najlepiej spróbuj skopiować binarkę do katalogu domowego, dopiero tam zmień uprawnienia (chmod 755 hello2) i spróbuj uruchomić stamtąd (./hello2).

    sudo pozwala uruchomić z uprawnieniami innego użytkownika. Tobie i tak się nie przyda, bo i tak już jesteś zalogowany jako root. :-)

    Edit: Acha, jeszcze jedno. GCC sam nadaje uprawnienia wykonywania, więc normalnie nie potrzebujesz tego chmod.

    1
  • #10 20 Lip 2015 22:34
    Franek k
    Poziom 15  

    Dzięki faktycznie chodziło o system plików FAT. Teraz programik się uruchamia :)

    0
  • #11 21 Lip 2015 19:11
    Franek k
    Poziom 15  

    No dobrze, teraz miałbym jeszcze jedną prośbę o pomoc. Zastosowany procesor na dobrą sprawę posiada dwa interfejsy UART. Jeden z nich (ttyS0) jest wyprowadzony na płytce złączem ale wykorzystywany jest przez system do komunikacji z konsolą systemową przy zastosowaniu przejściówki USB-UART, o czym już wspominałem. Taki sposób komunikacji nie jest mi teraz potrzebny bo robię to z wykorzystaniem SSH. A jako, że przydałby mi się ten interfejs do komunikacji z µC zastanawiam się, czy nie można by go jakoś zwolnić z pełnionej obecnie czynności? Pewnie trzeba zmienić jakiś plik konfiguracyjny aby nie był wykorzystywany jako terminal i wtedy dałoby się go zastosować do innych celów. Ale nie wiem za który plik się zabrać.


    Pisanie aplikacji pod Linuxa - kilka pytań

    0
  • #12 21 Lip 2015 21:37
    krru
    Poziom 32  

    Konsola szeregowa zawsze się przyda, bo może się coś stać i system nie będzie startował, wtedy pozostaje właśnie serial. Jeśli chodzi o zwolnienie portu szeregowego to jest taki problem, że port ten wykorzystywany jest po kolei przez wiele komponentów i jest wiele etapów tego 'zwalniania'. Jak już system wystartuje to zwykle jest to getty (logowanie) - uruchamiane zwykle w /etc/inittab oraz kernel (printk) - tutaj to już są parametry ładowania kernela. Wczesniej pewnie z seriala korzysta też bootloader.

    0