Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[OpenOCD][STM32F4][Solved] stm32f4 discovery + openOCD wgrywanie programu

miszcz310 20 Feb 2013 03:17 7308 20
Computer Controls
  • #1
    miszcz310
    Level 22  
    Dzień dobry,
    Nie mogę sobie poradzić z zaprogramowaniem stm32f4 na płytce discovery. Do programowanie używam wbudowanego st-lika. Mój system to Ubuntu 10.04.
    Program jaki chciałbym wgrać to przykład ze strony Freddiego Chopina pod tą właśnie płytkę. Jedyne co zmieniłem to w Makefile'u toolchain na arm-linux-gnueabi (linaro). Ogólnie program się niby kompiluje bez żadnych błędów.

    
    Size of modules:
    arm-linux-gnueabi-size -B -t --common out/startup.o out/gpio.o out/main.o out/vectors.o   
       text	   data	    bss	    dec	    hex	filename
        104	      0	      0	    104	     68	out/startup.o
        404	      0	      0	    404	    194	out/gpio.o
        700	      0	      0	    700	    2bc	out/main.o
        408	      0	      0	    408	    198	out/vectors.o
       1616	      0	      0	   1616	    650	(TOTALS)
     
    Size of target .elf file:
    arm-linux-gnueabi-size -B out/stm32f4_blink_led.elf
       text	   data	    bss	    dec	    hex	filename
       1777	    148	   1028	   2953	    b89	out/stm32f4_blink_led.elf
     


    Skompilowałem sobie openOCD w wersji 0.6.1

    
    openocd --version
    Open On-Chip Debugger 0.6.1 (2013-02-19-00:57)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    
     


    Ogólnie mogę się połączyć z prockiem i mogę resetować i haltować i tak dalej. Problemy zaczęły się jak chciałem wgrać ten przykładowy program. Po kolei mniej więcej co robię:
    1.make w folderze projektu
    2.Przechodzę do folderu cd ./out
    3.Odpalam openOCD poleceniem "openocd -f ~/Pulpit/stm32/openocd-0.6.1/tcl/interface/stlink-v2.cfg -f ~/Pulpit/stm32/openocd-0.6.1/tcl/target/stm32f4x_stlink.cfg "
    4. Łączę się przez telnet w drugim terminalu poleceniem: "telnet localhost 4444"
    5.Wpisuję "reset halt"
    6.Wpisuję "flash probe 0"
    7.Wpisuję "flash write_image erase unlock stm32f4_blink_led.bin 0x08000000"
    8. Tutaj się zaczynają dziać złe rzeczy. W najlepszej sytuacji zgłasza, że zaprogramował, ale po "reset run" nic nie mruga. Niby status po "poll" jest "running", ale nic się nie dzieje. Czasem po erase się zawiesza openOCD to znaczy diodka od st-linka sobie mruga zielono, czerwono, ale nic się nie dzieje.To znaczy nie zgłasza się czy wgrał czy nie po prostu wygląda to jakby się zawiesił. Czasem wyskakują jakieś błędy, że nie może pisać do flash (ale to było z tego co pamiętam tylko raz).

    Zrzut tego co wypluje openOCD przy najlepszym razie:
    Open On-Chip Debugger 0.6.1 (2013-02-19-00:57)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    adapter speed: 1000 kHz
    Info : clock speed 1000 kHz
    Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
    Info : accepting 'telnet' connection from 4444
    target state: halted
    target halted due to debug-request, current mode: Thread 
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: halted
    target halted due to debug-request, current mode: Thread 
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    Info : device id = 0x10016413
    Info : flash size = 1024kbytes
    Info : device id = 0x10016413
    Info : flash size = 1024kbytes
    flash 'stm32f2x' found at 0x08000000
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: halted
    target halted due to debug-request, current mode: Thread 
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    auto erase enabled
    auto unlock enabled
    target state: halted
    target halted due to breakpoint, current mode: Thread 
    xPSR: 0x61000000 pc: 0x20000042 msp: 0xfffffffc
    wrote 16384 bytes from file stm32f4_blink_led.bin in 1.285954s (12.442 KiB/s)
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: halted
    target halted due to breakpoint, current mode: Thread 
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: running
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: running
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: running
    

    Ogólnie już siedzę nad tym kolejny dzień i nie daje mi to spokoju. Pewnie robię jakiś dziecinny błąd. Przeglądałem podobne tematy, ale takiego, żeby się procek programował i program nie działał (niby działał) nie znalazłem.
    W załączniku dodaje plik wygenerowany przez make.
    Proszę o jakieś nakierowanie co mogę robić źle, z góry dziękuję za wszelką pomoc. Oczywiście jestem początkujący w tematyce ARM, wcześniej programowałem trochę w AVR, ale to w porównaniu do ARM są zabaweczki...
  • Computer Controls
  • Helpful post
    #2
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    Jedyne co zmieniłem to w Makefile'u toolchain na arm-linux-gnueabi (linaro).

    Jest to bardzo poważny błąd, bo to NIE JEST toolchain bare-metal! To MUSI być arm-none-eabi- i na stronie linaro jest też paczka dla linuxa
    https://launchpad.net/gcc-arm-embedded/4.7/4.7-2012-q4-major

    miszcz310 wrote:
    openocd -f ~/Pulpit/stm32/openocd-0.6.1/tcl/interface/stlink-v2.cfg -f ~/Pulpit/stm32/openocd-0.6.1/tcl/target/stm32f4x_stlink.cfg "

    Prościej będzie "openocd ... board/stm32f4discovery.cfg" (tylko jeden plik konfiguracyjny).

    miszcz310 wrote:
    "flash write_image erase unlock stm32f4_blink_led.bin 0x08000000"

    Najwygodniej wgrywać pliki .hex, bo nie trzeba podawać offsetu (;

    4\/3!!
  • #3
    miszcz310
    Level 22  
    Freddie Chopin wrote:
    miszcz310 napisał:
    Jedyne co zmieniłem to w Makefile'u toolchain na arm-linux-gnueabi (linaro).

    Jest to bardzo poważny błąd, bo to NIE JEST toolchain bare-metal! To MUSI być arm-none-eabi- i na stronie linaro jest też paczka dla linuxa
    https://launchpad.net/gcc-arm-embedded/4.7/4.7-2012-q4-major


    No mówiłem dziecinny błąd... Nie wiem skąd mi się wzięło ten arm-linux... Wcześniej zastanawiałem się jeszcze czemu wszystkie gdziekolwiek opisane toolchainy mają właśnie to -none- w sobie. Teraz stało się to jasne jak Słońce.

    Freddie Chopin wrote:
    miszcz310 napisał:
    openocd -f ~/Pulpit/stm32/openocd-0.6.1/tcl/interface/stlink-v2.cfg -f ~/Pulpit/stm32/openocd-0.6.1/tcl/target/stm32f4x_stlink.cfg "

    Prościej będzie "openocd ... board/stm32f4discovery.cfg" (tylko jeden plik konfiguracyjny).


    Dobrze wiedzieć, dziękuję będę się do tego stosował. :P (Zawsze to mniej klepania, choć teraz pewnie skonfiguruję sobie do końca eclipse'a)

    Freddie Chopin wrote:
    miszcz310 napisał:
    "flash write_image erase unlock stm32f4_blink_led.bin 0x08000000"

    Najwygodniej wgrywać pliki .hex, bo nie trzeba podawać offsetu (;

    4\/3!!


    To też cenna uwaga. Jeżeli dobrze rozumiem to wtedy nie trzeba się martwić jaka jest konfiguracja pamięci w danym układzie.

    Bardzo dziękuję za pomoc wszystko już działa. Normalnie aż mi się buzia ucieszyła do monitora jak zadziałało wreszcie. :P

    Jednak martwi mnie, że czasem OpenOCD się zawiesza. Czy kabel ~0.5m może być tego przyczyną (mam kabel od aparatu i jest na nim nawet taki-niby-filtr, pewnie tylko zgrubienie z plastiku, ale zawsze).
  • #4
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    Wcześniej zastanawiałem się jeszcze czemu wszystkie gdziekolwiek opisane toolchainy mają właśnie to -none- w sobie. Teraz stało się to jasne jak Słońce.

    To powinno wiele wyjaśnić - http://airs.com/ian/configure/configure_4.html

    miszcz310 wrote:
    Dobrze wiedzieć, dziękuję będę się do tego stosował. (Zawsze to mniej klepania, choć teraz pewnie skonfiguruję sobie do końca eclipse'a)

    Jeśli OpenOCD masz tam gdzie te skrypty (czyli w ~/Pulpit/stm32/openocd-0.6.1/bin) to możesz po prostu pominąć cały początek "~/Pulpit/stm32/openocd-0.6.1/" (być może nawet to "tcl/") - tak też powinno działać, OpenOCD ma tam jakieś typowe ścieżki w których szuka tych plików. Ewentualnie po "make install" to też powinno działać z samymi target/, interface/ czy board/.

    miszcz310 wrote:
    To też cenna uwaga. Jeżeli dobrze rozumiem to wtedy nie trzeba się martwić jaka jest konfiguracja pamięci w danym układzie.

    Konfiguracja pamięci jest wtedy determinowana przez proces linkowania, a że plik .hex (podobnie jak .elf) zawiera adresy, to przy samym wgrywaniu Cię już ten offset nie obchodzi.

    miszcz310 wrote:
    Jednak martwi mnie, że czasem OpenOCD się zawiesza. Czy kabel ~0.5m może być tego przyczyną (mam kabel od aparatu i jest na nim nawet taki-niby-filtr, pewnie tylko zgrubienie z plastiku, ale zawsze).

    Jeśli mowa o kablu USB to nie szukałbym tu problemu - ja nigdy jeszcze nie użyłem kabla krótszego niż te standardowe 1.8m i wszystko działa jak trzeba. Jak "wygląda" to zawieszenie?

    4\/3!!
  • Computer Controls
  • #5
    miszcz310
    Level 22  
    Dzięki za linki. W dzisiejszych czasach nie jest problemem dostępność wiedzy, tylko jej selekcja. Na pewno poczytam
    Freddie Chopin wrote:
    miszcz310 napisał:
    Jednak martwi mnie, że czasem OpenOCD się zawiesza. Czy kabel ~0.5m może być tego przyczyną (mam kabel od aparatu i jest na nim nawet taki-niby-filtr, pewnie tylko zgrubienie z plastiku, ale zawsze).

    Jeśli mowa o kablu USB to nie szukałbym tu problemu - ja nigdy jeszcze nie użyłem kabla krótszego niż te standardowe 1.8m i wszystko działa jak trzeba. Jak "wygląda" to zawieszenie?

    4\/3!!

    No właśnie też mi się nie chce w to wierzyć. Ogólnie to się dzieje przy próbie wgrywania programu. Wpisuję "flash write_image erase unlock stm32f4_blink_led.hex" i dostaję coś takiego:

    auto erase enabled
    auto unlock enabled
    [tutaj jest kursor]
    Tylko, że nic więcej się nie pojawia. Dioda od st-linka mruga sobie zmieniając kolorki i nic się już nie dzieje. W telnecie brak reakcji na jakiekolwiek komendy. Wtedy jak wymuszę zamknięcie przez ctr+c i odpalę od nowa z całym procesem wgrywania programu to wtedy właśnie najczęściej przy tej drugiej próbie się udaje.
  • #7
    miszcz310
    Level 22  
    O! i znowu wychodzi moja niewiedza. Nie dawałem "reset init".
    Nie no teraz to wgrywam już hexa zgodnie z radą i z tym "reset init" nie "udaje" mi się zawiesić programu (bardziej procka chyba).
    Dobra jeszcze raz dziękuję bardzo bo to są drobne pierdółki a uprzykrzają początki.
    Powiem szczerze, że aż mi głupio, że takie błędy robię. Rozumiem też, że poświęcasz mi swój czas. Bardzo jeszcze raz za to dziękuję. Dlatego z szacunku do Ciebie (i Twojego czasu) chciałem się dowiedzieć o jakiś sensowny tutorial (chodzi mi o coś na zasadzie "Gdybym ja teraz zaczynał moją przygodę z stm32 to by zrobił pewne rzeczy inaczej mianowicie:") do stm32 (chyba do innych niż f4 też może być, może uda mi się przysposobić kod). Chodzi mi o to żebym nie zgłaszał się tutaj z każdym problemem (które na razie wydają się strasznie głupie, błache) i wynikające z mojej niewiedzy. Aha jakby co to mam też jeszcze discovery stm32f051 (ten taki z pseudo shieldem) i chyba od tego zacznę naukę jak już mam postawione środowisko (działające!), bo trochę jednak prostszy jest (chyba wolę metodę małych kroczków z sukcesywnym komplikowaniem przykładów).
    Z góry dziękuję.
  • #8
    Freddie Chopin
    MCUs specialist
  • #9
    miszcz310
    Level 22  
    Dzięki. Te 3 pierwsze tematy znam. Ogólnie to z moim zdaniem w polskim internecie jak się zaczyna szukać informacji o ARM to Twój tutek to jest pozycja obowiązkowa. :P
    Dwóch kolejnych tematów z ręką na sercu przyznaję się nie czytałem całych (bo zniechęciłem się objętością), ale jak radzisz to przejrzę.
    Ostatni temat to widzę nowość dla mnie. Jeszcze go nie widziałem. Na szybko wygląda sensownie. Aha, pamiętam też, że jak konfigurowałem sobie eclipse to się wkurzałem, że gdb mi się krzaczy, ale teraz wiem, że jak stosowałem je z pakietu arm-linux- zamiast arm-none- no to nie dziwota, że nie działało.
    Dzięki za linki jak się przez to przewalę i coś będzie niezrozumiałe dla mnie to wtedy pozwolę sobie napisać.
  • #10
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    Dwóch kolejnych tematów z ręką na sercu przyznaję się nie czytałem całych (bo zniechęciłem się objętością), ale jak radzisz to przejrzę.

    Możesz je przejrzeć pobieżnie, od końca i skupić się na moich postach, to będziesz mniej więcej wiedział co się zmieniło (;

    4\/3!!
  • #11
    miszcz310
    Level 22  
    Kurcze znowu bieda... Tym razem gdb w eclipse. Nie wiem czy dobrze wpisuję komendy w startup. Na razie chcę odtworzyć funkcjonalność programowania wsadu, wpisuję tak:

    
    monitor reset halt
    monitor reset init
    mon flash write_image erase unlock out/stm32f4_blink_led.hex
    


    Nic nie zaznaczam innego w tym oknie konfiguracji (start up).
    Eclipse wypluwa coś takiego:
    
    target remote localhost:3333
    putpkt: write failed: Przerwany potok.
    monitor reset halt
    "monitor" command not supported by this target.
    monitor reset init
    "monitor" command not supported by this target.
    mon flash write_image erase unlock out/stm32f4_blink_led.hex
    "monitor" command not supported by this target.
    

    Nie bardzo wiem czemu nie rozumie polecenia monitor. Jak usunę to słowo to gdb nie rozumie pozostałych poleceń (i tak chyba powinno być). Szukałem w internecie ale jakoś nie mogłem znaleźć czegoś co by u mnie działało.
  • #12
    Freddie Chopin
    MCUs specialist
    W przykładzie masz prawidłowo skonfigurowane skróty do GDB - jak chcesz programować przez "flash write_image ..." to GDB nie służy do tego - GDB sam sobie załaduje wsad.

    Zobacz jak to jest zrobione w przykładowej konfiguracji i dopiero jak Ci zadziała to kombinuj.

    P.S. OpenOCD uruchomione w tle?

    4\/3!!
  • #13
    miszcz310
    Level 22  
    OpenOCD chodzi ładnie w tle. Zrobiłem według tutka.
    Jak konfiguruję według tutorialu:

    Init:
    [code]
    monitor reset
    monitor soft_reset_halt
    monitor mww 0xE01FC040 0x0002
    load
    [\code]

    i zaznaczenie main i resume to wypluwa takie coś:
    [code]
    target remote localhost:3333
    putpkt: write failed: Przerwany potok.
    monitor reset
    "monitor" command not supported by this target.
    monitor soft_reset_halt
    "monitor" command not supported by this target.
    monitor mww 0xE01FC040 0x0002
    "monitor" command not supported by this target.
    load
    You can't do that when your target is `exec'
    tbreak main
    Temporary breakpoint 1 at 0x800038a: file main.c, line 82.
    continue
    The program is not being run.
    [\code]


    putpkt: write failed: Przerwany potok.
    Tutaj jakby się jakaś komunikacja zrywała.
  • #14
    Freddie Chopin
    MCUs specialist
    Te komendy które wrzuciłeś są dla LPC2148 przecież... Skorzystaj z przykładów ze strony - tam SĄ skonfigurowane i działające skróty do GDB. Zainstalowałeś właściwą (aktualną) wersję wtyczki GDB Hardware Debugging? Masz nowe Eclipse? Co pokazuje w tym czasie OpenOCD?

    4\/3!!
  • #15
    miszcz310
    Level 22  
    Kurcze ostatnio mało sypiam i już zaczynam mieć problemy z koncentracją. Ogólnie próbowałem innych komend niż te co przedstawiłem.
    Przeszukałem Twoją stronę nie znalazłem tych komend dla stm32f4 jedyne co znalazłem to cały projekt tego migacza led ale tam nic nie widzę też... :<
    Moje eclipse to :
    Eclipse SDK
    Version: 3.5.2
    Build id: M20100211-1343
    Czyli chyba stareńkie.
    Wtyczka jest w wersji: Eclipse C/C++ GDB Hardware Debugging 5.0.2.200902130801
    Trudno jest mi powiedzieć czy to jest aktualna wersja.
    No OpenOCD moim zdaniem wypluwa to co napisałem.
    Jejku no normalnie, aż mi wstyd co chwila jak jeden kroczek w przód to dwa w tył. :<
  • #16
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    Przeszukałem Twoją stronę nie znalazłem tych komend dla stm32f4 jedyne co znalazłem to cały projekt tego migacza led ale tam nic nie widzę też... :<

    Po _zaimportowaniu_ tego projektu do _prawidłowo_ skonfigurowanego Eclipse skróty do GDB się pojawią.

    miszcz310 wrote:
    Moje eclipse to :
    Eclipse SDK
    Version: 3.5.2
    Build id: M20100211-1343
    Czyli chyba stareńkie.
    Wtyczka jest w wersji: Eclipse C/C++ GDB Hardware Debugging 5.0.2.200902130801

    Zaktualizuj - obydwa są tak stare że w ogóle nie ma się co zastanawiać nad przyczyną problemów. Wtyczka MUSI pasować do wersji Eclipse (należy ją ściągnąć z linku który zawiera w sobie nazwę wersji Eclipse).

    miszcz310 wrote:
    No OpenOCD moim zdaniem wypluwa to co napisałem.

    Przecież to co wrzuciłeś to jest wyjście z GDB, a nie OpenOCD...

    4\/3!!
  • #17
    miszcz310
    Level 22  
    Matko Bosko Kochano! Działa (chyba).
    Ogólnie to widoczna była od razu konfiguracja OpenOCD (musiałem ścieżkę tylko zmienić), natomiast nie było widać konfiguracji do debugowania, dlatego sam utworzyłem nową niby działa (znaczy nie wiem jaki powinien być wynik działania), ale błędy się nie pokazują. Pokazał się kod funkcji main i w okienku disassembly pojawia się jakiś kod asemblerowy. Także to chyba kończy sprawę. Ogólnie mogę kontynuować program, pauzować, kończyć debugowanie. Dodam, że konfiguracja jest prawie domyślna, jedyne co zmieniłem to odhaczyłem reset i halt i wpisałem monitor reset halt
    monitor reset init
    i zaznaczyłem, żeby sam ładował obraz (pewnie tutaj nie powinien tego robić) i symbole potem break point at main i zahaczyłem Resume.
    Ogólnie jakoś tak ładniej wygląda to środowisko.

    Jeziu nawet podgląd do zmiennych jest. Co się w ogóle dzieje?! Co tu jeszcze można robić w ogóle?! Prawie samo to środowisko (eclipse + wszystkie dodatki ) chyba programuje nawet.

    Ja piernicze, w ogóle wykonywanie programu komenda po komendzie ze śledzeniem w kodzie pomiędzy plikami w projekcie. Wszystko automatycznie. W ogóle patrzę i nie wiem co powiedzieć, ani pomyśleć...
  • #18
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    odhaczyłem reset i halt i wpisałem monitor reset halt
    monitor reset init

    Wystarczy tylko to drugie

    miszcz310 wrote:
    i zaznaczyłem, żeby sam ładował obraz (pewnie tutaj nie powinien tego robić) i symbole potem break point at main i zahaczyłem Resume.

    Jak będziesz mieć nowe Eclipse i nową wtyczkę GDB to nie ma siły aby te konfiguracje nie były widoczne - wtedy zobaczysz jak to jest w przykładzie (bo są dwie różne - z programowaniem i bez programowania). Czasem można sprawdzić czy w okienku Debug Configurations nie są włączone jakieś filtry które by ukrywały te konfiguracje...

    miszcz310 wrote:
    W ogóle patrzę i nie wiem co powiedzieć, ani pomyśleć...

    Pomyśl że to wszystko za free (; Zainstaluj sobie jeszcze wtyczkę do podglądu rejestrów układów peryferyjnych (embsysregview), to w ogóle będzie odlot [;

    4\/3!!
  • #19
    miszcz310
    Level 22  
    Dokładnie tak było z tymi filtrami. Widoczne były 10 z 12, akurat te dwie konfiguracje obcięło. Jedyne co w nich zmieniłem to nazwa projektu (inaczej sobie nazwałem), ukośnik w drugą stronę w ścieżce dostępu do .elf (z / na \) no i ścieżkę do gdb. Wszystko hula jak miło. :P

    Zainstalowałem tę wtyczkę (embsysregview), też działa. Tylko się zastanawiam czy można jakoś odświeżanie ulepszyć (ale to pewnie długo by trwało sczytywanie wartości ze wszystkich pryferiów). Ogólnie bajka. :P

    Dziękuję bardzo serdecznie kolejny raz.
  • #20
    Freddie Chopin
    MCUs specialist
    miszcz310 wrote:
    Jedyne co w nich zmieniłem to nazwa projektu (inaczej sobie nazwałem)

    No i właśnie dlatego ich nie widziałeś (;

    miszcz310 wrote:
    ukośnik w drugą stronę w ścieżce dostępu do .elf (z / na \)

    Faktycznie w projekcie jest z backslashem - muszę pamiętać żeby to kiedyś poprawić (;

    miszcz310 wrote:
    ścieżkę do gdb

    Nie masz dodanych tych plików do systemowego PATH że musiałeś tam coś zmieniać (w projekcie jest wpisana tylko nazwa pliku, bez ścieżki)?

    4\/3!!
  • #21
    miszcz310
    Level 22  
    Freddie Chopin wrote:

    Nie masz dodanych tych plików do systemowego PATH że musiałeś tam coś zmieniać (w projekcie jest wpisana tylko nazwa pliku, bez ścieżki)?


    No nie mam. Chciałem sobie zrobić (właściwie to zrobiłem) jeden folder ze wszystkim. W eclipse użyć ścieżek względnych i mieć coś takiego przenośnego (w sensie po formacie). Nie udało się to do końca ale nie narzekam. Spełnia na razie moje oczekiwania (spod eclipse'a nawet tego sajgonu ze ścieżkami nie widać). Jak przejdę z Ubuntu na Xubuntu to zrobię sobie z tym porządek. Dodatkowo nauczyłem się, że jak się instaluje różne nowe rzeczy to chyba najlepiej pierw zrobić kopie zapasową systemu i najpierw instalować na wirtualnej maszynie, co by właśnie uniknąć robienia sajgonu. Znaczy bo i tak nie uzyskam pełnej przenośności bo np. niektóre rzeczy i tak bym musiał przekompilowywać. Teraz w planie będę miał odchudzenie linaro (pewnie ściągnę Twoją wersję), ale to jak programu zaczną się rozrastać, bo do migania diodami nie potrzebne premature optimizations.