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

MMnet 1002 kompilacja oprogramowania

biexi 21 Jul 2009 15:19 15360 47
Computer Controls
  • #1
    biexi
    Level 11  
    Przygotowałam sobie środowisko za pomocą crossdev
    crossdev -t arm-unknown-linux-gnu --b 2.19.1 --g 4.3.3 --l 2.9_p20081201-r1 --k 2.6.28-r1
    crossdev -t armv4l-unknown-linux-gnu --b 2.19.1 --g 4.3.3 --l 2.9_p20081201-r1 --k 2.6.28-r1

    dla arm i armv4l
    przygotowalam sobie Makefile
    CC=armv4l-unknown-linux-gnu-gcc
    TARGET=ble
    ARCH=arm
    INSTALL=instal
    ble:
            $(CC) -mcpu=arm926ej-s -mtune=arm926ej-s -mthumb -O2 ble.c -o ble
    
    all: $(TARGET)
    
    .PHONY : clean
    
    clean:
            -rm ble

    plik ble.c
    #include <stdio.h>
    
    int main()
    {
       printf("Hello world \n");
       return 0;
    }

    Program skompilowal sie bez problemu
    wgralam skompilowana binarkę po sftp na MMnet'a próba uruchomienia
    root@MMnet:~# ls -al
    drwxr-xr-x    2 root     root          224 Jan  1 23:57 .
    drwxrwxrwx   14 root     root         1120 Jan  1 01:38 ..
    -rwxr-xr-x    1 root     root         7307 Jan  2 00:01 ble
    root@MMnet:~# ./ble
    sh: ./ble: not found
    root@MMnet:~#   

    dlaczego ona nie działa ?
    probowalm rowniez kompilowac za pomoca arm-unknown-linux-gnu-gcc

    dolacze jeszcze informacje o procku
    root@MMnet:~# cat /proc/cpuinfo
    Processor       : ARM926EJ-S rev 5 (v5l)
    BogoMIPS        : 98.91
    Features        : swp half fastmult edsp java
    CPU implementer : 0x41
    CPU architecture: 5TEJ
    CPU variant     : 0x0
    CPU part        : 0x926
    CPU revision    : 5
    
    Hardware        : Propox MMnet1000
    Revision        : 0000
    Serial          : 0000000000000000
    root@MMnet:~#
  • Computer Controls
  • #2
    arrevalk
    Level 25  
    Podaj efekt polecenia:
    file ./ble


    Poza tym dobrą metodą na sprawdzenie poprawnosci toolchaina jest kompilacja kernela. Jeżeli przejdzie ona bez błędów to na 99% toolchain jest dobry.
  • Computer Controls
  • #3
    biexi
    Level 11  
    SK-work prog # file ./ble
    ./ble: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped


    Ok kompilacje kernela przeprowadze i zdam relacje musze sobie zbudowac srodowisko w domu :]
  • #4
    arrevalk
    Level 25  
    Jest wiele książek po angielsku opisujących proces tworzenia aplikacji na platformy wbudowane. Wiele z nich udostępniona na licencjach GPL i Creative Commons wiec dostępna za darmo w sieci. Na elektrodzie w kilku tematach podawałem tytuły więc poszukaj.
    Zastanawia minie fakt że program się kompiluje, ale przy probie uruchomienia nie wywołuje błędu (np Segmentation Fault) tylko shell sygnalizuje brak pliku. Nigdy nie miałem takiej systuacji, tylko że ja korzystałem z toolchainów kompilowanych przez autorów danego modułu.
    Nawet określenie rodzaju pliku sygnalizuje że jest on właściwym typem pliku.
  • #5
    biexi
    Level 11  
    Brak błędu "Segmentation fail" lub innego świadczącego o błędzie dotyczącym arch też mnie zastanawia :]

    Dziękuje za podanie informacji poszukam tej dokumentacji. Generalnie przepraszam za "dziwne pytania" ale z inna architektura jak x86 nie miałam do czynienia. Z elektroniką też niewiele dopiero się uczę więc proszę mi wybaczyć :]

    Więc tak co do kompilacji kernela to:
    jajko linux-2.6.28.2

    w Makefile ustawiłam
    ARCH            ?= arm
    CROSS_COMPILE   ?= arm-unknown-linux-gnu-


    Konfigurację zapodałam tak
    make ARCH="arm" CROSS_COMPILE="arm-unknown-linux-gnu-" menuconfig

    kompilacje tak
    make ARCH="arm" CROSS_COMPILE="arm-unknown-linux-gnu-" 


    I co.....
    Najciekawsze ze się skompilował
    Mefisto linux-2.6.28.2 # ls arch/arm/boot/compressed/vmlinux -al
    -rwxr-xr-x 1 root root 1427692 07-21 21:46 arch/arm/boot/compressed/vmlinux
    Mefisto linux-2.6.28.2 # ls -al crypto/*.ko
    -rw-r--r-- 1 root root 22329 07-21 21:46 crypto/aes_generic.ko
    -rw-r--r-- 1 root root  3020 07-21 21:46 crypto/arc4.ko
    -rw-r--r-- 1 root root  4966 07-21 21:46 crypto/cbc.ko
    -rw-r--r-- 1 root root 19928 07-21 21:46 crypto/des_generic.ko
    -rw-r--r-- 1 root root  4266 07-21 21:46 crypto/ecb.ko
    -rw-r--r-- 1 root root  6072 07-21 21:46 crypto/md5.ko
    -rw-r--r-- 1 root root  3727 07-21 21:46 crypto/michael_mic.ko
    Mefisto linux-2.6.28.2 # 


    Analizując to wszystko dochodzę do wniosku że chyba będę musiała przekompilować cały frimware ale nie wiem jeszcze jak poprawnie go zbudować ponieważ po zerknięciu w dokumentacje widziałam że poszczgólne "kawałki" trzeba zapodawać pod określone adresy pamięci
  • #6
    biexi
    Level 11  
    Walka ciąg dalszy :]
    Sciągnełam ze strony propoxu MMnet1000-CD-20090601.zip (nowsze jak posiadam) i chciałam przefeszować go nowszaym obrazem.
    Postwilam serwer tftp
    wrzucilam tam pliki
    MMnet1000-OpenWrt.ubi uboot-env.bin uImage uImage-prog
    na module uruchomilam program skrypt fleshujacy
    #!/bin/sh
    echo "Getting files from TFTP server"
    tftp -g -r uImage 172.16.16.20
    tftp -g -r MMnet1000-OpenWrt.ubi 172.16.16.20
    tftp -g -r uboot-env.bin 172.16.16.20
    
    echo "Writing rootfilesystem"
    ubiformat /dev/mtd4 -f MMnet1000-OpenWrt.ubi
    
    echo "Writing Linux kerrnel"
    flash_eraseall /dev/mtd3
    nandwrite -p /dev/mtd3 uImage
    
    echo "Writing new U-Boot env. file"
    flash_eraseall /dev/mtd2
    nandwrite -p /dev/mtd2 uboot-env.bin
    
    echo "Rebooting to new system"
    reboot

    {adresy ip zgodne z konfiguracja w mojej sieci)

    pliki którymi fleshowałam
    http://biexi.eu/tmp/files/mmnetfirm.tar.gz

    I cos poszło nie tak bo teraz uruchamia mi się w trybie U-Boot
    Informacja o błędzie:
    DRAM:  64 MB
    NAND:  NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit)
    NAND: Pagesize: 2048, Blocksize: 256K, OOBsize: 64
    1024 MiB
    *** Warning - bad CRC or NAND, using default environment


    Moje pytanie jak teraz moge go zfleshować?
    I kolejne pytanie co źle zrobiłam bo nie chce popełnić takigo błędu w przyszłości?
  • #7
    biexi
    Level 11  
    Walki ciąg dalszy
    z konsoli u-boot'a ustawilam zmienne srodowiskowe

    setenv serverip 192.168.1.2
    setenv ipaddr 192.168.1.3
    setenv ethaddr 00:30:20:10:05:05


    Do pamieci sciagnelam konfiguracje u-boot'a
    wyczyscilam pamiec nand i zfleshowalam

    tftp 0x22000000 uboot-env.bin
    nand erase 0x80000 0x200000
    nand write 0x22000000 0x80000 0x200000


    analogicznie z jajkiem
    tftp 0x22000000 uImage
    nand erase 0x200000 0x800000
    nand write 0x22000000 0x200000 0x800000


    oraz z rootsysteme
    tftp 0x22000000 MMnet1000-OpenWrt.ubi
    nand erase 0x800000 0x40000000
    nand write 0x22000000 0x800000 0x40000000


    gdzie to ostatnie przebiegalo z lekka dziwnie :P i pewnie w ten sposób to raczej musze wrucic plik niezubinizowany

    i dalej mu modul nie wstaje i teraz pytanie jest takie czy walnieta jest konfiguracja u-boot'a czy wadliwy rootsystem

    I na podstawie czego poruwnywane sa te sumy CRC
    *** Warning - bad CRC or NAND, using default environment
  • #8
    arrevalk
    Level 25  
    Ja miałem okazję popracować z platformą M501 artili. MMnet w łapkach nie miałem, a szkoda.
    Co do flashowania obrazu jajka to ręcznie robiło się to tak(na podstawie Twoich komend, adresy zostawiłem ale były inne bo M501 ma inną konfigurację pamięci, 64MB SDRAM oraz 16MB Flashu):
    
    tftp 0x22000000 uImage 
    nand erase 0x200000 0x800000 
    nand write 0x22000000 0x200000 $(filesize)
    

    Upewnij się że właściwe początkowe adresy przekazujesz do tych komend, bo może sobie nadpisujesz jajko obrazem ramdysku(powinno być to w dokumentacji, albo na sieci lub ostatecznie w parametrach bootwania w uBoocie).
    Rozumiem że zapis przebiega bez żanych błędów?
    Dobrze jak byś podała w załącziku (bo może tego być dużo) wszystkie komunikaty jakie są generowane od rozpoczęcia procedury bootowania.
  • #9
    biexi
    Level 11  
    Faktycznie zle podawalam zakresy adresow
    Log z botowania:
    >AT91Boot-20081201
    
    U-Boot 1.1.5 (Sep  5 2008 - 10:23:06)
    
    DRAM:  64 MB
    NAND:  NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit)
    NAND: Pagesize: 2048, Blocksize: 256K, OOBsize: 64
    1024 MiB
    *** Warning - bad CRC or NAND, using default environment
    
    In:    serial
    Out:   serial
    Err:   serial
    DM9161A PHY Detected
    End of Autonegociation
    U-Boot>


    Zakresy pamięci
     Urządzenie   Adr. Pocz.    Adr. Końc.     Rozmiar        Nazwa
       mtd0       0x00000000    0x0003ffff     0x00040000    bootstrap
       mtd1       0x00040000    0x0007ffff     0x00040000    boot
       mtd2       0x00080000    0x001fffff     0x00180000    u-boot environment
       mtd3       0x00200000    0x007fffff     0x00600000    kernel
       mtd4       0x00800000    0x3fffffff     0x3f800000    filesystems


    pliki lezace na tftp
    size dec    size hex      Nazwa
    12582912    0xC00000    MMnet1000-OpenWrt.ubi
    262144      0x40000     uboot-env.bin
    1461892     0x164E84    uImage


    Po ustawieniu jak wczeniej paramterow u-boot'a
    mam problem z fleshowaniem kernela
    U-Boot> tftp 0x22000000 uImage
    TFTP from server 192.168.1.2; our IP address is 192.168.1.3
    Filename 'uImage'.
    Load address: 0x22000000
    Loading: #################################################################
             #################################################################
             #################################################################
             #################################################################
             ##########################
    done
    Bytes transferred = 1461892 (164e84 hex)
    U-Boot> nand erase 0x00200000 0x007fffff
    
    NAND erase: device 0 offset 0x200000, size 0x7fffff
    Erasing at 0x9c0000 -- 100% complete.
    OK
    U-Boot> nand write 0x22000000 0x00200000 0x164E84
    
    NAND write: device 0 offset 2097152, size 1461892 ... nand_write_ecc: Attempt to write not page aligned data
     0 bytes written: ERROR
    U-Boot>


    Ciekawa bo moja pamiec ma chyba bady :/ podobno normalne ale czy aby na pewno
    U-Boot> nand erase 0x00800000 0x3fffffff
    
    NAND erase: device 0 offset 0x800000, size 0x3fffffff
    Skipping bad block at  0x0d380000
    Skipping bad block at  0x1c9c0000
    Skipping bad block at  0x1d9c0000
    Skipping bad block at  0x2ba00000
    
    NAND 1GiB 3,3V 8-bit: MTD Erase failure: -22
    
    NAND 1GiB 3,3V 8-bit: MTD get bad block failed: -22
    ERROR
    U-Boot>


    cociekawe ten obszar pamieci chyba fleshuje sie poprawmie
    U-Boot> nand write 0x22000000 0x00800000 0xC00000
    
    NAND write: device 0 offset 8388608, size 12582912 ...  12582912 bytes written: OK
    U-Boot>

    Wiec robi sie coraz ciekaiej :P

    I mam nadzieje że nie nadpisałam przy wczeniejszych eksperymentach czegoś ważnego.
  • #10
    arrevalk
    Level 25  
    Może warto było by skontaktować się z producentem, bo moduł który posiadasz może mieć wadliwą pamięć.
    Nie wiem jak jest z propoxem ale support po stronie artilli jest świetny (firma z azji, na maila odpowiadają po max 1 dniu roboczym a często zdarza się że odpowiedź jest po 1-2h jak akurat trafi się na ichnie godziny pracy).
  • #11
    biexi
    Level 11  
    Opanowałam juz fleshowanie :]

    
    # z ubota
    setenv serverip 192.168.1.20
    setenv ipaddr 192.168.1.3
    setenv ethaddr EE:E5:2B:AA:1C:83
    tftp 0x22000000 uImage
    # format kernel
    nand erase 0x00200000 0x00800000
    nand write 0x22000000 0x00200000 0x200000
    # format rootfs
    nand erase 0x00800000 0x40000000
    tftp 0x22000000 uImage-prog
    # botuje to z uImage-prog
    bootm 0x22000000
    
    z konsoli: tego czegos co sie odpali
    ifconfig eth0 192.168.1.3 netmask 255.255.255.0
    tftp -g -r MMnet1000-OpenWrt.ubi 192.168.1.20
    ubidetach /dev/ubi_ctrl -m 4
    ubiformat /dev/mtd4 -f MMnet1000-OpenWrt.ubi
    reboot


    mam problem jeszcze w u-boot env bo zapisywanie tego w ten sposub nic nie daje :/
    setenv ethaddr EE:E5:2B:AA:1C:83
    setenv serverip 192.168.1.20
    setenv baudrate 115200
    setenv mem 64M
    setenv bootdelay 1
    setenv ubi.mtd 4
    setenv root ubi0:rootfs
    setenv rootfstype ubifs
    setenv init /etc/preinit 
    setenv bootcmd nand setenv read 0x22000000 0x00200000 0x00200000;
    saveenv


    uruchomienie recznie botowania
    bootm 0x22000000


    Jaka jest alternatywa dla saveenv ewentualnie jak zbudowac sobie uboot-env.bin

    bo zstal mi jeszcze do zwalczenia jeden problem
    U-Boot 1.1.5 (Sep  5 2008 - 10:23:06)
    
    DRAM:  64 MB
    NAND:  NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit)
    NAND: Pagesize: 2048, Blocksize: 256K, OOBsize: 64
    1024 MiB
    *** Warning - bad CRC or NAND, using default environment

    wlasnie te zmienne u-boot'a

    i jakktos by mial dialajcego mmneta to jesli by mi mogl podac wynik polecenia z poziomu u-boota
  • #12
    kafka
    Level 22  
    Ja natomiast mam jeszcze problem z uruchomieniem tftpw u-boocie. Niby ustawiłem serverip na ip mojego kompa w sieci lokalnej, ipaddr na jakiś prawidłowy w sieci, ale ne działa.

    Podejrzane dla mnie jest, że na stronie routera mam spis urzędzeń podłączonych do sieci i tam niestety mojego arma nie ma...

    Dodam, że w poziomu linuksa wszystko chodzi...
  • #13
    arrevalk
    Level 25  
    A maska podsieci w module prawidlowa?
    Dla przykładu, mój router w sieci domowej ma adres 192.168.0.1 maska podsieci to 255.255.255.0. Moduł przypisany ma adres 192.168.0.142 natomiast serwer stoi na kompie o adresie 192.168.0.141.
    Dodatkowo w routerze ręcznie dodałem adres MAC modułu do listy akceptowanych klientów.
    Bo nie wystarczy zmienić w uruchomionym systemie konfiguracji ipconfig, trzeba zrobić to też w zmiennych u-boot.
    W bootloaderze u-boot można sprawdzić połączenie poleceniem ping w linii poleceń.
  • #14
    kafka
    Level 22  
    A możesz dokładniej?

    Nie przypominam sobie o takiej zmiennej jak maska podsieci w u-boocie.

    Takie mam zmienne:

    bootargs=mem=64M console=ttyS0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs init=/etc/preinit
    bootcmd=nand read 0x22200000 0x200000 0x200000; bootm
    bootdelay=3
    baudrate=115200
    ethact=macb0
    ethaddr=3a:1f:34:08:54:54
    serverip=192.168.2.126
    stdin=serial
    stdout=serial
    stderr=serial
    ipaddr=192.168.2.131


    Komp ma adres 192.168.2.126
    Router 192.168.2.0

    No i właśnie nwet na routerze jak wejdę w zakłądkę "Show devies" to pokazuje wszystkie kompy, modułu jednak nie ma.

    Nawet w logach routera nie ma, że cokolwiek się dobijało i chciało połączć z siecią.
  • #15
    arrevalk
    Level 25  
    Ok nie wiem jakiego routera używasz ale w moim jest takie narzędzie jak MAC filters. I żeby urządzenie podłączone do routera było widoczne w sieci to muszę dodać jego MAC w tym filtrze.
    Możliwe że jest pewna różnica w zmiennych jakie mamy w bootloaderze, bo ja używam innej platformy sprzętowej (bootloader ten sam).
    Spróbuj podłączyć moduł do routera i włączyć transfer tftp powinna diodka na routerze migać a jeżeli ni to znaczy że kabel może być uszkodzony.
  • #16
    kafka
    Level 22  
    Okazało się, że wszysto było dobrze. Mała literówka. Router niby mi go nie pokazuje, ale mgę pobierać dane przez tftp.
  • #17
    kafka
    Level 22  
    A ktoś z Was kompilował już OpenWrt? Chciałem zrobić sobie swój odpowiednik uImage-ptog.bin. Czyli taka mała dystrybucja w formie ramdisku (kernel+rootfs) ładowane i uruchamiane w pamięci RAM. Coś mi jednak nie wychodzi. Konfigi na CD propoxu są chyba błędne. Ustawione były na arma 9200. Pozmieniałem, kernel się niby ładuje ale rootfsa nie znajduje.
  • #18
    biexi
    Level 11  
    Ok rozwiązanie pierwszego mojego problemu (1 post)
    root(małpa)MMnet:~# ls -al
    drwxr-xr-x    2 root     root          224 Jan  1 23:57 .
    drwxrwxrwx   14 root     root         1120 Jan  1 01:38 ..
    -rwxr-xr-x    1 root     root         7307 Jan  2 00:01 ble
    root(małpa)MMnet:~# ./ble
    sh: ./ble: not found
    root(małpa)MMnet:~#

    Pomogło dodanie przy kompilowaniu aby dołaczał statycznie biblioteki.
    arm-unknown-linux-gnu-gcc -static ble.c -o ble


    Teraz tak co do uImage-prog.bin tez chialabym sobie samodzielnie cos takiego przygotowac ale to jest o tyle dziwne ze jest to kernel + minirootfs w jednym pliku i nie obczaiłam jeszcze jak jest to zbudowane.

    Udało mi się za to zbudować rotfs'a przy uzyciu busybox'a i teraz kilka uwag które niestey nie byly umieszczone w dokumentacji:
    tworząc rootfs'a zrób mknodem podstawowe wymagane urządzenia w /dev z ktorych najważniejsz to console :P
    i dopero zacznij ubunizować obraz :]

    Teraz tak co do konfigów z dostarczonej plyty CD są poprawne tylko:
    1 - przy kompilacji kernela trzeba załadować konfig od mmnet'u przygotowany przez gości z propoxu ewentualnie samodzielnie ustawiać kilka zmiennych w jaku jka np init (kompilowałam jajko z plyty propoxy jesli chesz wlasne to trzeba bedzie chyba je zapatchowac patchami od arm'ow)
    2 - OpenWrt tez dziala ok po zbuodwaniu obrazu i zubinizowaniu tylko... trzeba je wgrywac po uruchomieniu uImage-prog nażedziemi z ubi-utils

    Osobiscie jak na takiego ARM'a to opewrt jest dosc ciezkawe ja zbudowałam sobie własny system :]

    Ok tutaj jeszcze zadam pytanie do ludzi znjących bardziej u-boot'a
    mianowcie niedziała mi savenv wrzucenie do flesha binarki z zmiennymi u-boot'a tez nic nie daje co panowie/panie proponują w takiej sytuacji?
  • #19
    kafka
    Level 22  
    Udało mi się skompilować OpenWrt do postaci ramdisku :) Zajmuje tylko 2.2MB i cały system w ramie :).

    Jak na razie nie mogę tylko dwóch rzeczy jeszcze zrobić...

    Nie mam narzędzi ubidetach, nand erase, nand write. Nie mam pojęcia co mam dodać żeby je mieć. Zdawało mi się, że będą w paczki mtd, jednak nic.

    Nie mam też niestety dostępu do neta. Niby jajko wykrywa układ

    eth0: Atmel MACB at 0xfffc4000 irq 21 (3a:1f:34:08:54:54)
    eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=ffffffff:00, irq=-1)

    jednak ifconfig daje:

    eth0      Link encap:Ethernet  HWaddr 3A:1F:34:08:54:54
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:1224 (1.1 KiB)
              Interrupt:21 Base address:0x4000
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  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:0
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)



    I nawet jak dam ifconfig eth0 (jakieś ip) up to połączenia nie mam.



    A co saveenva to dziwne. Powienien działać. Ja kiedyś na początku zrobiłem tak, że po zapisaniu zmiennych ściągnąłem SAM-BA partycją bootenv a potem podczas wgrywania uboota od początku ją też wrzucałem.
  • #20
    biexi
    Level 11  
    mtd-utils trzeba bedzie przebudować tylko najpierw trzeba przygotować sobie dobrego tolchaina
  • #21
    szakal9999
    Level 11  
    co do pierwszego twojego problemu, to na płytce jest kompilator(ale tylko na starszej płytki)wersji i nic nie trzeba linkować, wystarczy arm-linux-gcc cos.c -o cos.x. O ile pamiętam, to chyba nawet im pisałem, że na nowej go nie ma. dołączanie bibliotek podstawowych w kod to trochę mija się z celem, bo po to jest biblioteka standardowa, żeby była jedna, a nie aplikacja dostarczała własną implementację.
  • #22
    kafka
    Level 22  
    no właśnie... mtd-utils czy mtd-tools? może trzeba jeszcze coś w jajku poustawiać?

    A jakieś pomysły dotyczące ethernetu?

    
    root@comARMder:/# ifeth0: link up (100/Full)
    config
    eth0      Link encap:Ethernet  HWaddr EE:E5:2B:AA:1C:83
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:408 (408.0 B)
              Interrupt:21 Base address:0x4000
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  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:0
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    root@comARMder:/# ifconfig eth0 down
    root@comARMder:/# eth0: link down
    root@comARMder:/# ifconfig eth0 192.168.2.131 netmask 255.255.255.0 up
    root@comARMder:/# eth0: link up (100/Full)
    
    root@comARMder:/# tftp -g -r uImage 192.168.2.129
    tftp: timeout
    root@comARMder:/# tftp -g -r uImage-prog.bin 192.168.2.129
    tftp: timeout
    root@comARMder:/# ifconfig
    eth0      Link encap:Ethernet  HWaddr EE:E5:2B:AA:1C:83
              inet addr:192.168.2.131  Bcast:192.168.2.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:28500 (27.8 KiB)
              Interrupt:21 Base address:0x4000
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:12 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:906 (906.0 B)  TX bytes:906 (906.0 B)
    
    root@comARMder:/#
    


    Serwer na 100% dobry... jak wgrywałem oryginalny uImage-prog.bin

    
    root@(none):/# tftp -g -r uImage-prog.bin 192.168.2.129
    root@(none):/# ls
    bin              lib              root             uImage-prog.bin
    dev              mnt              sbin             usr
    etc              proc             sys              var
    init             program          tmp              www
    
  • #23
    arrevalk
    Level 25  
    A spróboj pingnąc serwer i router. Zobacz jak reagują diody aktywności na routerze i module (jeżeli takowe są).
    Pokaż też zawartość pliku /etc/rc

    Dodano po 0 [sekundy]:

    A spróboj pingnąc serwer i router. Zobacz jak reagują diody aktywności na routerze i module (jeżeli takowe są).
    Pokaż też zawartość pliku /etc/rc
  • #24
    biexi
    Level 11  
    szakal9999 więc tak tolchaina zbudowałam sobie samodzielnie za pomocą crossdev
    dla zainteresowanych
    crossdev -t arm-unknown-linux-gnu --b 2.19.1 --g 4.3.3 --l 2.9_p20081201-r1 --k 2.6.28-r1

    gdzie
    --b 2.17 # specifies the version of binutils
    --g 4.2.3 # specifies the version of gcc
    --l 0.98.3-r2 # specifies the version of the tuple-specified libc
    --k 2.6.25 # specifies the version of the kernel headers

    Stworzyłam własnego rootfs'a na bazie busyboxa kompulująć biblioteki statycznie bo kompilacja libc oraz kolegów na arm'a była by zbyt pracochłonna
    Z zalorzenia che sobie stworzyć lekki system na moje potrzeby :] i przyokazji nauczyć się czegoś nowego

    Co do problemu samego uruchamiania z 1 posta program próbowałam kompilować narzędziami z różnymych tolchain;ów i nie działało :/

    kafka - Pokaż log z botowania oraz jeśli modygikowałeś pisałeś modyfikowałeś skrypt preinit też go pokaż
    Zabotuj system z zbidowanego przez siebie obrazu ustaw IP na nim i z serwera zapinguj MMnet'a jeśli odpowiedzi są to przczyny trzeb będzie szukać gdzieś indziej (obsluka tcp/ip poprawna) tzn problem zbudowanym systemem :]
  • #25
    kafka
    Level 22  
    
    U-Boot> bootm 0x22000000
    ## Booting kernel from Legacy Image at 22000000 ...
       Image Name:   Linux-2.6.25.20-svn13340
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    2302400 Bytes =  2.2 MB
       Load Address: 20008000
       Entry Point:  20008000
       Verifying Checksum ... OK
       Loading Kernel Image ... OK
    OK
    
    Starting kernel ...
    
    Uncompressing Linux......................................................................................................... done, booting the kernel.
    Linux version 2.6.25.20-svn13340 (root@KafkaLab) (gcc version 4.1.2) #18 Mon Aug 3 23:24:18 CEST 2009
    CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
    Machine: Andra comARMder
    Memory policy: ECC disabled, Data cache writeback
    Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
    CPU0: D VIVT write-back cache
    CPU0: I cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets
    CPU0: D cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets
    Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
    Kernel command line: mem=64M console=ttyS0,115200 root=/dev/ram0 init=/etc/preinit
    AT91: 96 gpio irqs in 3 banks
    PID hash table entries: 256 (order: 8, 1024 bytes)
    Console: colour dummy device 80x30
    console [ttyS0] enabled
    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Memory: 64MB = 64MB total
    Memory: 61568KB available (1736K code, 181K data, 1412K init)
    Mount-cache hash table entries: 512
    CPU: Testing write buffer coherency: ok
    net_namespace: 444 bytes
    NET: Registered protocol family 16
    NET: Registered protocol family 2
    IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
    TCP established hash table entries: 2048 (order: 2, 16384 bytes)
    TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
    TCP: Hash tables configured (established 2048 bind 2048)
    TCP reno registered
    NetWinder Floating Point Emulator V0.97 (double precision)
    JFFS2 version 2.2. (NAND) (SUMMARY)  ÂŠ 2001-2006 Red Hat, Inc.
    io scheduler noop registered
    io scheduler deadline registered (default)
    atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
    atmel_usart.1: ttyS1 at MMIO 0xfffb0000 (irq = 6) is a ATMEL_SERIAL
    atmel_usart.2: ttyS2 at MMIO 0xfffb4000 (irq = 7) is a ATMEL_SERIAL
    brd: module loaded
    MACB_mii_bus: probed
    eth0: Atmel MACB at 0xfffc4000 irq 21 (ee:e5:2b:aa:1c:83)
    eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=ffffffff:00, irq=-1)
    NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit)
    Scanning device for bad blocks
    Bad eraseblock 70 at 0x01180000
    Bad eraseblock 234 at 0x03a80000
    Bad eraseblock 830 at 0x0cf80000
    Bad eraseblock 910 at 0x0e380000
    Bad eraseblock 935 at 0x0e9c0000
    Bad eraseblock 987 at 0x0f6c0000
    Bad eraseblock 1211 at 0x12ec0000
    Bad eraseblock 1305 at 0x14640000
    Bad eraseblock 1317 at 0x14940000
    Bad eraseblock 1611 at 0x192c0000
    Bad eraseblock 1761 at 0x1b840000
    Bad eraseblock 1931 at 0x1e2c0000
    Bad eraseblock 2176 at 0x22000000
    Bad eraseblock 2283 at 0x23ac0000
    Bad eraseblock 2284 at 0x23b00000
    Bad eraseblock 2367 at 0x24fc0000
    Bad eraseblock 2419 at 0x25cc0000
    Bad eraseblock 2602 at 0x28a80000
    Bad eraseblock 2838 at 0x2c580000
    Bad eraseblock 2891 at 0x2d2c0000
    Bad eraseblock 3045 at 0x2f940000
    Bad eraseblock 3191 at 0x31dc0000
    Bad eraseblock 3596 at 0x38300000
    Creating 5 MTD partitions on "at91_nand":
    0x00000000-0x00040000 : "bootstrap"
    0x00040000-0x00080000 : "u-boot"
    0x00080000-0x00200000 : "u-boot environment"
    0x00200000-0x00800000 : "kernel"
    0x00800000-0x40000000 : "filesystems"
    TCP vegas registered
    NET: Registered protocol family 1
    NET: Registered protocol family 17
    802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
    All bugs added by David S. Miller <davem@redhat.com>
    Freeing init memory: 1412K
    [sighandler]: No more events to be processed, quitting.
    [cleanup]: Waiting for children.
    [cleanup]: All children terminated.
    - preinit -
    Press CTRL-C for failsafe
    
    Please press Enter to activate this console.
    
    
    BusyBox v1.11.3 (2009-08-03 00:25:39 CEST) built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    
    


    A to jest preinit:

    
    #!/bin/sh
    # Copyright (C) 2006 OpenWrt.org
    export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    . /etc/diag.sh
    
    failsafe_ip() {
            ifconfig $ifname 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
    }
    
    failsafe() {
            [ -n "$ifname" ] && grep "$ifname" /proc/net/dev >/dev/null && {
                    failsafe_ip
                    netmsg 192.168.1.255 "Entering Failsafe!"
                    telnetd -l /bin/login <> /dev/null 2>&1
            }
            lock /tmp/.failsafe
            ash --login
    }
    
    mount proc /proc -t proc
    mount sysfs /sys -t sysfs
    
    size=$(awk '/MemTotal:/ {l=5242880;mt=($2*1024);print((s=mt/2)<l)&&(mt>l)?mt-l:s}' /proc/meminfo)
    mount tmpfs /tmp -t tmpfs -o size=$size,nosuid,nodev,mode=1777
    
    if grep devfs /proc/filesystems > /dev/null; then
            mount devfs /dev -t devfs
            M0=/dev/pty/m0
            M1=/dev/pty/m1
            HOTPLUG=/sbin/hotplug-call
    
    elif [ -x /sbin/hotplug2 ]; then
            mount -t tmpfs tmpfs /dev -o size=512K
            mknod /dev/console c 5 1
            /sbin/hotplug2 --coldplug --set-rules-file /etc/hotplug2-init.rules
            /sbin/hotplug2 --no-coldplug --persistent --set-rules-file /etc/hotplug2-init.rules &
            M0=/dev/ptmx
            M1=/dev/ptmx
            HOTPLUG=
    
    elif [ -x /sbin/udevd ]; then
            mount -n -t tmpfs -o mode=0755 udev /dev
            /sbin/udevd --daemon
            /sbin/udevtrigger
            /sbin/udevsettle
            M0=/dev/pty/ptmx
            M1=/dev/pty/ptmx
            HOTPLUG=
    fi
    
    mkdir -p /dev/pts /dev/shm
    mount devpts /dev/pts -t devpts
    
    # the shell really doesn't like having stdin/out closed
    # that's why we use /dev/pty/m0 and m1 as replacement
    # for /dev/console if there's no serial console available
    dd if=/dev/console of=/dev/null bs=1 count=0 >/dev/null 2>/dev/null && {
            M0=/dev/console
            M1=/dev/console
    }
    
    exec <$M0 >$M1 2>&0
    
    echo "- preinit -"
    echo "Press CTRL-C for failsafe"
    trap 'FAILSAFE=true' INT
    trap 'FAILSAFE=true' USR1
    [ -e /etc/preinit.arch ] && . /etc/preinit.arch
    set_state preinit
    echo "$HOTPLUG" > /proc/sys/kernel/hotplug
    eval ${FAILSAFE:+failsafe}
    lock -w /tmp/.failsafe
    
    if [ -z "$INITRAMFS" ]; then
            mount_root
            [ -f /sysupgrade.tgz ] && {
                    echo "- config restore -"
                    cd /
                    mv sysupgrade.tgz /tmp
                    tar xzf /tmp/sysupgrade.tgz
                    rm -f /tmp/sysupgrade.tgz
                    sync
            }
    
            echo "- init -"
    
            exec /sbin/init
    fi
    


    Nie zmieniałem go, a może powinienem? Na pingo niestety nie odpowiada.
  • #26
    biexi
    Level 11  
    kafka Najprawdopodobniej kernel
    masz tu linka do konfiga w którym działa sieć
    http://biexi.eu/tmp/files/mmnet/kernel.conf
    i całego kernela
    http://biexi.eu/tmp/files/mmnet/linux-2.6.29.3-MMnet1000.tar.gz

    Teraz tak jeśli ktoś ma działający plik uboot-env.bin to proszę o wystawkę bo coś mi nie działa

    U-Boot 1.1.5 (Sep  5 2008 - 10:23:06)
    
    DRAM:  64 MB
    NAND:  NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit)
    NAND: Pagesize: 2048, Blocksize: 256K, OOBsize: 64
    1024 MiB
    *** Warning - bad CRC or NAND, using default environment
    
    In:    serial
    Out:   serial
    Err:   serial
    DM9161A PHY Detected
    End of Autonegociation
    U-Boot>

    Podejżewam że błąd
    *** Warning - bad CRC or NAND, using default environment

    jest spowodowany właśnie złymi zmiennymi uboot'a
    Jak widać nie zapisuje zmiennych
    U-Boot> printenv
    bootdelay=3
    baudrate=115200
    stdin=serial
    stdout=serial
    stderr=serial
    
    Environment size: 69/131067 bytes
    U-Boot>

    PS
    a ja myslam ze mam duzo badow w pamieci nand jednak nie :]

    Ewentualnie jesli ktoś budował plik z zmiennymi dla ubota to rosze o jakieś wskazówki (z tego co widze to w pliku podane jest dokładnie z kad ma botować kernela)
  • #27
    kafka
    Level 22  
    biexi>

    Sęk w tym, że kompiluję całr OpenWRT ze żródeł z CD z propoxu. Tam niestety jest jajko 2.6.25.20. Podejrzewam, że nie do końca obsługuje ono DM9161. Z chęcią przesiadłbym się na wyższe jajko, jednak nie wiem jak mam zmusić OpenWRT do ściągnięcia nowego jajko, patchów itp.

    A co do u-boota...U mnie na początku też CRC-error. Wtedy setenvem ustawiłęm sobie zmienne jakie chciałem, zrobiłem saveenv i było git. W zał jakieś moje zmienne.

    A tak pz. znalazłem taki skrypt (już go modyfikowałem... tam możesz ustawić sobie zmienne u-boota. u mnie działa:

    
    # ----------------------------------------------------------------------------
    #         ATMEL Microcontroller Software Support 
    # ----------------------------------------------------------------------------
    # Copyright (c) 2008, Atmel Corporation
    #
    # All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions are met:
    #
    # - Redistributions of source code must retain the above copyright notice,
    # this list of conditions and the disclaimer below.
    #
    # Atmel's name may not be used to endorse or promote products derived from
    # this software without specific prior written permission.
    #
    # DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
    # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
    # DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
    # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
    # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    # ----------------------------------------------------------------------------
    
    ################################################################################
    #  proc uboot_env: Convert u-boot variables in a string ready to be flashed
    #                  in the region reserved for environment variables
    ################################################################################
    proc set_uboot_env {nameOfLstOfVar} {
        upvar $nameOfLstOfVar lstOfVar
        
        # sector size is the size defined in u-boot CFG_ENV_SIZE
        set sectorSize [expr 0x40000 - 5]
    
        set strEnv [join $lstOfVar "\0"]
        while {[string length $strEnv] < $sectorSize} {
            append strEnv "\0"
        }
        # \0 between crc and strEnv is the flag value for redundant environment
        set strCrc [binary format i [::vfs::crc $strEnv]]
        return "$strCrc\0$strEnv"
    }
    
    
    ################################################################################
    #  Main script: Load the linux demo in DataFlash,
    #               Update the environment variables
    ################################################################################
    set bootstrapFile	"At91bootstrap_nandflash_comARMder.bin"
    set ubootFile	"u-boot.bin"	
    set ubootEnvFile	"uboot-env-prog.bin"
    
    set kernelFile	"uImage"
    set rootfsFile	"comARMder-OpenWrt.ubi"	
    
    ## NandFlash Mapping
    set bootStrapAddr	0x00000000
    set ubootAddr	0x00040000
    set ubootEnvAddr	0x00080000
    set ubootKernAddr	0x00200000
    set ubootRootAddr	0x00800000
    set ubootRootEnd  0x40000000
    
    set ramAddr		0x22000000
    set rootfsSize    [format "0x%08X" [file size ../tftp/$rootfsFile]]
    set kernelSize    [format "0x%08X" [file size ../tftp/$kernelFile]]
    
    ## After programming
    set bootcmd		"setenv bootcmd nand read $ramAddr $ubootKernAddr $kernelSize\\; bootm $ramAddr"
    
    lappend u_boot_variables \
        "ethaddr=3a:1f:34:08:54:54" \
        "serverip=192.168.2.126" \
        "ipaddr=192.168.2.131" \
        "bootdelay=3" \
        "baudrate=115200" \
        "stdin=serial" \
        "stdout=serial" \
        "stderr=serial" \
        "bootargs=mem=64M console=ttyS0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs init=/etc/preinit" \
        "bootcmd=tftp $ramAddr $kernelFile; nand erase $ubootKernAddr $ubootRootAddr; nand write $ramAddr $ubootKernAddr $ubootRootAddr; tftp $ramAddr $rootfsFile; nand erase $ubootRootAddr $ubootRootEnd; nand write $ramAddr $ubootRootAddr $rootfsSize; $bootcmd; saveenv; reset"
    
    puts "-I- === Initialize the NAND access ==="
    NANDFLASH::Init
    
    puts "-I- === Load the bootstrap: nandflash_at91sam9-ek in the first sector ==="
    NANDFLASH::sendBootFile $bootstrapFile
    
    puts "-I- === Load the u-boot in the next sectors ==="
    send_file {NandFlash} "$ubootFile" $ubootAddr 0 
    
    puts "-I- === Load the u-boot environment variables ==="
    set fh [open "$ubootEnvFile" w]
    fconfigure $fh -translation binary
    puts -nonewline $fh [set_uboot_env u_boot_variables]
    close $fh
    
    send_file {NandFlash} "$ubootEnvFile" $ubootEnvAddr 0 
    
  • #28
    biexi
    Level 11  
    Dzięki za skrypta oblukam go

    nowsza wersje CD do modulu jest tutaj
    http://www.propox.com/download/software/MMnet1000-CD-20090601.zip

    setenv'em ustawialam ale nie chiao mi ich zapisac
    U-Boot> setenv serverip 192.168.1.20
    U-Boot> setenv ipaddr 192.168.1.3
    U-Boot> setenv ethaddr EE:E5:2B:AA:1C:83
    U-Boot> setenv bootdelay 1
    U-Boot> setenv bootargs mem=64M baudrate=115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs init=/etc/8
    U-Boot> saveenv
    Saving Environment to NAND...
    Erasing redundant Nand...Erasing Nand...U-Boot>

    ale nie zapisuje....
    a i z tego co zauwrzylam to zmienne uboota jesli chodzi o zakres adresow jest rozny per jajko w zalerznosci od jego rozmiaru
  • #29
    kafka
    Level 22  
    Dzięki, już ściągnąłem tą wersję... Jakimś cudem wszystko zaczęło w miarę chodzić...

    Chciałbym tylko jeszcze jedną rzecz zrobić... po uruchomieniu systemu po jakimś czasie wyskakuje:
    
    eth0: link up (100/Full)
    


    Chciałbym aby to zdarzenie inicjowało wykonanie napisanego przeze mnie skryptu. Jakiś pomysł jak to zorbić? Myślałem, żeby dodać linijkę "exec ... " w tym pliku który to wyświetla, ale nie wiem co to za plik i gdzie jest :(
  • #30
    biexi
    Level 11  
    Ten komunikat
    eth0: link up (100/Full) 

    jest genrowany przez kernel mówi o podniesieniu karty sieciowej
    Co do wykonwyania skryptu to w preinit na koncu mozesz dopsiac

    sleep 10;
    ./sciezka/do/twojego.skryptu


    system poczeka 10s (niech sie ladnie interfejs pdniesie) a nastepnie wywola twoj skrypt