Arm с внешней шиной данных?

Тема в разделе "Флудилка", создана пользователем Igor68, 15 апр 2021.

  1. Un_ka

    Un_ka Гуру

    Когда сделаете свой загрузчик, выложите код и инструкцию по сборке на GitHub. Попробуйте поискать какое-нибудь руководство по созданию загрузчиков.
     
  2. Igor68

    Igor68 Гуру

    Выложу конечно, но не на GitHub... потому как туда выкладывать не умею.
     
    Последнее редактирование: 25 сен 2021
  3. Igor68

    Igor68 Гуру

    Конечно понимаю, что никто не ответит, но вот это:
    Код (C++):
    /*----------------------------------------------------------------------------*/
    /* NAND Commands                                  */
    /*----------------------------------------------------------------------------*/
    /* 8 bits devices */
    #define WRITE_NAND_COMMAND(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_SMARTMEDIA_BASE | AT91_SMART_MEDIA_CLE) = (unsigned char)(d); } while(0)
    #define WRITE_NAND_ADDRESS(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_SMARTMEDIA_BASE | AT91_SMART_MEDIA_ALE) = (unsigned char)(d); } while(0)
    #define WRITE_NAND(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_SMARTMEDIA_BASE) = (unsigned char)d; } while(0)
    #define READ_NAND() ((unsigned char)(*(volatile unsigned char *)(unsigned long)AT91C_SMARTMEDIA_BASE))

    /* 16 bits devices */
    #define WRITE_NAND_COMMAND16(d) do{ *(volatile unsigned short *)((unsigned long)AT91C_SMARTMEDIA_BASE | AT91_SMART_MEDIA_CLE) = (unsigned short)(d); } while(0)
    #define WRITE_NAND_ADDRESS16(d) do{ *(volatile unsigned short *)((unsigned long)AT91C_SMARTMEDIA_BASE | AT91_SMART_MEDIA_ALE) = (unsigned short)(d); } while(0)
    #define WRITE_NAND16(d) do{ *(volatile unsigned short *)((unsigned long)AT91C_SMARTMEDIA_BASE) = (unsigned short)d; } while(0)
    #define READ_NAND16() ((volatile unsigned short)(*(volatile unsigned short *)(unsigned long)AT91C_SMARTMEDIA_BASE))
    Для разных устройств(типов) NAND
    и ещё в коде nandflash.c есть такое:
    Код (C++):
    if (pNandInfo->uDataBusWidth)
        {    /* 16 bits */
                WRITE_NAND_ADDRESS16(0x00);
                WRITE_NAND_ADDRESS16((uSectorAddr >>  0) & 0xFF);
                WRITE_NAND_ADDRESS16((uSectorAddr >>  8) & 0xFF);
                WRITE_NAND_ADDRESS16((uSectorAddr >> 16) & 0xFF);
        } else {
                WRITE_NAND_ADDRESS(0x00);
                WRITE_NAND_ADDRESS((uSectorAddr >>  0) & 0xFF);
                WRITE_NAND_ADDRESS((uSectorAddr >>  8) & 0xFF);
            WRITE_NAND_ADDRESS((uSectorAddr >> 16) & 0xFF);
        }
    Для чего это может быть, если впаяна NAND одного типа?
     
  4. Un_ka

    Un_ka Гуру

    Меня больше озадачил
    Код (C++):
    while(0)
    в конце макроса.
    Возможно это фича для более быстрого обращения по адресу. Раньше у какого-то 8-ми битного процессора была возможность выделить какую-то область и к ней обращаться по 8-м битному адресу. Ну или где-то там стоит маленький с 8-ми битной адресацией nand чип.
    Я тоже пока не разобрался, надо научиться.
     
  5. Igor68

    Igor68 Гуру

    Ничего такого ужасного пока не происходит, закоментировал содержание функций в nandflash.c и размер компиляции стал меньше и всё собралось. Не работает конечно, ведь они пустые все. Хочу напомнить, что загрузка по SPI, в смысле сборки как есть из исходников происходит без плясок с бубном. Но оно и понятно, там не надо педалировать с конфигурацией портов ввода-вывода... надо только указать SPI и настроить всё. А потом работать только с регистрами. Ту так же работа с регистрами, но выходим за 4096 байт... можно конечно перейти в режим THUMB. Но вот он(THUMB) не работает в режиме прерываний и "системном" режиме. Он (режим THUMB) в системном режиме работает только на Cortex, а тут ARM9! Так, что все команды процессора имеют размер 32 бита, а не 16 как для THUMB. Одним словом одна ассемблерная команда должна занимать 4 байта в памяти, а в THUMB занимает 2 байта. При любом прерывании и системном вызове (SWI) процессор автоматически переходит в режим ARM(32 бита), а Cortex в любом режиме всегда в THUMB (он имеет развитие и называется уже THUMB2 и разработан для Cortex).

    PS: Что-то странное в коде (он выше)... там вроде как программно педалируется всё через поры-ввода вывода, можно подумать что что регистры доступа к шине данных(внешней) не при чём(ну например "ALE" и "CLE")?!
     
    Последнее редактирование: 26 сен 2021
  6. Un_ka

    Un_ka Гуру

    Зачем? Попробуйте оставить код только для 16-бит.
     
  7. Igor68

    Igor68 Гуру

    Закоментировал временно - тест для сборки. А может принудительно в THUMB откомпилировать - тут вроде как прерывания не применяются и он(код) в ARM не перейдёт?
     
  8. Igor68

    Igor68 Гуру

    И тем не менее... вывод консоли:
    Код (Text):
    RomBOOT
    >-I- -- NandFlash ISP applet 2.9 --
    -I- -- AT91SAM9260-EK
    -I- -- Compiled: Jun 22 2009 15:00:27 --
    -I- INIT command
    -I- Nandflash ID is 0x0F070C00
    -E- RawNandFlash_Initialize: Could not autodetect chip.
    -I-     Device Unknown
    -I-     End of applet (command : 0 --- status : 1)
    -I- -- NandFlash ISP applet 2.9 --
    -I- -- AT91SAM9260-EK
    -I- -- Compiled: Jun 22 2009 15:00:27 --
    -I- INIT command
    -I- Nandflash ID is 0x1580DAEC
    -I-     Nandflash driver initialized
    -I-      pageSize : 0x800 blockSize : 0x20000 blockNb : 0x800 bus width : 8
    -I-      bufferAddr : 0x20003aa0
    -I-     End of applet (command : 0 --- status : 0)
    -I- WRITE arguments : offset 0x0, buffer at 0x20003aa0, of 0xbbc Bytes
    -I- WRITE at block 0x0, page 0x0, offset in page 0x0
    -I-     End of applet (command : 2 --- status : 0)
    RomBOOT
    >Start AT91Bootstrap...

     
    Тут раскоменировал... и вообще в файле at91sam9260.h в директории nandflash. Это отчёт загрузчика SAM-BA и запуск кода после повторного включения. Вот:
    Код (C++):
    /* ******************************************************************* */
    /* Application Settings                                                */
    /* ******************************************************************* */
    //#undef CFG_DEBUG
    //#undef CFG_DATAFLASH
    #define CFG_DEBUG
    Просто разрешил вывод в DEBUG (терминал). То есть код заработал.

    PS: следует отметить, что сборку производил на малине 4 - поле битвы RAMDISK(компилятор на малине:arm-none-eabi-gcc), а потом откомпилированный код переслал в виртуальный WinXP с SAM-BA(это уже не на малине) и залил, потом выключил и включил плату. При этом консоль была всегда активной (она на малине первой, которая круглые сутки в работе и приклеена к роутеру).
     
    Последнее редактирование: 26 сен 2021
  9. Igor68

    Igor68 Гуру

    Может кто-то объяснит вот это:
    ...некая функция:
    Код (C++):
    /*------------------------------------------------------------------------------*/
    /* \fn    AT91F_NandReadID                            */
    /* \brief Read Nand ID                                */
    /*------------------------------------------------------------------------------*/
    static PSNandInitInfo AT91F_NandReadID(void)
    {
        unsigned int uChipID, i=0;
        unsigned char bManufacturerID, bDeviceID;
       
        /* Enable chipset */
        NAND_ENABLE_CE();

        /* Ask the Nand its IDs */
            WRITE_NAND_COMMAND(CMD_READID);
            WRITE_NAND_ADDRESS(0x00);

            /* Read answer */
            bManufacturerID = READ_NAND();
           bDeviceID       = READ_NAND();

        /* Disable chipset before returning */
        NAND_DISABLE_CE();

        uChipID = (bManufacturerID << 8) | bDeviceID;
       
        /* Search in NandFlash_InitInfo[] */
        while (NandFlash_InitInfo[i].uNandID != 0)
        {
            if (NandFlash_InitInfo[i].uNandID == uChipID)
                return &NandFlash_InitInfo[i];  
       
            i++;
        }
       
        return 0;
    }
     
    Обратите внимание на return 0.
    А вот это место откуда она вызывается:
    Код (C++):
    *------------------------------------------------------------------------------*/
    /* \fn    load_nandflash                            */
    /* \brief load from nandflash                             */
    /*------------------------------------------------------------------------------*/
    int load_nandflash(unsigned int img_addr, unsigned int img_size, unsigned int img_dest)
    {
        SNandInfo sNandInfo;
        PSNandInitInfo pNandInitInfo;
        char *pOutBuffer = (char*)img_dest;
        unsigned int blockIdx, badBlock, blockRead, length, sizeToRead, nbSector, newBlock, sectorIdx, blockError, sectorSize;

        nandflash_hw_init();
       
        // Read Nand Chip ID
            pNandInitInfo = AT91F_NandReadID();
    ....
    ....
    обратие внимание на PSNandInitInfo pNandInitInfo;
    И что сие означает?
     
  10. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Всё что сделано - сделано на малине 4 в RAM-диске, с помощью компилятора arm-none-eabi-gc, который устанавливается
    по apt-get штатно и без плясок с бубном.
    Вот:
    Код (Text):
    RomBOOT
    >Start AT91Bootstrap...


    U-Boot 1.3.4 (Sep 28 2021 - 03:49:35)

    DRAM:  64 MB
    NAND:  256 MiB
    *** Warning - bad CRC, using default environment

    In:    serial
    Out:   serial
    Err:   serial
    Net:   macb0
    macb0: Starting autonegotiation...
    macb0: Autonegotiation timed out (status=0x7849)
    macb0: link down (status: 0x7849)
    Hit any key to stop autoboot:  0
    Тут Bootstrap и загружается U-Boot... но дальше ничего не загружается, что понятно -
    ведь кернел не залит на плату.

    А это:
    Код (Text):
    RomBOOT
    >Start AT91Bootstrap...


    U-Boot 1.3.4 (Sep 28 2021 - 03:49:35)

    DRAM:  64 MB
    NAND:  256 MiB
    *** Warning - bad CRC, using default environment

    In:    serial
    Out:   serial
    Err:   serial
    Net:   macb0
    macb0: Starting autonegotiation...
    macb0: Autonegotiation timed out (status=0x7849)
    macb0: link down (status: 0x7849)
    Hit any key to stop autoboot:  0
    U-Boot>
    U-Boot>
    U-Boot>
    U-Boot>
    U-Boot> help
    Unknown command 'руhelp' - try 'help'
    U-Boot>
    U-Boot> ?
    ?       - 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    - invoke DHCP client to obtain IP/boot params
    echo    - echo args to console
    erase   - erase FLASH memory
    flinfo  - print FLASH memory information
    go      - start application at address 'addr'
    help    - print online help
    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)
    mtest     - simple RAM 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
    rarpboot- boot image via network using RARP/TFTP protocol
    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 version
    U-Boot>
     
    подсказка U-Boot... надо сначала нажать клавишу при загрузке.
    Всё это говорит о том, что Bootstrap был собран исправно и не зря я его пилил (исходник), но выключить сторожевой таймер был вынужден, потому как сброс происходил ещё при загрузке.
    Что касается U-Boot, то взял исходники по старее, потому как свежие компилируются
    в размер более 0x40000 байт(а памяти мало). Его я не пилил почти... так... просто кое-где блокировал и изменял
    некоторые функции, потому как нет толпы светодиодов на плате, а функции в коде есть и др.

    PS: Всё выложу, но не Гитхабе потому как там не умею. Сейчас буду пилить кернел, но перед этим пощупаю U-Boot, балуясь с его командами. Думаю определюсь с механизмом создания прошивок с системами.
     
    ZAZ-965 нравится это.
  11. Igor68

    Igor68 Гуру

    Доброго времени суток! Воспользовался Вашим советом (по Buildroot-2021.02.3)!!! Спасибо!!!!!
    Собирал на обычном PC с Debin (на малине тесно - в рам диск не лезет, а подключать к ней ничего не буду. Потому как она переносной инструментальный сервер). Ну и гугл направил (а может и Вы показали):
    https://www.linux4sam.org/bin/view/Linux4SAM/AT91Bootstrap4
    Предположительно, что Bootstrap в режиме THUMB собирали. И вот:
    Код (Text):
    RomBOOT
    >

    AT91Bootstrap 3.8.10 (Чт 30 сен 2021 10:00:21 MSK)

    NAND: Done to load image


    U-Boot 2016.09.01 (Sep 30 2021 - 10:04:26 +0300)

    CPU: AT91SAM9260
    Crystal frequency:   18.432 MHz
    CPU clock        :  198.656 MHz
    Master clock     :   99.328 MHz
    DRAM:  64 MiB
    WARNING: Caches not enabled
    NAND:  256 MiB
    *** Warning - bad CRC, using default environment

    In:    serial
    Out:   serial
    Err:   serial
    Net:   macb0
    Error: macb0 address not set.

    Hit any key to stop autoboot:  0
    U-Boot> help
    ?       - alias for 'help'
    base    - print or set address offset
    boot    - boot default, i.e., run 'bootcmd'
    bootd   - boot default, i.e., run 'bootcmd'
    bootefi - Boots an EFI payload from memory
    bootelf - Boot from an ELF image in memory
    bootm   - boot application image from memory
    bootp   - boot image via network using BOOTP/TFTP protocol
    bootvx  - Boot vxWorks from an ELF image
    bootz   - boot Linux zImage image from memory
    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 /)
    fatsize - determine a file's size
    fdt     - flattened device tree utility commands
    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)
    loadx   - load binary file over serial line (xmodem 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)
    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
    U-Boot> dase
    Unknown command 'dase' - try 'help'
    U-Boot>
    U-Boot> base
    Base Address: 0x00000000
    U-Boot>
    Base Address: 0x00000000
    U-Boot> printenv
    baudrate=115200
    bootargs=console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2
    bootcmd=nand read 0x22000000 0x200000 0x300000; bootm
    bootdelay=3
    ethact=macb0
    stderr=serial
    stdin=serial
    stdout=serial

    Environment size: 362/131067 bytes
    U-Boot>
     
    Тут и меню U-Boot потолще и по всему свежее.
    При сбоке получил zImage, rootfs.tar, rootfs.ubi и rootfs,ubis. Про Bootstrap и U-Boot уже и не говорю.
    Кстати Bootstrap вышел 3508 байт... думаю THUMB а не ARM.
    Стапт кернела как и ранее 0x23F00000... вот и не знаю куда, что записывать
    Если не сложно,то жду подсказки.
    Спасибо!
     
  12. ZAZ-965

    ZAZ-965 Гуру

    Если стопорится из-за отсутствия MAC адреса (Error: macb0 address not set), попробуйте установить его через setenv
    Код (Bash):
    U-Boot>setenv ethaddr 02:80:ad:20:57:23
    U-Boot> setenv ipaddr 192.168.1.212
    U-Boot> setenv serverip 192.168.1.1
    U-Boot> setenv netmask 255.255.255.0
    U-Boot> saveenv
    МАС взял из инета, в Вики предлагают сгенерировать при помощи tools/gen_eth_addr.c В README.enetaddr написано как обрабатыватся МАС адреса, но у меня в крупных проектах поиск по коду не работает, поэтому нужные строки в коде найти не получилось.
    PS в выводе printenv не вижу переменных bootfile и bootcmd, можно попробовать загрузить ядро через tftp
    Код (Bash):
    U-Boot> setenv bootcmd 'tftp 0x23F00000 zImage; bootm 0x23F00000'
    U-Boot> saveenv
    Китаец к плате не давал схему и исходники?
     
    Igor68 нравится это.
  13. Igor68

    Igor68 Гуру

    Нет исходников и схем нет. Пользуюсь некими из интернета - ну не будут же они изобретать что-то свое, когда много всего готового... да и давно уже. Вот только засада - два блока в NAND битые. Сюрприз так сказать... что бы скучно не было. Один блок как раз пересекается с U-Boot, другой старше...
    Вот отчёт самого U-Boot (мне повезло что он просто работает):
    Код (Text):

    U-Boot>
    U-Boot> nand  bad

    Device 0 bad blocks:
      00ea0000
      0ae40000
    U-Boot>
     
    А это говорит SAM-BA:
    Код (Text):

    (AT91-ISP v1.13) 1 % NANDFLASH::BadBlockList
    -I- Found 2 Bad Blocks :
        Block 117
        Block 1394
    (AT91-ISP v1.13) 1 %
     
    Как я понял мне всегда везёт!!!
    Куда бы ни сунулся всегда палки в колёса. Мало того, что пол года ждал... а тут ещё такое.
    Буду скулить, точнее выскуливать эту грёбаную флешку у начальника. Ведь что-то такое планировали, а монтажники перепаяют. У меня глаз уже не тот, но смогу. Исходная на плате K9F2008U0H, а у меня дома в прототипе не рожденного прибора K9F5608U0D. Сейчас посмотрю даташиты и сравню... может надо только загрузчики переделать. Но сначала помучаю то, что имеется.

    Вот ещё шаманство бестолковое с U-BOOT:
    Код (Text):
    U-Boot> nand bad                

    Device 0 bad blocks:
      00ea0000
      0ae40000
    U-Boot>
    U-Boot> nand scrub.chip        

    NAND scrub.chip: device 0 whole chip
    Warning: scrub option will erase all factory set bad blocks!
             There is no reliable way to recover them.
             Use this command only for testing purposes if you
             are sure of what you are doing!

    Really scrub this NAND flash? <y/N>
    y
    Erasing at 0xcc0000 --   5% complete.
    nand0: MTD Erase failure: -5
    Erasing at 0xae00000 --  68% complete.
    nand0: MTD Erase failure: -5
    Erasing at 0xffe0000 -- 100% complete.
    OK
    U-Boot>
    U-Boot>
     
    Ну как в том анекдоте:
    ...
    - и последнее желание золотая рыбка... хочу по.....ся!
    Бах и у танка гусенецы отвалились.
    - ну нет, я хотел по настоящему!
    Бах и танк развалился полностью весь на запчасти...
     
    Последнее редактирование: 3 окт 2021
  14. Igor68

    Igor68 Гуру

    С этим я то же ковырялся... и даже ping не сработал - куда уж там tftp и nfs. И MAC и сеть настраивал - толку ноль. Может MAC надо реальный от той микросхемы DM9161, что впаяна... но где его взять - он же на корпусе не написан... а может я что-то не понимаю.
     
  15. Igor68

    Igor68 Гуру

    Вот это сейчас:
    Код (Text):
    NAND read: device 0 offset 0x200000, size 0x300000
    3145728 bytes read: OK
    Wrong Image Format for bootm command
    ERROR: can't get kernel image!
    U-Boot> printenv
    baudrate=115200
    bootargs=console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2
    bootcmd=nand read 0x22000000 0x200000 0x300000; bootm
    bootdelay=3
    ethact=macb0
    ethaddr=02:80:ad:20:57:23
    ipaddr=192.168.7.212
    netmask=255.255.255.0
    serverip=192.168.7.1
    stderr=serial
    stdin=serial
    stdout=serial

    Environment size: 460/131067 bytes
    U-Boot>
    baudrate=115200
    bootargs=console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2
    bootcmd=nand read 0x22000000 0x200000 0x300000; bootm
    bootdelay=3
    ethact=macb0
    ethaddr=02:80:ad:20:57:23
    ipaddr=192.168.7.212
    netmask=255.255.255.0
    serverip=192.168.7.1
    stderr=serial
    stdin=serial
    stdout=serial

    Environment size: 460/131067 bytes
    U-Boot> ping 192.168.7.1
    macb0: Starting autonegotiation...
    macb0: Autonegotiation complete
    macb0: link up, 100Mbps full-duplex (lpa: 0x45e1)
    Using macb0 device
    ping failed; host 192.168.7.1 is not alive
    U-Boot>
    Видите и с пингом ничего не прошло. Может при сборке U-BOOT где-то тип микросхемы
    ETHERNET контроллера указать, вот что-то не найдена мной.
    Адрес 192.168.7.1 это роутер... взят для пробы. Может сеть должна быть именно
    192.168.1.0/24 ???
     
  16. Igor68

    Igor68 Гуру

  17. Igor68

    Igor68 Гуру

    Доброго времени суток!!!
    Ребята на форуме (ссылка выше) мне очень помогли, хоть я нахожусь ещё в самом начале. Вот результат:
    Код (Text):
    RomBOOT
    >

    AT91Bootstrap 3.8.10 (Чт 07 окт 2021 14:19:20 MSK)

    NAND: Done to load image


    U-Boot 2016.09.01 (Oct 07 2021 - 14:19:35 +0300)

    CPU: AT91SAM9260
    Crystal frequency:   18.432 MHz
    CPU clock        :  198.656 MHz
    Master clock     :   99.328 MHz
    DRAM:  64 MiB
    WARNING: Caches not enabled
    NAND:  256 MiB
    In:    serial
    Out:   serial
    Err:   serial
    Net:   macb0
    Error: macb0 address not set.

    Hit any key to stop autoboot:  0

    NAND read: device 0 offset 0x200000, size 0x379108
    3641608 bytes read: OK

    NAND read: device 0 offset 0x180000, size 0x4980
    18816 bytes read: OK
    Kernel image @ 0x22000000 [ 0x000000 - 0x379108 ]
    ## Flattened Device Tree blob at 22800000
       Booting using the fdt blob at 0x22800000
       Loading Device Tree to 23eb2000, end 23eb997f ... OK

    Starting kernel ...

    Booting Linux on physical CPU 0x0
    Linux version 4.8.6 (igor@Irpi4) (gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (15:7-2018-q2-6) ) #5 Sat Oct 9 18:49:22 MSK 2021
    CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f
    CPU: VIVT data cache, VIVT instruction cache
    OF: fdt:Machine model: Atmel at91sam9260ek
    Memory policy: Data cache writeback
    Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
    Kernel command line: console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256K(env),256k(evn_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs
    PID hash table entries: 256 (order: -2, 1024 bytes)
    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Memory: 57568K/65536K available (4834K kernel code, 172K rwdata, 1732K rodata, 220K init, 128K bss, 7968K reserved, 0K cma-reserved)
    Virtual kernel memory layout:
        vector  : 0xffff0000 - 0xffff1000   (   4 kB)
        fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
        vmalloc : 0xc4800000 - 0xff800000   ( 944 MB)
        lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
        modules : 0xbf000000 - 0xc0000000   (  16 MB)
          .text : 0xc0008000 - 0xc04c0f10   (4836 kB)
          .init : 0xc0699000 - 0xc06d0000   ( 220 kB)
          .data : 0xc06d0000 - 0xc06fb140   ( 173 kB)
           .bss : 0xc06fb140 - 0xc071b224   ( 129 kB)
    NR_IRQS:16 nr_irqs:16 16
    ... обрезал - очень много ....
    TCP established hash table entries: 1024 (order: 0, 4096 bytes)
    TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
    TCP: Hash tables configured (established 1024 bind 1024)
    UDP hash table entries: 256 (order: 0, 4096 bytes)
    UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
    NET: Registered protocol family 1
    RPC: Registered named UNIX socket transport module.
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    RPC: Registered tcp NFSv4.1 backchannel transport module.
    futex hash table entries: 256 (order: -1, 3072 bytes)
    workingset: timestamp_bits=30 max_order=14 bucket_order=0
    io scheduler noop registered (default)
    fffff200.serial: ttyS0 at MMIO 0xfffff200 (irq = 16, base_baud = 6208000) is a ATMEL_SERIAL
    console [ttyS0] enabled
    fffb0000.serial: ttyS1 at MMIO 0xfffb0000 (irq = 26, base_baud = 6208000) is a ATMEL_SERIAL
    atmel_usart fffb0000.serial: Not supported ip name nor version, set to uart
    fffb4000.serial: ttyS2 at MMIO 0xfffb4000 (irq = 27, base_baud = 6208000) is a ATMEL_SERIAL
    atmel_usart fffb4000.serial: Not supported ip name nor version, set to uart
    [drm] Initialized drm 1.1.0 20060810
    brd: module loaded
    loop: module loaded
    ssc fffbc000.ssc: Atmel SSC device at 0xc4890000 (irq 31)
    atmel_nand 40000000.nand: No DMA support for NAND access.
    nand: device found, Manufacturer ID: 0xec, Chip ID: 0xda
    nand: Samsung NAND 256MiB 3,3V 8-bit
    nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
    atmel_nand 40000000.nand: Use On Flash BBT
    Bad block table not found for chip 0
    Bad block table not found for chip 0
    Scanning device for bad blocks
    Bad eraseblock 117 at 0x000000ea0000
    Bad eraseblock 1394 at 0x00000ae40000
    Bad block table written to 0x00000ffe0000, version 0x01
    Bad block table written to 0x00000ffc0000, version 0x01
    8 cmdlinepart partitions found on MTD device atmel_nand
    Creating 8 MTD partitions on "atmel_nand":
    0x000000000000-0x000000040000 : "bootstrap"
    0x000000040000-0x0000000c0000 : "uboot"
    0x0000000c0000-0x000000100000 : "env"
    0x000000100000-0x000000140000 : "evn_redundant"
    0x000000140000-0x000000180000 : "spare"
    0x000000180000-0x000000200000 : "dtb"
    0x000000200000-0x000000800000 : "kernel"
    0x000000800000-0x000010000000 : "rootfs"
    libphy: Fixed MDIO Bus: probed
    macb fffc4000.ethernet: invalid hw address, using random
    libphy: MACB_mii_bus: probed
    Davicom DM9161A fffc4000.etherne:00: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=fffc4000.etherne:00, irq=-1)
    macb fffc4000.ethernet eth0: Cadence MACB rev 0x0001010c at 0xfffc4000 irq 28 (46:48:16:d1:d0:56)
    ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
    ehci-atmel: EHCI Atmel driver
    ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
    ... обрезал - очень много ....
    cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
    usbcore: registered new interface driver usb-storage
    usbcore: registered new interface driver usbserial
    usbcore: registered new interface driver usbserial_generic
    usbserial: USB Serial support registered for generic
    usbcore: registered new interface driver ftdi_sio
    usbserial: USB Serial support registered for FTDI USB Serial Device
    usbcore: registered new interface driver pl2303
    usbserial: USB Serial support registered for pl2303
    udc: at91_udc version 3 May 2006
    g_serial gadget: Gadget Serial v2.4
    g_serial gadget: g_serial ready
    mousedev: PS/2 mouse device common for all mice
    rtc-at91sam9 fffffd20.rtc: rtc core: registered fffffd20.rtc as rtc0
    rtc-at91sam9 fffffd20.rtc: rtc0: SET TIME!
    AT91: Starting after software reset
    at91_wdt fffffd40.watchdog: watchdog is disabled
    at91_wdt: probe of fffffd40.watchdog failed with error -22
    atmel_mci fffa8000.mmc: version: 0x210
    atmel_mci fffa8000.mmc: using PDC
    atmel_mci fffa8000.mmc: Atmel MCI controller at 0xfffa8000 irq 30, 1 slots
    usbcore: registered new interface driver usbhid
    usbhid: USB HID core driver
    iio iio:device0: Resolution used: 10 bits
    iio iio:device0: not support touchscreen in the adc compatible string.
    NET: Registered protocol family 10
    sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    NET: Registered protocol family 17
    ubi0: attaching mtd7
    usb 1-1: new full-speed USB device number 2 using at91_ohci
    ... обрезал - очень много ....
    usb 1-1.4: New USB device found, idVendor=8564, idProduct=1000
    usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 1-1.4: Product: Mass Storage Device
    usb 1-1.4: Manufacturer: JetFlash
    usb 1-1.4: SerialNumber: 62PL80B82PH7C01O
    usb-storage 1-1.4:1.0: USB Mass Storage device detected
    scsi host0: usb-storage 1-1.4:1.0
    Starting syslogd: OK
    Starting klogd: OK
    Running sysctl: OK
    Saving random seed: OK
    Starting system message bus: done
    Starting rpcbind: scsi 0:0:0:0: Direct-Access     JetFlash Transcend 8GB    1100 PQ: 0 ANSI: 4
    sd 0:0:0:0: [sda] 15826944 512-byte logical blocks: (8.10 GB/7.55 GiB)
    sd 0:0:0:0: [sda] Write Protect is off
    sd 0:0:0:0: [sda] No Caching mode page found
    sd 0:0:0:0: [sda] Assuming drive cache: write through
    sda: sda1
    sd 0:0:0:0: [sda] Attached SCSI removable disk
    OK
    Starting sslh: OK
    Starting network: OK
    Starting dhcpcd...
    dhcpcd-9.4.0 starting
    ... обрезал - очень много ....
    Starting php-fpm  done
    macb fffc4000.ethernet eth0: link up (100/Full)
    IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
    Starting babeld: 1970/01/01 00:00:13 BABELD: libyang: Regular expression "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?" is not valid ("((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?)$": this version of PCRE is compiled without UTF support).
    1970/01/01 00:00:13 BABELD: libyang: Module "ietf-inet-types" parsing failed.
    1970/01/01 00:00:13 BABELD: [EC 100663342] yang_init: ly_ctx_new() failed
    FAIL
    Starting darkhttpd: OK
    Starting dropbear sshd: OK
    Starting frr: 1970/01/01 00:00:14 WATCHFRR: libyang: Regular expression "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?" is not valid ("((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?)$": this version of PCRE is compiled without UTF support).
    1970/01/01 00:00:14 WATCHFRR: libyang: Module "ietf-inet-types" parsing failed.
    1970/01/01 00:00:14 WATCHFRR: [EC 100663342] yang_init: ly_ctx_new() failed
    Failed to start watchfrr!
    OK
    ssh-keygen: generating new host keys: RSA random: crng init done
    DSA ECDSA ED25519
    Starting sshd: OK
    Starting NFS statd: OK
    Starting NFS services: point 1
    point 2
    point 3
    OK
    Starting NFS daemon: rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory).
    Please try, as root, 'mount -t nfsd nfsd /proc/fs/nfsd' and then restart rpc.nfsd to correct the problem
    FAIL
    Starting NFS mountd: OK
    Starting thttpd: OK

    Welcome to Buildroot
    buildroot login: root
    Password:
    Login incorrect
    buildroot login: root

    #
     
    Собирал zImage на малине в РАМ диске.......
     
  18. Igor68

    Igor68 Гуру

    ..... А параметры запуска (это для U-Boot) таковы:
    Код (Text):
    ************ U-Boot ****************

    --- загрузка zImage из NAND (от buildroot)---
    setenv bootcmd 'nand read 0x22000000 0x200000 0x377AD8;nand read 0x22800000 0x180000 0x4980;bootz 0x22000000 - 0x22800000'

    --- загрузка zImage из NAND (от linux-4.8.6 на raspbrry pi 4)---
    setenv bootcmd 'nand read 0x22000000 0x200000 0x379108;nand read 0x22800000 0x180000 0x4980;bootz 0x22000000 - 0x22800000'

    --- прбный старт ---
    > setenv mp atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256K(env),256k(evn_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs)
    > setenv bootargs console=ttyS0,115200 earlyprintk mtdparts=${mp} rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs
    > setenv mp
    > saveenv
     
    одним словом U-Boot это не просто загрузчик, а нечто более.
    к примеру можно стартовать и с USB-FLASH:
    Код (Text):

    U-Boot> usb reset                                                             - сбрасываем/инициализируем USB
    U-Boot> fatls usb 0                                                           - смотрим содержимое флешки USB
    U-Boot> fatload usb 0 0x22000000 zImage                     - грузим файл zImage по адресу 0x22000000 (это для моей платы)
    U-Boot> fatload usb 0 0x22800000 at91sam9260ek.dtb - грузим файл аппаратного описания платы в память по адресу 0x22800000
    U-Boot> bootz 0x22000000 - 0x22800000                       - стартуем
     
    при старте кернела буде сгенерирован MAC адрес сетевого устройства. Но его лучше задать в меню U-Boot и сохранить:
    Код (Text):
    U-Boot> setenv ethaddr 6A:51:45:22:AC:C9
    U-Boot> saveenv
    Тогда кернел при загрузке уже будет его знать и не генерировать новый, что не очень удобно для роутера... да и Вас.
    Сборку ядра лучше производить из исходников, но можно и buildroot.
     
  19. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Сейчас практически непрерывно пересобираю кернел для платы... на малине(так мне выгоднее).
    Отсюда вопрос... точнее нужен совет:
    - Каким образом сконфигурировать кернел, что бы остались сетевые службы в нём, но конкретно интерфейсы в нём не были определены кроме LOCAL (127.0.0.1), а необходимые были в загружаемых модулях *.ko и службы должны быть так же загружаемые из rootfs?

    PS: В процессе опытов я узнал, что кернел можно перезагружать как угодно, но вот с rootfs такое не проходит. Или я делаю что-то не так?
     
    Последнее редактирование: 10 окт 2021
  20. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Извините, но у меня сразу два вопроса:
    1) ни как не могу скачать исходники для этого устройства:
    Код (Text):
    usb 1-1.3: USB disconnect, device number 3
    usb 1-1.3: new full-speed USB device number 5 using at91_ohci
    usb 1-1.3: New USB device found, idVendor=0a12, idProduct=0001
    usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    usb 1-1.3: Product: Bluetooth V2.0 Dongle
    usb 1-1.3: Manufacturer: Bluetooth v2.0
    Искал по PID и VID - устройство (Bluetooth-USB) давнишнее и информацию утерял. Сколько не искал везде только решение проблем с подключением модуля *.ko. А мне надо сделать этот модуль для платы.
    2) никак не вкурю, как сделать загрузку модулей при старте:
    Вот модули загруженные сейчас в ручном режиме:
    Код (Text):
    # lsmod
    Module                  Size  Used by    Tainted: G
    8192eu               1273784  0
    cfg80211              232321  1 8192eu
    rfkill                 12052  1 cfg80211
    llc2                   85197  0
    llc                     4508  1 llc2
    vfat                    8383  0
    msdos                   6177  0
    fat                    51192  2 vfat,msdos
    ext4                  356754  0
    fscrypto               17194  1 ext4
    ext2                   55852  0
    jbd2                   67918  1 ext4
    mbcache                 4799  2 ext4,ext2
    autofs4                21585  0
    ohci_at91               5445  0
    ohci_hcd               25841  1 ohci_at91
    i2c_dev                 5875  0
    ipv6                  331847 35 [permanent]
    #
     
    Вот вручную сделанный /lib/modules/4.8.6/modules.dep
    Код (Text):
    kernel/fs/autofs4.ko: kernel/fs/mbcache.ko
    kernel/fs/ext2.ko: kernel/fs/jbd2.ko kernel/fs/mbcache.ko
    kernel/fs/ext4.ko: kernel/fs/fscrypto.ko kernel/fs/mbcache.ko
    kernel/fs/fat.ko:
    kernel/fs/msdos.ko: kernel/fs/fat.ko
    kernel/fs/vfat.ko:
    kernel/net/ipv6/ipv6.ko:
    kernel/i2c/i2c-dev.ko:
    kernel/usb/ohci-at91.ko: kernel/usb/ohci-hcd.ko
    kernel/net/llc/llc2.ko: kernel/net/llc/llc.ko
    kernel/net/wireless/8192eu.ko: kernel/net/wireless/cfg80211.ko kernel/net/wireless/rfkill.ko
    загрузка конечно через modprobe.
    А это предварительный просмотр сетевых интерфейсов:
    Код (C++):
    # ifconfig
    eth0      Link encap:Ethernet  HWaddr 6A:51:45:22:AC:C9
              inet addr:192.168.7.197  Bcast:192.168.7.255  Mask:255.255.255.0
              inet6 addr: fe80::6851:45ff:fe22:acc9/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8367 errors:0 dropped:0 overruns:0 frame:0
              TX packets:6428 errors:1 dropped:0 overruns:1 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:4462152 (4.2 MiB)  TX bytes:4049744 (3.8 MiB)
              Interrupt:28 Base address:0x4000

    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)

    wlan0     Link encap:Ethernet  HWaddr 54:2A:A2:36:7D:35
              UP BROADCAST MULTICAST  MTU:1500  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:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    #
     
    Пока только от wifi один MAC адрес.

    PS: идея в сборке, где загружаются только драйверы устройств... конечно кроме консоли отладки, которая встроена в ядро... ну и ещё доступ к NAND что бы можно было грузиться при старте.
    для уточнения:
    Код (C++):
    # uname -a
    Linux buildroot 4.8.6 #13 Sun Oct 10 17:09:12 MSK 2021 armv5tejl GNU/Linux
    #
     
     
    Последнее редактирование: 14 окт 2021