Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

i.MX6 buildroot - budowanie Linuxa''a

ienecode 26 Apr 2019 10:04 1800 58
Computer Controls
  • #31
    szelus
    Level 34  
    Błąd mówi, że brakuje kompilatora c++ w toolchainie. Upewnij się, że ta opcja jest ciągle włączona.
  • Computer Controls
  • #32
    ienecode
    Level 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
    Level 34  
    Damian7546 wrote:
    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 wrote:
    Jeszcze pytanie dlaczego mój uboot szuka akurat takiej nazwy: imx6dl-sc200-ldo.dtb , gdzieś to można zmienić ?

    Za to odpowiada zmienna uboota
    Code: bash
    Log in, to see the code
  • #34
    ienecode
    Level 21  
    Problem podobny do tego co wcześniej :

    Code: bash
    Log in, to see the code


    Dodano po 8 [minuty]:

    Dalej jądro nie widzi mmcblk2
  • #35
    szelus
    Level 34  
    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
    ienecode
    Level 21  
    szelus wrote:
    Główny defconfig jest identyczny z tym sc200.


    Możesz napisać co porównujesz ? Defconfig z gita z...?
  • Computer Controls
  • #37
    szelus
    Level 34  
    Ten z głównego katalogu w git z arch/arm/config/sc200_defconfig, też z git.
  • #38
    ienecode
    Level 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
    Level 34  
    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
    ienecode
    Level 21  
    Nie da się tego dodać w buildroot'a?

    Nie mogę zainstalowac kompilatora drzewa urządzeń :

    Code: bash
    Log in, to see the code
  • #41
    szelus
    Level 34  
    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.
  • Helpful post
    #43
    szelus
    Level 34  
    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
    ienecode
    Level 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
    Level 34  
    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
    ienecode
    Level 21  
    Logi ze startu:
    Code: bash
    Log in, to see the code


    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
    Level 34  
    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
    ienecode
    Level 21  
    szelus wrote:
    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
    Level 34  
    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
    ienecode
    Level 21  
    szelus wrote:
    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 wrote:
    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
    Level 34  
    Próbowałeś tego
    szelus wrote:
    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
    ienecode
    Level 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 wrote:
    Takie ładne obrazki niewiele mi mówią. Na trzecim, to dwa gniazda ethernet?

    Tak.

    szelus wrote:
    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
    ienecode
    Level 21  
    Dalej ten sam efekt - nie widoczne karty sieciowe w systemie ,
    a poniżej log:
    Code: bash
    Log in, to see the code
  • #54
    szelus
    Level 34  
    Moim zdaniem jest jakiś rozjazd pomiędzy konfiguracją jadra a konfiguracją DTB.
    Spróbuj dwóch rzeczy:

    1 Wrzuć log z komendy
    Code: bash
    Log in, to see the code
    po załadowaniu linuxa.

    2. Spróbuj załadować nowe jadro korzystając ze starego DTB - zmień konfigurację uboot-a na
    Code: bash
    Log in, to see the code


    I też wrzuć log.
  • #55
    ienecode
    Level 21  
    szelus wrote:
    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 wrote:
    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.


    Code: bash
    Log in, to see the code


    Moderated By dondu:

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

  • #56
    ienecode
    Level 21  
    szelus wrote:
    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.

    Code: bash
    Log in, to see the code
  • #57
    szelus
    Level 34  
    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.
  • #59
    szelus
    Level 34  
    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.