现场一产品出现内核不能正常启动问题,启动信息如下:
内核启动不起来,启动信息: U-Boot 1.3.4 (Jul 9 2010 - 11:41:52) DRAM: 32 MB product's uboot verion : u-boot_cdz.V1.2 NAND: 256 MiB In: serial Out: serial Err: serial Net: macb0 Hit any key to stop autoboot: 0 NAND read: device 0 offset 0x200000, size 0x160000 1441792 bytes read: OK ## Booting kernel from Legacy Image at 21800000 ... Image Name: Linux-2.6.27.21 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1410380 Bytes = 1.3 MB Load Address: 20008000 Entry Point: 20008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux.......................................................................................... done, booting the kernel. Linux version 2.6.27.21 (reille@ubuntu) (gcc version 4.2.0 20070413 (prerelease) (CodeSourcery Sourcery G++ Lite 2007q1-10)) #179 Tue Oct 12 11:51:30 CST 2010 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177 Machine: KGE Devices for cdz based on Atmel AT91SAM9260 Memory policy: ECC disabled, Data cache writeback Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz CPU0: D VIVT write-back cache CPU0: I cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets CPU0: D cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128 Kernel command line: mem=32M console=ttyAT0,115200 root=/dev/mtdblock3 AT91: 96 gpio irqs in 3 banks PID hash table entries: 128 (order: 7, 512 bytes) Console: colour dummy device 80x30 console [ttyAT0] enabled 启动到"console [ttyAT0] enabled"就停止不动了。
从内核代码来看,应该是在start_kernel()函数中的console_init()或其后代码段出了问题。
/* * HACK ALERT! This is early. We're enabling the console before * we've done PCI setups etc, and console_init() must be aware of * this. But we do want output early, in case something goes wrong. */ console_init(); if (panic_later) panic(panic_later, panic_param);
console_init()用来对控制台初始化,这个函数运行完成后,串口可以看到内核用printk()函数打印的信息。