Kris2007 0 30 сентября, 2010 Опубликовано 30 сентября, 2010 (изменено) · Жалоба Собираю Linux из исходников с LSP под конкретный проц). Исходники для dev-board. Плата для которой собираю очень похожа но не dev-board. Вот такой вывод: U-boot: U-Boot 1.1.4 (Sep 15 2010 - 16:55:08) Marvell version: 5.3.4_0012 U-Boot code: 01200000 -> 0128FFF0 BSS: -> 012A7E14 IRQ Stack: 009fff7c FIQ Stack: 009fef7c Soc: 88F6281 A0 (DDR2) CPU running @ 333Mhz L2 running @ 166Mhz SysClock = 0Mhz , TClock = 166Mhz DRAM CAS Latency = 5 tRP = 4 tRAS = 15 tRCD=4 DRAM CS[0] base 0x00000000 size 256MB DRAM Total size 256MB 16bit width [16384kB@f8000000] Flash: 16 MB Addresses 30M - 0M are saved for the U-Boot usage. Mem malloc Initialization (30M - 22M): Done CPU : Marvell Feroceon (Rev 1) Streaming disabled Write allocate disabled USB 0: host mode PEX0 interface detected no Link. PEX 0: interface detected no Link. Net: egiga0 [PRIME], ppsdma Hit any key to stop autoboot: 0 Marvell>> printenv bootdelay=3 baudrate=115200 loads_echo=0 netmask=255.255.255.0 CASset=min MALLOC_len=8 ethprime=egiga0 rootpath=/tftpboot/rootfs_arm-gnueabi consoledev=ttyS0 linux_loadaddr=0x2000000 fix_nfsroot_to_BE=no linux_parts=mtdparts=spi_flash:0x00100000(uboot)ro,0x001c0000(kernel),0x00d40000(rootfs) nfsboot=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off console=$(consoledev),$(baudrate) $(othbootargs) $(linux_parts); tftp $(linux_loadaddr) $(image_name);bootm $(linux_loadaddr) standalone_mtd=setenv bootargs root=/dev/mtdblock2 rw rootfstype=jffs2 ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off console=$(consoledev),$(baudrate) $(othbootargs) $(linux_parts); bootm 0xf8100000 netdev=eth0 image_name=uImage_xcat vx_burn=mtdburn $(vx_image_name) vx_image_name=vxWorks.st vx=setenv bootargs mgi(0,0) host:VxWorks h=$(serverip) e=$(ipaddr):FFFF0000 u=anonymous pw=target; setenv bootaddr 0x700; setenv loadaddr 0x3000000; tftpboot $(loadaddr) $(vx_image_name); bootvx vx_flash=setenv bootargs mgi(0,0) host:VxWorks h=$(serverip) e=$(ipaddr):FFFF0000 u=anonymous pw=target; setenv bootaddr 0x700; vx_unc_boot bootargs_root=root=/dev/nfs rw bootargs_end=:::DB88FXX81:eth0:none ethaddr=00:50:43:5b:a9:a3 ethmtu=1500 mvNetConfig=mv_net_config=(00:11:88:0f:62:81,0:1:2:3),mtu=1500 usb0Mode=host yuk_ethaddr=00:00:00:EE:51:81 netretry=no rcvrip=169.254.100.100 loadaddr=0x02000000 autoload=no serverip=192.168.0.20 ipaddr=192.168.0.88 bootargs=root=/dev/nfs rw nfsroot=192.168.0.20:/tftpboot/rootfs_arm-gnueabi ip=192.168.0.88:192.168.0.20::255.255.255.0::eth0:off console=ttyS0,115200 mtdparts=spi_flash:0x00100000(uboot)ro,0x001c0000(kernel),0x00d40000(rootfs) filesize=13132c fileaddr=2000000 ethact=egiga0 bootcmd=run standalone_mtd stdin=serial stdout=serial stderr=serial enaMonExt=no enaCpuStream=no enaWrAllo=no pexMode=RC disL2Cache=no setL2CacheWT=yes disL2Prefetch=yes enaICPref=yes enaDCPref=yes sata_dma_mode=yes netbsd_en=no disaMvPnp=no enaAutoRecovery=yes Environment size: 2082/4092 bytes Linux: Booting image at f8100000 ... Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1252744 Bytes = 1.2 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK Checking for Linux kernel endianess at 0xf8100040 = 0xe1a00000 Linux Kernel is LE Starting kernel in LE mode ... Uncompressing Linux........................................................................... ......... done, booting the kernel. Linux version 2.6.22.18 (root@vechkanov1) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #6 Wed Sep 29 17:20:56 MSD 2010 CPU: ARM926EJ-S [56251311] revision 1 (ARMv5TE), cr=00053977 Machine: Feroceon-KW Using UBoot passing parameters structure BoardID from uboot=10 Memory policy: ECC disabled, Data cache writeback calling iotable_init. MEM_TABLE= virt=0xef800000, phys=0x0f800000, lengh=0x00800000 virt=0xe0000000, phys=0xe0000000, lengh=0x08000000 virt=0xf1000000, phys=0xf1000000, lengh=0x00100000 virt=0xf8000000, phys=0xf8000000, lengh=0x01000000 virt=0xf4000000, phys=0xf4000000, lengh=0x04000000 virt=0xfb000000, phys=0xfb000000, lengh=0x00010000 virt=0xf2000000, phys=0xf2000000, lengh=0x00010000 Internal prestera id register = 0x000dc153 xCat revision = A1 CPU0: D VIVT write-back cache CPU0: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets Built 1 zonelists. Total pages: 62992 Kernel command line: root=/dev/mtdblock2 rw rootfstype=jffs2 ip=192.168.0.88:192.168.0.20::255.255.255.0::eth0:off console=ttyS0,115200 mtdparts=spi_flash:0x00100000(uboot)ro,0x001c0000(kernel),0x00d40000(rootfs) PID hash table entries: 1024 (order: 10, 4096 bytes) Console: colour dummy device 80x30 Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) Memory: 248MB 0MB 0MB 0MB = 248MB total Memory: 248960KB available (2372K code, 214K data, 96K init) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok NET: Registered protocol family 16 CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 256MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e8000000, size 128MB PEX0_IO ....base fc000000, size 1MB INTER_REGS ....base f1000000, size 1MB NFLASH_CS ....base d8000000, size 128MB SPI_CS ....base f8000000, size 16MB BOOT_ROM_CS ....no such DEV_BOOTCS ....no such CRYPT_ENG ....base fb000000, size 64KB SAGE_UNIT ....base f4000000, size 64MB DRAGONITE_DTCM ....base f2000000, size 64KB Marvell Development Board (LSP Version KW_LSP_5.3.4_00018)-- DB-98DX4122-48G Soc: 88F6281 A0 LE Detected Tclk 166666667 and SysClk 0 Switch decoding windows init is done. MV Buttons Device Load PEX0 interface detected no Link. PCI: bus0: Fast back to back transfers enabled Time: kw_clocksource clocksource has been installed. NET: Registered protocol family 2 IP route cache hash table entries: 2048 (order: 1, 8192 bytes) TCP established hash table entries: 8192 (order: 4, 65536 bytes) TCP bind hash table entries: 8192 (order: 3, 32768 bytes) TCP: Hash tables configured (established 8192 bind 8192) TCP reno registered Use the XOR engines (acceleration) for enhancing the following functions: o RAID 5 Xor calculation o kernel memcpy o kenrel memzero Number of XOR engines to use: 2 MV Buttons Driver Load JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc. io scheduler noop registered io scheduler anticipatory registered (default) Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33) is a 16550A serial8250.0: ttyS1 at MMIO 0xf1012100 (irq = 34) is a 16550A Loading Marvell Ethernet Driver: o Cached descriptors in DRAM o DRAM SW cache-coherency o Multi RX Queue support - 8 RX queues o Multi TX Queue support - 8 TX Queues o TCP segmentation offload enabled o Receive checksum offload enabled o Transmit checksum offload enabled o Network Fast Processing (Routing) supported o Driver ERROR statistics enabled o Driver INFO statistics enabled o Proc tool API enabled o Rx descripors: q0=64 q1=64 q2=64 q3=64 q4=64 q5=64 q6=64 q7=64 o Tx descripors: q0=532 q1=532 q2=532 q3=532 q4=532 q5=532 q6=532 q7=532 o Loading network interface(s): o eth0, ifindex = 28, GbE port = 0 Warning: Giga 1 is Forced Skipped Off mvFpRuleDb (c052c000): 2048 entries, 8192 bytes NFTL driver: nftlcore.c $Revision: 1.98 $, nftlmount.c $Revision: 1.41 $ SPI Serial flash detected @ 0xf4000000, 16384KB (256sec x 64KB) 3 cmdlinepart partitions found on MTD device spi_flash Creating 3 MTD partitions on "spi_flash": 0x00000000-0x00100000 : "uboot" 0x00100000-0x002c0000 : "kernel" 0x002c0000-0x01000000 : "rootfs" mice: PS/2 mouse device common for all mice i2c /dev entries driver TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 eth0: started IP-Config: Complete: device=eth0, addr=192.168.0.88, mask=255.255.255.0, gw=255.255.255.255, host=192.168.0.88, domain=, nis-domain=(none), bootserver=192.168.0.20, rootserver=192.168.0.20, rootpath= VFS: Mounted root (jffs2 filesystem). Freeing init memory: 96K Warning: unable to open an initial console. Kernel panic - not syncing: No init found. Try passing init= option to kernel. И чешу в затылке... Linux не нашел init... А что делать то? Как выяснить почему? Изменено 30 сентября, 2010 пользователем Kris2007 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 30 сентября, 2010 Опубликовано 30 сентября, 2010 · Жалоба У вас рутфс точно есть? Я так понимаю что система пытается грузить рутфс с spi флешки, но по какой-то причине не находит. Может память затерли? Или забыли записать рутфс на флешку (или записали не по нужному адресу)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kris2007 0 30 сентября, 2010 Опубликовано 30 сентября, 2010 (изменено) · Жалоба Спасибо за ответ. Думаю вы правы, во всяком случае я плохо понимаю откуда rootfs там возьмется. В spi flash зашиваю u-boot от фирмы производителя чипов. Дальше я гружу собранный образ Linux через TFTP. Linux тож с LSP от производителя, но не факт что собран правильно. А как сие можно исправить? Linux нужен rootfs из внешнего источника, сама из образа uImage она его грузить не может? Я подобными вещами не занимался никогда до этого. Изменено 30 сентября, 2010 пользователем Kris2007 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 30 сентября, 2010 Опубликовано 30 сентября, 2010 · Жалоба Вы пытаетесь грузить рутфс по сети, может у вас в ядре отключена поддержка сети (nfs)? но это так,пальцем в небо... В spi flash зашиваю u-boot от фирмы производителя чипов. теоретически, туда же можно в целях эксперимента загрузить ядро и рутфс а потом уже переходить к сетевой загрузке Linux тож с LSP от производителя, но не факт что собран правильно. Конфиги где брали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 1 октября, 2010 Опубликовано 1 октября, 2010 · Жалоба У Вас флэш разбита на три партиции, рутфс должнабыть на третьей 0x002c0000-0x01000000 : "rootfs" те начиная с такого смещения Вы должны прописать образ фс, командная строка Kernel command line: root=/dev/mtdblock2 rw rootfstype=jffs2 задаёт где искать эту фс, уточните партиция называется как mtdblock2 или mtdblk2, у Вас устройство не находится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kris2007 0 1 октября, 2010 Опубликовано 1 октября, 2010 · Жалоба А как прописать этот образ??? Собирается файл uImage(make uImage) и после mtdburn uImage и перезагрузки он грузится. Распаковывается... На spi_flash Linux при этом сама rootfs не записывает? Думаю mtdblock2 именно, При смене на mtdblk2 следующий вывод: IP-Config: Complete: device=eth0, addr=192.168.0.89, mask=255.255.255.0, gw=255.255.255.255, host=192.168.0.89, domain=, nis-domain=(none), bootserver=192.168.0.20, rootserver=192.168.0.20, rootpath= VFS: Cannot open root device "nfs" or unknown-block(0,255) Please append a correct "root=" boot option; here are the available partitions: 1f00 1024 mtdblock0 (driver?) 1f01 1792 mtdblock1 (driver?) 1f02 13568 mtdblock2 (driver?) Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255) kurtis, а я из флеша гружусь, не по сети. Конфиги все от производителя, но т.к. плата другаю(и другая флеш) то могут быть нестыковки. Я поправил код для spi_flash, т.е. добавил описание define-ов и.т.п. для впаянного spi_flash. Без него система стопилась при попытке опознать флеш ID. Но правил очень аккуратно и думаю дело не в этом. Там много типов флеш возможно разных размеров и фирм, я добавил описание еще одной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
edo 0 2 октября, 2010 Опубликовано 2 октября, 2010 (изменено) · Жалоба А как прописать этот образ??? Собирается файл uImage(make uImage) и после mtdburn uImage и перезагрузки он грузится. Распаковывается... На spi_flash Linux при этом сама rootfs не записывает? операционную систему обычно можно представить как ядро + userspace. ядро управляет процессами, памятью, устройствами. userspace - это всевозможные приложения. uImage - это ядро. rootfs - это файловая система, которая будет смонтирована в "/" (root). загрузка linux'а выглядит так: - бутлоадер (u-boot например) грузит в память ядро и передаёт ему управление; - ядро грузится - ядро монтирует rootfs; - ядро запускает init на rootfs. init - это "главное" приложение, которое запускает остальные. то есть Вам нужно озадачится созданием (или поиском) rootfs с init и (скорее всего) прочими приложениями ;) Изменено 2 октября, 2010 пользователем edo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 3 октября, 2010 Опубликовано 3 октября, 2010 · Жалоба На spi_flash Linux при этом сама rootfs не записывает? Вы её прописывайте в u-boot-е командочкой cp <адресс рам> <адрес смещение флэш> <количество байт> Командочка flinfo должна показать Вам как u-boot видит флэши, и в частности разбивку их на сектора и по какому адресу к ним можно обратиться. Обычно спи флэш с адреса C0000000 идёт для u-boot-а. Если в скобочках (RO) - это значит сейктор реад онли, разблокировать их можно командочкой protect off Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kris2007 0 3 октября, 2010 Опубликовано 3 октября, 2010 (изменено) · Жалоба edu, да спасибо, этот процесс я так себе и представляю. Тока вот где взять rootfs c файлами представляю плохо. А причем здесь cp то? Не совсем понял. В RAM что ль rootfs скопировать? но откуда ее взять? У меня есть spi_flash куда я гружу u-boot. Я могу его прописать программатором или обновить через TFTP как угодно. Больше микросхем памяти на плате нет. Была еще EPPROM с константами инициализации для платы, но их перенесли в spi_flash, и u-boot читает их оттуда(сторонние разработчики). flinfo видит (пишу по памяти т.к. платы нет): u-boot 0x000000 kernel 0x100000 rootfs 0x2c0000 Почему переменная linux_paths в uboot имеет другие значения не знаю (но возможно это и правильно - на конецы разделов указывает например) Я так понимаю, я должен где-то взять rootfs с файлами и прописать его (программатором???) в spi_flash по адресу 2с0000? Так? Но блин, где взять???) У меня есть U-boot от фирмы,который инициализирует PHY и.т.п. и позволяет залить образ и.т.п., даж его исходники есть. По адресам 2с0000 согласно файлу заливаемому программатором тока 0xffff и ничего больше. У меня есть исходнки Linux+LSP от фирмы - из них я собираю uImage, заливаю его командой mtdburn uImage(видимо в RAM). Вместе с Linux или U-boot собирается, ли что-нибудь из чего можно вытащить файловую систему rootfs? (Начал читать про mkfs т.е. про mkfs.jffs2) Изменено 4 октября, 2010 пользователем Kris2007 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 4 октября, 2010 Опубликовано 4 октября, 2010 · Жалоба Почитайте лучше про buildroot и bootstrap. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
timm 0 4 октября, 2010 Опубликовано 4 октября, 2010 · Жалоба Читайте лучше RTFS linux-XXX/arch/ARCH/mach-XXXX/boards/XXXX.c linux-XXX/arch/ARCH/kernel/vmlinux.lds.S linux-XXX/Documentation/ARCH/* Полезно также запустить 'make xconfig' и посмотреть какие опции загрузки предусмотрели для вас разработчики дистрибутива. Сама по себе rootfs может быть либо образом файловой системы для флеши (1), либо для RAM-диска (2). В случае 1 ее надо заливать на флешь в отдельный раздел. В случае 2 ее обычно приклеивают к образу ядра, получая один загрузочный файл. Если ваш uImage длиннее 1MB то он возможно включает в себя rootfs, а если короче - то едва ли. Судя по вашиему журналу, ядро ищет корень во флеши: Kernel command line: root=/dev/mtdblock2 rw rootfstype=jffs2 Флешь описана следующим образом: mtdparts=spi_flash:0x00100000(uboot)ro,0x001c0000(kernel),0x00d40000(rootfs) Это и есть таблица разделов. Вероятно она забита гвоздями где-то в коде инициализации платы linux-XXX/arch/ARCH/mach-XXXX/boards/XXXX.c и выглядит примерно так: static struct mtd_partition XXX_partitions[] = { { .name = "uboot", .size = 0x100000, .offset = 0, }, { .name = "kernel", .size = 0x1C0000, .offset = MTDPART_OFS_APPEND, }, { .name = "rootfs", .size = MTDPART_SIZ_FULL, .offset = MTDPART_OFS_APPEND, } }; Обратите внимание, что никакой таблицы разделов в самой флеши нет. Просто uboot и ядро прописывают у себя одинаковые физические адреса. Так же нет и определенной привязки к чипам флеши: в том же драйвере платы вызывается platform_add_devices() со списков ядерных драйверов и физ. адресов устройств. Таким образом ядро от другой платы может искать корень на несуществующей флеши. Строить файловую систему на SPI-флеши IMHO не стоит. Значит нужен RAM-диск. Смотрите в сторону initrd, initramfs, cramfs... И изучайте make xconfig: возможно, все ваши проблемы решатся одной метко поставленной галочкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kris2007 0 6 октября, 2010 Опубликовано 6 октября, 2010 · Жалоба Спасибо! Собрал rootfs и uImage в один образ, залил все загрузилось и как-то даж работает. Но файловая система всеж на spi flash, насколько я понимаю из log. И на ихнем тож. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться