Jump to content

    
Sign in to follow this  
Kris2007

Kernel panic - not syncing: No init found. Try passing init= option to kernel.

Recommended Posts

Собираю 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... А что делать то? Как выяснить почему?

Edited by Kris2007

Share this post


Link to post
Share on other sites

У вас рутфс точно есть? Я так понимаю что система пытается грузить рутфс с spi флешки, но по какой-то причине не находит. Может память затерли? Или забыли записать рутфс на флешку (или записали не по нужному адресу)?

Share this post


Link to post
Share on other sites

Спасибо за ответ.

Думаю вы правы, во всяком случае я плохо понимаю откуда rootfs там возьмется.

В spi flash зашиваю u-boot от фирмы производителя чипов.

Дальше я гружу собранный образ Linux через TFTP.

Linux тож с LSP от производителя, но не факт что собран правильно.

 

А как сие можно исправить? Linux нужен rootfs из внешнего источника, сама из образа uImage она его грузить не может?

Я подобными вещами не занимался никогда до этого.

 

Edited by Kris2007

Share this post


Link to post
Share on other sites

Вы пытаетесь грузить рутфс по сети, может у вас в ядре отключена поддержка сети (nfs)? но это так,пальцем в небо...

В spi flash зашиваю u-boot от фирмы производителя чипов.

теоретически, туда же можно в целях эксперимента загрузить ядро и рутфс а потом уже переходить к сетевой загрузке

 

Linux тож с LSP от производителя, но не факт что собран правильно.

Конфиги где брали?

Share this post


Link to post
Share on other sites

У Вас флэш разбита на три партиции, рутфс должнабыть на третьей

0x002c0000-0x01000000 : "rootfs"

те начиная с такого смещения Вы должны прописать образ фс, командная строка

Kernel command line: root=/dev/mtdblock2 rw rootfstype=jffs2

задаёт где искать эту фс, уточните партиция называется как mtdblock2 или mtdblk2, у Вас устройство не находится.

Share this post


Link to post
Share on other sites

А как прописать этот образ???

Собирается файл 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.

Но правил очень аккуратно и думаю дело не в этом. Там много типов флеш возможно разных размеров и фирм, я добавил описание еще одной.

Share this post


Link to post
Share on other sites
А как прописать этот образ???

Собирается файл uImage(make uImage) и после mtdburn uImage и перезагрузки он грузится.

Распаковывается...

На spi_flash Linux при этом сама rootfs не записывает?

операционную систему обычно можно представить как ядро + userspace.

ядро управляет процессами, памятью, устройствами.

userspace - это всевозможные приложения.

 

uImage - это ядро.

rootfs - это файловая система, которая будет смонтирована в "/" (root).

 

загрузка linux'а выглядит так:

- бутлоадер (u-boot например) грузит в память ядро и передаёт ему управление;

- ядро грузится

- ядро монтирует rootfs;

- ядро запускает init на rootfs.

init - это "главное" приложение, которое запускает остальные.

 

то есть Вам нужно озадачится созданием (или поиском) rootfs с init и (скорее всего) прочими приложениями ;)

Edited by edo

Share this post


Link to post
Share on other sites
На spi_flash Linux при этом сама rootfs не записывает?

Вы её прописывайте в u-boot-е командочкой

cp <адресс рам> <адрес смещение флэш> <количество байт>

 

Командочка flinfo должна показать Вам как u-boot видит флэши, и в частности разбивку их на сектора и по какому адресу

к ним можно обратиться. Обычно спи флэш с адреса C0000000 идёт для u-boot-а. Если в скобочках (RO) - это значит

сейктор реад онли, разблокировать их можно командочкой protect off

Share this post


Link to post
Share on other sites

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)

Edited by Kris2007

Share this post


Link to post
Share on other sites

Читайте лучше 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: возможно, все ваши проблемы решатся одной метко поставленной галочкой.

Share this post


Link to post
Share on other sites

Спасибо! Собрал rootfs и uImage в один образ, залил все загрузилось и как-то даж работает.

Но файловая система всеж на spi flash, насколько я понимаю из log. И на ихнем тож.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this