Когда сделаете свой загрузчик, выложите код и инструкцию по сборке на GitHub. Попробуйте поискать какое-нибудь руководство по созданию загрузчиков.
Конечно понимаю, что никто не ответит, но вот это: Код (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 одного типа?
Меня больше озадачил Код (C++): while(0) в конце макроса. Возможно это фича для более быстрого обращения по адресу. Раньше у какого-то 8-ми битного процессора была возможность выделить какую-то область и к ней обращаться по 8-м битному адресу. Ну или где-то там стоит маленький с 8-ми битной адресацией nand чип. Я тоже пока не разобрался, надо научиться.
Ничего такого ужасного пока не происходит, закоментировал содержание функций в 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")?!
Закоментировал временно - тест для сборки. А может принудительно в THUMB откомпилировать - тут вроде как прерывания не применяются и он(код) в ARM не перейдёт?
И тем не менее... вывод консоли: Код (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(это уже не на малине) и залил, потом выключил и включил плату. При этом консоль была всегда активной (она на малине первой, которая круглые сутки в работе и приклеена к роутеру).
Может кто-то объяснит вот это: ...некая функция: Код (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; И что сие означает?
Доброго времени суток! Всё что сделано - сделано на малине 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, балуясь с его командами. Думаю определюсь с механизмом создания прошивок с системами.
Доброго времени суток! Воспользовался Вашим советом (по 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... вот и не знаю куда, что записывать Если не сложно,то жду подсказки. Спасибо!
Если стопорится из-за отсутствия 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 Китаец к плате не давал схему и исходники?
Нет исходников и схем нет. Пользуюсь некими из интернета - ну не будут же они изобретать что-то свое, когда много всего готового... да и давно уже. Вот только засада - два блока в 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> Ну как в том анекдоте: ... - и последнее желание золотая рыбка... хочу по.....ся! Бах и у танка гусенецы отвалились. - ну нет, я хотел по настоящему! Бах и танк развалился полностью весь на запчасти...
С этим я то же ковырялся... и даже ping не сработал - куда уж там tftp и nfs. И MAC и сеть настраивал - толку ноль. Может MAC надо реальный от той микросхемы DM9161, что впаяна... но где его взять - он же на корпусе не написан... а может я что-то не понимаю.
Вот это сейчас: Код (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 ???
В данный момент учусь собирать систему... ...консультируюсь, вообще-то пытаюсь набраться ума разума на этом форуме: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=163881#comments
Доброго времени суток!!! Ребята на форуме (ссылка выше) мне очень помогли, хоть я нахожусь ещё в самом начале. Вот результат: Код (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 на малине в РАМ диске.......
..... А параметры запуска (это для 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.
Доброго времени суток! Сейчас практически непрерывно пересобираю кернел для платы... на малине(так мне выгоднее). Отсюда вопрос... точнее нужен совет: - Каким образом сконфигурировать кернел, что бы остались сетевые службы в нём, но конкретно интерфейсы в нём не были определены кроме LOCAL (127.0.0.1), а необходимые были в загружаемых модулях *.ko и службы должны быть так же загружаемые из rootfs? PS: В процессе опытов я узнал, что кернел можно перезагружать как угодно, но вот с rootfs такое не проходит. Или я делаю что-то не так?
Доброго времени суток! Извините, но у меня сразу два вопроса: 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 #