logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zminimalizować błędy CRC w NAND na MMnet1002 z Linuxem?

Kalvis 16 Sty 2013 14:35 4209 22
REKLAMA
  • #1 11796784
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Witam.
    Na wyżej wymienionej płytce mam stale powracający problem z pamięcią NAND. Na początku używałem OpenWrt i wszystko (At91boot..., UBoot, Jajo oraz system plików) miałem na NAND Flash. Przy takiej konfiguracji problez z błędem CRC pojawiał się średnio raz w miesiącu (na drugiej płytce mmnet raz na kilka miesięcy). Później przeszedłem na BuildRoot'a i system plików przerzuciłem na kartę pamięci. Wyglądało na to, że problem się rozwiązał ale po ponad półrocznej bez awaryjnej pracy błąd się pojawił (raz). Niby przy tej konfiguracji NAND flash jest tylko odczytywany przy starcie i dalej nie powinien być ruszany ale jednak coś się z nim stało.
    Pytanie moje brzmi: jak zrobić na tej płytce system bez awaryjny taki jakie są na przykład na ruterach. Czy ten problem wynika tylko z NAND'a. W Propoxie sugerowali żeby go zamienić na DataFlash i będzie OK ale na tych modułach DataFlasha nie mam wlutowanego. Może powinienem jeszcze jądro przerzucić na kartę? Zanim zacznę coś więcej grzebać chciałbym zrozumieć problem. Potrzebuje system, który nie wymaga ingerencji specjalisty gdy się zepsuje.

    Z góry dzięki za wszelkie odpowiedzi.
  • REKLAMA
  • #2 11819594
    ollson
    Poziom 11  
    Posty: 8
    Gdzie przechowywane są zmienne środowiskowe u-boot'a? Jeżeli nie na Nand, to można całkowicie tą pamięć wyeliminować, jądro przerzucić na kartę, a u-boot'a przekompilować tak, żeby w ogóle Nand'a nie dotykał
  • #3 11820660
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Sam UBoot jak i zmienne są na pamięci NAND. Czyli rozumiem, że UBota kompilujemy żeby nie miał zmiennych zewnętrznych tylko wkomilowane tak? Ale on nadal musi być na NAND'zie?
  • REKLAMA
  • #4 11820716
    ollson
    Poziom 11  
    Posty: 8
    Mozna albo ustawić w kodzie interesujące nas zmienne i przekompilować program (równocześnie ustawiając odpowiedni #define, ze zmienne nie są przechowywane nigdzie - w razie czego mogę sprawdzić który to dokładnie) i dodatkowo w kodzie wyłączyć obsługę pamięci Nand. Wtedy U-boot może sobie spokojnie siedzieć na Nandzie i nie będzie się rzucać o te błędne CRC. Jeżeli jednak chciałoby się móc edytować zmienne środowiskowe, to istnieje możliwość ładowania ich z karty SD z pliku, ale to tylko nowsze wersje u-boot'a potrafią.
  • #5 11824118
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Znalazłem w pliku u-boot-2009.01/include/at91sam9260ek.h sekcje wyglądającą tak:
    Cytat:
    #else /* CONFIG_SYS_USE_NANDFLASH */

    /* bootstrap + u-boot + env + linux in nandflash */
    #define CONFIG_ENV_IS_IN_NAND 1
    #define CONFIG_ENV_OFFSET 0x80000
    //#define CONFIG_ENV_OFFSET_REDUND 0xc0000
    #define CONFIG_ENV_SIZE 0x40000 /* 1 sector = 256 kB */
    #define CONFIG_BOOTCOMMAND "nand read 0x22200000 0x200000 0x200000; bootm"
    #define CONFIG_BOOTARGS "mem=64M " \
    "console=ttyS0,115200 " \
    "ubi.mtd=4 " \
    "root=ubi0:rootfs " \
    "rootfstype=ubifs " \
    "init=/etc/preinit "

    #endif


    Czyli jeśli bym tu na sztywno wpisał domyślne wartości to by już wstępnie wystarczyło nie? Jeszcze się rozejrzę za nowszym u-boot'em z zapisem zmiennych na SD. Jeśli miałbyś jakieś materiały gdzie jest w przystępny sposób napisane jak skonfigurować u-boot'a tak aby jajo było brane z karty SD to byłbym wdzięczny.
  • #6 11824445
    ollson
    Poziom 11  
    Posty: 8
    Jeżeli korzystasz z 9260ek to nie ma problemu - wszystkie wersje po kolei zawierają do tego konfiguracje, więc śmiało można użyć nowszej. W domu mam materiały wszystkie, to jakoś wieczorem to opiszę. Generalnie sprawdź, czy masz aktualnie w u-boot wkompilowaną obsługę kart sd/mmc (komenda mmc) oraz formatu plików FAT (komenda fat, fatload jakoś tak), bez tego się jądra nie załaduje z karty. Jak nie masz, no to będzie to trochę bardziej skomplikowane, trzeba będzie trochę pogrzebać w kodzie. Jak potrzeba, też mogę to opisać. Na zmienne z pliku też zerknę.
  • REKLAMA
  • #7 11863707
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Odpaliłem właśnie linux'a na kompie więc znowu mam gdzie kompilować. Sprawdzałem i mój U-Boot z 2009 nie ma obsługi MMC. Ściągnąłem z ftp://ftp.denx.de/pub/u-boot/ wersje u-boot-2013.01 (najnowsza). Spróbuje go skompilować według instrukcji propoxu. W plikach od propoxu jest do wersji 2009 patch zmieniający min. mapowanie pamięci i nie wiem czy mam się tym sugerować czy nie.
  • #8 11872051
    ollson
    Poziom 11  
    Posty: 8
    Cierpię na kompletny brak czasu, w domu bywam tylko po to żeby się przespać, więc muszę zrewidować swoje stanowisko, że wszystko na raz opiszę:P ale moim zdaniem powinieneś spróbować tak zrobić: skompilować tego nowego u-boot'a ze standardową konfiguracją dla 9260 (bo taki uP jest na mmnet chyba?), uruchomić po staremu i zobaczyć czy działa, ew. wcześniej dokładniej się przyjrzeć tym zmianom z patch'a. Jak się okaże, że działa, no to wtedy doda się obsługę MMC i te zmienne pójdą z karty. Jak się pojawią z tym nowym jednak problemy, to ręczne zmiany w nowym bootloaderze mogą nic nie dać, bo zawsze się coś przeoczy. Wtedy nadal będzie można dodać obsługę MMC w starej wersji, tj 2009, żeby jądro z niej było ładowane, a zmienne środowiskowe, które jak mówiłeś raczej nie będą ulegać zmianom, trzeba będzie wkompilować jako wartości defaultowe i zaznaczyć brak zewnętrznego nośnika na te zmienne w kodzie. W razie problemów napisz konkretnie co by trzeba opisać, to wtedy siądę, bo na pisanie tutorali pełnych nie mam w tej chwili czasu...
  • #9 11881233
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Kalvis napisał:
    Odpaliłem właśnie linux'a na kompie więc znowu mam gdzie kompilować. Sprawdzałem i mój U-Boot z 2009 nie ma obsługi MMC. Ściągnąłem z ftp://ftp.denx.de/pub/u-boot/ wersje u-boot-2013.01 (najnowsza). Spróbuje go skompilować według instrukcji propoxu. W plikach od propoxu jest do wersji 2009 patch zmieniający min. mapowanie pamięci i nie wiem czy mam się tym sugerować czy nie.


    Witam,

    Chciałbym się dokleić do tematu. Jestem na etapie wgrywania nowego u-boot'a (2013.01) do modułu mmnet1001. Kompilacja przebiega bezproblemowo. Problem zaczyna się z uruchomieniem - wygląda jak by wogóle nie startował. Tego problemu nie ma ze źródłami do 2011.

    Czy udało Ci sie skompilować i uruchomić nowego u-boot'a na module propoxu ?
  • #10 11886139
    ollson
    Poziom 11  
    Posty: 8
    sitec napisał:
    Problem zaczyna się z uruchomieniem - wygląda jak by wogóle nie startował


    Co wyrzuca na konsolę Bootstrap?
  • #11 11887313
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Problem rozwiązany. W sumie banalna sprawa. Od 2011 został zmieniony sposób relokacji u-boot'a. Makro określające adres w pamięci RAM definiuje sie teraz w pliku konfiguracji /include/configs/*.h. Musi być podany adres identyczny co w at91bootstrap.
  • #12 11894620
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    ollson napisał:
    sitec napisał:
    Problem zaczyna się z uruchomieniem - wygląda jak by wogóle nie startował


    Co wyrzuca na konsolę Bootstrap?


    Teraz natknąłem się na kolejny problem.

    Zbudowałem sobie automatycznie toolchaina OpenWRT no i pojawił się problem.

    Po skompilowaniu u-boota okazuje się że warstwa tcp/ip jest w ipv6. Jak to wyłączyć ?
  • #13 11896417
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    A możesz dla mnie sprawdzić czy ten UBoot obsługuje karty MMC? Chodzi o sprawdzenie czy ma komendy do MMC w sobie po kompilacji na tę płytkę. Ja ze swoim będę walczył dopiero jutro ale docelowo zależy mi na odpaleniu kernela z MMC.
  • REKLAMA
  • #14 11897917
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Kalvis napisał:
    A możesz dla mnie sprawdzić czy ten UBoot obsługuje karty MMC? Chodzi o sprawdzenie czy ma komendy do MMC w sobie po kompilacji na tę płytkę. Ja ze swoim będę walczył dopiero jutro ale docelowo zależy mi na odpaleniu kernela z MMC.


    Wszystkie dostępne komendy (uboot skompilowany dla pamięci NAND)
    ?       - alias for 'help'                                                      
    base    - print or set address offset                                           
    boot    - boot default, i.e., run 'bootcmd'                                     
    bootd   - boot default, i.e., run 'bootcmd'                                     
    bootm   - boot application image from memory                                    
    bootp   - boot image via network using BOOTP/TFTP protocol                      
    cmp     - memory compare                                                        
    coninfo - print console devices and information                                 
    cp      - memory copy                                                           
    crc32   - checksum calculation                                                  
    dhcp    - boot image via network using DHCP/TFTP protocol                       
    echo    - echo args to console                                                  
    editenv - edit environment variable                                             
    env     - environment handling commands                                         
    erase   - erase FLASH memory                                                    
    fatinfo - print information about filesystem                                    
    fatload - load binary file from a dos filesystem                                
    fatls   - list files in a directory (default /)                                 
    flinfo  - print FLASH memory information                                        
    go      - start application at address 'addr'                                   
    help    - print command description/usage                                       
    imxtract- extract a part of a multi-image                                       
    itest   - return true/false on integer compare                                  
    loadb   - load binary file over serial line (kermit mode)                       
    loady   - load binary file over serial line (ymodem mode)                       
    loop    - infinite loop on address range                                        
    md      - memory display                                                        
    mm      - memory modify (auto-incrementing address)                             
    mtest   - simple RAM read/write test                                            
    mw      - memory write (fill)                                                   
    nand    - NAND sub-system                                                       
    nboot   - boot from NAND device                                                 
    nfs     - boot image via network using NFS protocol                             
    nm      - memory modify (constant address)                                      
    ping    - send ICMP ECHO_REQUEST to network host                                
    printenv- print environment variables                                           
    protect - enable or disable FLASH write protection                              
    reset   - Perform RESET of the CPU                                              
    run     - run commands in an environment variable                               
    saveenv - save environment variables to persistent storage                      
    setenv  - set environment variables                                             
    sleep   - delay execution for some time                                         
    tftpboot- boot image via network using TFTP protocol                            
    usb     - USB sub-system                                                        
    usbboot - boot from USB device                                                  
    version - print monitor, compiler and linker version  
    
  • #15 11899657
    ollson
    Poziom 11  
    Posty: 8
    Kalvis napisał:
    A możesz dla mnie sprawdzić czy ten UBoot obsługuje karty MMC? Chodzi o sprawdzenie czy ma komendy do MMC w sobie po kompilacji na tę płytkę. Ja ze swoim będę walczył dopiero jutro ale docelowo zależy mi na odpaleniu kernela z MMC.


    Z tego co zauważyłem, u-boot'y z konfiguracją dla atmeli nie maja defaultowo obsługi mmc, chyba że są przygotowane pod konkretną płytkę
  • #16 11899770
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Ale widzę, że może wystartować obraz z USB. To też może być jakaś opcja.

    EDIT:

    Mam problem z kompilacją:
    
    /bin/sh: line 1: 15796 Segmentation fault      arm-linux-ld -pie -T u-boot.lds -Bstatic $UNDEF_LST arch/arm/cpu/arm926ejs/start.o --start-group api/libapi.o arch/arm/cpu/arm926ejs/at91/libat91.o arch/arm/cpu/arm926ejs/libarm926ejs.o arch/arm/lib/libarm.o common/libcommon.o disk/libdisk.o drivers/bios_emulator/libatibiosemu.o drivers/block/libblock.o drivers/dfu/libdfu.o drivers/dma/libdma.o drivers/fpga/libfpga.o drivers/gpio/libgpio.o drivers/hwmon/libhwmon.o drivers/i2c/libi2c.o drivers/input/libinput.o drivers/misc/libmisc.o drivers/mmc/libmmc.o drivers/mtd/libmtd.o drivers/mtd/nand/libnand.o drivers/mtd/onenand/libonenand.o drivers/mtd/spi/libspi_flash.o drivers/mtd/ubi/libubi.o drivers/net/libnet.o drivers/net/phy/libphy.o drivers/pci/libpci.o drivers/pcmcia/libpcmcia.o drivers/power/battery/libbattery.o drivers/power/fuel_gauge/libfuel_gauge.o drivers/power/libpower.o drivers/power/pmic/libpmic.o drivers/rtc/librtc.o drivers/serial/libserial.o drivers/sound/libsound.o drivers/spi/libspi.o drivers/twserial/libtws.o drivers/usb/eth/libusb_eth.o drivers/usb/gadget/libusb_gadget.o drivers/usb/host/libusb_host.o drivers/usb/musb-new/libusb_musb-new.o drivers/usb/musb/libusb_musb.o drivers/usb/phy/libusb_phy.o drivers/usb/ulpi/libusb_ulpi.o drivers/video/libvideo.o drivers/watchdog/libwatchdog.o fs/cbfs/libcbfs.o fs/cramfs/libcramfs.o fs/ext4/libext4fs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o fs/libfs.o fs/reiserfs/libreiserfs.o fs/ubifs/libubifs.o fs/yaffs2/libyaffs2.o fs/zfs/libzfs.o lib/libfdt/libfdt.o lib/libgeneric.o lib/lzma/liblzma.o lib/lzo/liblzo.o lib/zlib/libz.o net/libnet.o post/libpost.o test/libtest.o board/atmel/at91sam9260ek/libat91sam9260ek.o --end-group /home/mpostek/PROJEKTY/Linux_Embedded/BUILDROOT/vmario/vmario/mmnet1002-buildroot-vmario/U-Boot/U-Boot_SDBOOT/u-boot-2013.01/arch/arm/lib/eabi_compat.o -L /home/mpostek/PROJEKTY/Linux_Embedded/OpenWrt/OpenWrt-SDK-at91-for-Linux-i686/staging_dir/toolchain-arm_gcc4.1.2/bin/../lib/gcc/arm-linux-uclibc/4.1.2 -lgcc -Map u-boot.map -o u-boot
    make: *** [u-boot] Error 139


    Na internecie piszą, że jest to spowodowane zbyt starym toolchain-em. Ja mam Buildroot-a z 2010r i tam jest gcc 4.4.3. Może mi polecić jakiegoś toolchaina nowszego pod tę platformę.
  • #17 11900665
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Twój kompilator używa starszego formatu ABI. Musisz zbudować sobie kompilator w formacie EABI.

    Pamiętaj żeby wyłączyć obsługę ipv6 bo będziesz miał ten sam problem co ja.(do tej pory nie udało mi się wyłączyć ipv6 z toolchaina zbudowanego z OpenWRT)
  • #18 11901023
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Nie bardzo rozumiem. Polecenie arm-linux-gcc jest linkowane na arm-linux-uclibcgnueabi-gcc. Ale jeszcze zobaczę z nowszym buildrootem. Jak rozumiem używasz OpenWRT. A jaką wersję? I czy w celu kompilacji U-boota musiałeś coś modyfikować?
  • #19 11901370
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    W takim razie masz starszą wersje binutils i się nie chce skompilować.

    Ja chce postawić nową wersje OpenWRT (attitude_adjustment) która obsługuje bez żadnego kombinowanie At91SAM9260.

    Problem pojawia się z warstwą TCP/IP w skompilowanym uboocie - jest w ipv6 no i w efekcie gryzie się z siecią.
  • #20 11932831
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Kalvis czy udało Ci się skompilować najnowszego U-Boota ?
  • #21 11934774
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Niestety nie. Próbowałem na nowym Buildroot-cie ale nie mogę go skompilować bo coś nie gra z uClibc. Narazie dałem sobie spokój z tym bo i tak nic nie zyskuje na nowszej wersji. Skompilowałem starą wersję dostarczoną od Propoxu zmieniając domyślne ustawienia bootcmd tak aby nawet po błędzie CRC ładował system z karty. Ale jeśli mi podasz na jakich źródłach od OpenWRT jedziesz to mogę spróbować kompilacji.
  • #22 11950572
    sitec
    Poziom 13  
    Posty: 135
    Ocena: 5
    Źródła z których korzystam to attitude_adjustment

    Jak byś miał problemy z kompilacją tu masz opis
    Link
  • #23 12862450
    Kalvis
    Poziom 13  
    Posty: 141
    Pomógł: 1
    Ocena: 2
    Witam po dłuższej przerwie. Problem z kompilacją u-boot'a rozwiązałem kompilując go ze źródeł openwrt otrzymanych z propoxu. Wygląda na to, że dzięki brakowi zmiennych na NANDzie problem wysypywania się systemu opisany w pierwszym poście się rozwiązał. Nadal kernel jest na NAND więc nie on był powodem.
    Zgodnie z sugestią moderatorów TEMAT ZAMYKAM.

Podsumowanie tematu

✨ Użytkownik zgłasza problem z błędami CRC w pamięci NAND na płytce mmnet1002 podczas używania systemów OpenWrt i BuildRoot. Po przeniesieniu systemu plików na kartę pamięci, błędy występowały rzadziej, ale nadal się pojawiały. Dyskutanci sugerują, aby skompilować U-Boot tak, aby nie korzystał z pamięci NAND, co może zminimalizować problemy. Proponowane rozwiązania obejmują wprowadzenie zmiennych środowiskowych bezpośrednio w kodzie U-Boota oraz dodanie obsługi kart SD/MMC. Użytkownik rozwiązał problem z kompilacją U-Boota, korzystając z źródeł OpenWRT, co pomogło wyeliminować błędy systemu.
Wygenerowane przez model językowy.
REKLAMA