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

i.MX6 buildroot - budowanie Linuxa''a

Damian7546 26 Kwi 2019 10:04 1437 58
  • #31
    szelus
    Specjalista - Mikrokontrolery
    Błąd mówi, że brakuje kompilatora c++ w toolchainie. Upewnij się, że ta opcja jest ciągle włączona.
  • PCBway
  • #32
    Damian7546
    Poziom 21  
    @szelus Powyższy problem nieaktualny. Zbudowałem jeszcze raz z nodejs i przeszło.
    Dziś wieczorem próby z uruchomieniem na sprzęcie na karcie SD.

    Jeszcze pewnie wynikną problemy z konfiguracja uboota.
    Pewny jestem że kartę wykrywa jako mmcblk2, a więc zmienna środowiskowa do startu rootfs's to:
    setenv rootfsinfo 'root=/dev/mmcblk2p2 rootwait rw'

    natomiast żeby kernela nie czytało z wewnętrznej pamięci tylko z karty z wcześniejszych prób wynikło że trzeba ustawić

    setenv mmcdev 0 -- Chociaż mało to logiczne.Ale to tylko domysły.

    Jeszcze pytanie dlaczego mój uboot szuka akurat takiej nazwy: imx6dl-sc200-ldo.dtb , gdzieś to można zmienić ?
  • #33
    szelus
    Specjalista - Mikrokontrolery
    Damian7546 napisał:
    Jeszcze pewnie wynikną problemy z konfiguracja uboota.
    Pewny jestem że kartę wykrywa jako mmcblk2, a więc zmienna środowiskowa do startu rootfs's to:
    setenv rootfsinfo 'root=/dev/mmcblk2p2 rootwait rw'

    natomiast żeby kernela nie czytało z wewnętrznej pamięci tylko z karty z wcześniejszych prób wynikło że trzeba ustawić

    setenv mmcdev 0 -- Chociaż mało to logiczne.Ale to tylko domysły.

    Wyraźnie nastąpiła jakaś niespójność w konfiguracji uboota i linuxa na tą platformę.
    Linux robi autodetekcję i wykrywa 4 kontrolery mmc, ale dwa pierwsze nieaktywne. Pod mmc2 wykrywa kartę SD i pod mmc3 wbudowaną pamięć (eMMC).
    Nie znam się zbytnio na uboocie, ale wygląda, że konfiguracja sprzętu jest ustalana "na sztywno" w czasie budowania i ten u Ciebie został wybudowany z konfiguracją mmc0 == SD i mmc1 == eMMC.

    Damian7546 napisał:
    Jeszcze pytanie dlaczego mój uboot szuka akurat takiej nazwy: imx6dl-sc200-ldo.dtb , gdzieś to można zmienić ?

    Za to odpowiada zmienna uboota
    Kod: bash
    Zaloguj się, aby zobaczyć kod
  • #34
    Damian7546
    Poziom 21  
    Problem podobny do tego co wcześniej :

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Dodano po 8 [minuty]:

    Dalej jądro nie widzi mmcblk2
  • #35
    szelus
    Specjalista - Mikrokontrolery
    Okazuje się, że głupio przyjąłem, iż skoro jest to dystrybucja linuxa dla tej właśnie platformy, do główny defconfig powinien być odpowiedni. Ale chyba nie...

    Spróbuj zmienić w ustawieniach kernela wybór konfiguracji na "use in tree defconfig" oraz "defconfig name" na "sc200" i przebuduj. Tylko u mnie jakby dependencje buildrootowe nie zadziałały, więc przez przebudowaniem na wszelki wypadek usuń zawartość katalogu output.


    A jednak muszę poprawiać sam siebie. :( Główny defconfig jest identyczny z tym sc200.
    W takim razie pozostają trzy opcje:
    1. Odpytać źródło, dlaczego jądro nie działa i co można z tym zrobić. Albo gdzie znaleźć źródła starego jądra.
    2. Pozostać przy starym, binarnym jądrze (3.x.x) i dopasować do niego buildroot-a.
    3. Spróbować samemu skonfigurować jądro. Ale tej opcji się nie podejmę bez schematu płytki.
  • #36
    Damian7546
    Poziom 21  
    szelus napisał:
    Główny defconfig jest identyczny z tym sc200.


    Możesz napisać co porównujesz ? Defconfig z gita z...?
  • PCBway
  • #37
    szelus
    Specjalista - Mikrokontrolery
    Ten z głównego katalogu w git z arch/arm/config/sc200_defconfig, też z git.
  • #38
    Damian7546
    Poziom 21  
    Dostałem informwcje że powinienem używać drzewa imx6dl-sc200-ldo.dtb. użycie imx6dl-sabresd.dtb powoduje wyrzucenie ww. błędów. Czyli? :)
  • #39
    szelus
    Specjalista - Mikrokontrolery
    W źródłach linuxa (tych z git) znajduje się odpowiedni plik dts (arch/arm/boot/dts/imx6dl-sc200-ldo.dts).
    Spróbuj przepuścić go z ręki przez kompilator drzewa urządzeń (komenda "dtc -O dtb imx6dl-sc200-ldo.dts) i użyć utworzonego pliku dtb.
  • #40
    Damian7546
    Poziom 21  
    Nie da się tego dodać w buildroot'a?

    Nie mogę zainstalowac kompilatora drzewa urządzeń :

    Kod: bash
    Zaloguj się, aby zobaczyć kod
  • #41
    szelus
    Specjalista - Mikrokontrolery
    Zanim zaczniemy dodawać do buildroot'a konfigurację dla tej konkretnej platformy, warto sprawdzić, że zmierzamy w dobrym kierunku.
    Binarkę dtc powinieneś mieć też wybudowaną przez buildroot'a w katalogu output/host/bin.
    Problem z instalacją najprawdopodobniej jest spowodowany tym, że masz gdzieś w tle uruchomiony inny proces instalatora.
  • #42
    Damian7546
    Poziom 21  
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Coś nie tak ...
  • Pomocny post
    #43
    szelus
    Specjalista - Mikrokontrolery
    Wybudowanie "z ręki" pliku dtb na podstawie plików dts dostępnych w drzewie jądra jest rzeczywiście bardziej skomplikowane... Owszem, nie robiłem tego do tej pory.

    W każdym razie, faktycznie na ten moment najprostsza będzie zmiana konfiguracji buildroot'a.
    Wejdź do menucongig->Kernel, zmień "In-tree Device Tree Source file names" na "imx6dl-sc200-ldo" i przebuduj.
    Gdyby się budowanie nie udało, to usuń podkatalogi output/images/, output/build/kernel-HEAD/ oraz output/build/uboot-rel_imx_4.9.x_1.0.0_ga/ i przebuduj jeszcze raz.
  • #44
    Damian7546
    Poziom 21  
    Teraz niby się uruchomił... Pytanie czy to normalne że widzę po "ifconfig" tylko lo ? Nie powinienem widzieć pozostałych dwóch kart sieciowych ?
  • #45
    szelus
    Specjalista - Mikrokontrolery
    A czy ja wyglądam na wróżkę? :D
    Nie mam tego sprzętu, więc mogę tylko coś ocenić po logach, które zamieścisz.
  • #46
    Damian7546
    Poziom 21  
    Logi ze startu:
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Dodano po 1 [minuty]:

    I jest tylko tyle...


    # ifconfig
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

    #


    A mam dwie karty sieciowe w tym urządzeniu
  • #47
    szelus
    Specjalista - Mikrokontrolery
    Teraz start jądra wygląda znacznie lepiej, chociaż są jeszcze jakieś drobne błędy. Ale nie widzę inicjalizacji drivera sieciowego - później sprawdzę konfigurację jądra.
    Na pewno masz dobrze skopiowany rootfs? Log sugeruje problem z montowaniem, jakby wcześniej obraz był zamontowany przez starą wersję systemu (jako ext2).
  • #48
    Damian7546
    Poziom 21  
    szelus napisał:
    Na pewno masz dobrze skopiowany rootfs?

    Zawszę robię to tak że po zbudowaniu plików przez buildoorta Disks-> wybieram moją kartę pamięci --> Restore disk image i wskazuję obraz wygenerowany przez buildoorta.

    Niepokoi mnie tylko fakt że muszę zmiennej dev za każdym razme przypisywac 0 bo ciągle wraca do 1.
  • #49
    szelus
    Specjalista - Mikrokontrolery
    Spróbuj w pliku defconfig podmienić linijkę
    Code:
    CONFIG_NET_VENDOR_NATSEMI is not set

    na
    Code:
    CONFIG_NET_VENDOR_NATSEMI=y
    
    CONFIG_NET_VENDOR_NETRONOME=y
    CONFIG_NET_VENDOR_8390=y
    CONFIG_AX88796=y
    CONFIG_AX88796_93CX6=y


    I wybuduj jeszcze raz. Oczywiście teraz z nowym plikiem defconfig.
    Jeżeli chodzi o image, to osobiście nie ufam narzędziom graficznym i zawsze korzystam z komendy dd. Ale to trochę 'oldschool-owe' rozwiązanie. KOrzystanie przez Ciebie z file managera może tłumaczyć problem z czystym montowaniem. Natomiast nie wiem o jakiej zmiennej dev mówisz.

    Jakie właściwie interfejsy sieciowe są dostępne (sprzęt) na tej platformie?
  • #50
    Damian7546
    Poziom 21  
    szelus napisał:
    Spróbuj w pliku defconfig podmienić linijkę
    Kod:
    CONFIG_NET_VENDOR_NATSEMI is not set

    na
    Kod:
    CONFIG_NET_VENDOR_NATSEMI=y
    CONFIG_NET_VENDOR_NETRONOME=y
    CONFIG_NET_VENDOR_8390=y
    CONFIG_AX88796=y
    CONFIG_AX88796_93CX6=y


    I wybuduj jeszcze raz. Oczywiście teraz z nowym plikiem defconfig.

    Rozumie że mam to zmienić lokalnie w pliku sc200_defconfig ?
    Jeśli tak to nie pomaga ta zmiana .

    Interfejsy dostępne w komputerku:
    i.MX6 buildroot - budowanie Linuxa''a

    COMy działają :)

    szelus napisał:
    Natomiast nie wiem o jakiej zmiennej dev mówisz.


    mmc0 == SD i mmc1 == eMMC.

    ciągle zmienna mmcdev jest ustawiona na 1.
    Po każdym restarcie żeby czytał mi jądro z karty sd muszę ustawiać tą zmienną. Jeśli nie to ładuje stare jądro które jest w eMMC

    Dodano po 25 [minuty]:

    Użyłem też narzędzia dd - efekt ten sam
  • #51
    szelus
    Specjalista - Mikrokontrolery
    Próbowałeś tego
    szelus napisał:
    Gdyby się budowanie nie udało, to usuń podkatalogi output/images/, output/build/kernel-HEAD/ oraz output/build/uboot-rel_imx_4.9.x_1.0.0_ga/ i przebuduj jeszcze raz.
    po zmianie defconfig?
    Załącz logi po zmianie.
    Takie ładne obrazki niewiele mi mówią. Na trzecim, to dwa gniazda ethernet?
  • #52
    Damian7546
    Poziom 21  
    Zmieniłem to o czym pisałeś w pliku "sc200_defconfig" który jest u mnie lokalnie na komputerze...
    Tylko nie jestem pewien czy wogóle buildroot z niego korzysta? czy tego w sieci dostepnego na github ?

    Dodano po 2 [godziny] 12 [minuty]:

    szelus napisał:
    Takie ładne obrazki niewiele mi mówią. Na trzecim, to dwa gniazda ethernet?

    Tak.

    szelus napisał:
    Próbowałeś tego
    szelus napisał:
    Gdyby się budowanie nie udało, to usuń podkatalogi output/images/, output/build/kernel-HEAD/ oraz output/build/uboot-rel_imx_4.9.x_1.0.0_ga/ i przebuduj jeszcze raz.
    po zmianie defconfig?


    Po zmianie "sc200_defconfig" lokalnie na komputerze wyczyściłem plik z poprzedniego budowania i zbudowałem od początku system - efekt ten sam
  • #53
    Damian7546
    Poziom 21  
    Dalej ten sam efekt - nie widoczne karty sieciowe w systemie ,
    a poniżej log:
    Kod: bash
    Zaloguj się, aby zobaczyć kod
  • #54
    szelus
    Specjalista - Mikrokontrolery
    Moim zdaniem jest jakiś rozjazd pomiędzy konfiguracją jadra a konfiguracją DTB.
    Spróbuj dwóch rzeczy:

    1 Wrzuć log z komendy
    Kod: bash
    Zaloguj się, aby zobaczyć kod
    po załadowaniu linuxa.

    2. Spróbuj załadować nowe jadro korzystając ze starego DTB - zmień konfigurację uboot-a na
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    I też wrzuć log.
  • #55
    Damian7546
    Poziom 21  
    szelus napisał:
    1 Wrzuć log z komendy
    Kod: bash [rozwiń] [zaznacz wszystko]

    dmesg | grep eth

    po załadowaniu linuxa.


    # dmesg | grep eth
    2188000.ethernet supply phy not found, using dummy regulator
    fec 2188000.ethernet eth0: registered PHC device 0



    szelus napisał:
    2. Spróbuj załadować nowe jadro korzystając ze starego DTB - zmień konfigurację uboot-a na
    Kod: bash [rozwiń] [zaznacz wszystko]

    setenv bootcmd_emmc 'run bootargset; fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} ;fatload mmc ${mmcdev_dtb}:${mmcpart_dtb} ${fdt_addr} ${fdt_file} ; bootz ${loadaddr} - ${fdt_addr}'
    setenv mmcdev_dtb 1
    setenv mmcpart_dtb 1



    I też wrzuć log.


    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Moderowany przez dondu:

    Logi proszę umieszczać za pomocą SYNTAX BASH
    Poprawiłem.

  • #56
    Damian7546
    Poziom 21  
    szelus napisał:
    1 Wrzuć log z komendy
    Kod: bash [rozwiń] [zaznacz wszystko]

    dmesg | grep eth

    po załadowaniu linuxa.



    Poniżej log z komendy:
    dmesg | grep eth
    dla działającego jądra i rootfs'a znajdującego się w wewnętrznej pamięci.

    Kod: bash
    Zaloguj się, aby zobaczyć kod
  • #57
    szelus
    Specjalista - Mikrokontrolery
    To widzę będzie bardziej złożony problem. U mnie działa, ale ja mam zupełnie inną wersję i.MX6 (https://somlabs.com/product/visionsom-6ull i ich płytę nośną). Muszę na spokojnie porównać device tree.
  • #58
    Damian7546
    Poziom 21  
    @szelus jakiś pomysł ?
  • #59
    szelus
    Specjalista - Mikrokontrolery
    Nestety, ostatnio mam strasznie mało wolnego czasu i nie dałem rady "wgryźć się" w device tree.
    Spróbuj może zrobić taki eksperyment - pobierz ten obraz karty. To jest obraz dla mojej płytki, ale jądro powinno być uniwersalne, pod warunkiem użycia właściwego DT. Dlatego dołożyłem tam też plik dtb dla Twojego urządzenia - zarówno w podkatalogu boot jak i w głównym (tam jest tylko jedna partycja).
    Spróbuj to wgrać i załadować, czyli nazwa pliku dtb taka, jak u Ciebie.