使用mini2440带的Linux2.6.32 使用u-boot 1.3.4引导时候无法启动内核,一直停留在以下这地方:

done Bytes transferred = 2286856 (22e508 hex)

## Booting kernel from Legacy Image at 32000000 ...

Image Name:   Linux-2.6.32.2-FriendlyARM

Created:      2012-02-12   4:43:25 UTC

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    2286792 Bytes =  2.2 MB

Load Address: 30008000

Entry Point:  30008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux..................................................................................................................................................... done, booting the kernel.

出现这个现象的原因有三个:

1.u-boot中的频率与kernel中CPU频率的设置不一样,kernel中设置的过高,使程序跑飞。

2.mach_type值不一致。u-boot中的mach_type值与kernel中的不一致,导致这个问题。

3.启动的时候,串口参数设置有问题。

我的问题是第2个大原因。

去arch/arm/mach-s3c2440/mach-mini2440.c 查看下面这个结构体:

MACHINE_START(MINI2440, "MINI2440")

/* Maintainer: Michel Pollet */

.phys_io        = S3C2410_PA_UART,

.io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,

.boot_params    = S3C2410_SDRAM_PA + 0x100,

.map_io         = mini2440_map_io,

.init_machine   = mini2440_init,

.init_irq       = s3c24xx_init_irq,

.timer          = &s3c24xx_timer,

MACHINE_END

问题就是出在第一行的MINI2440,因为这个宏定义扩展之后的machine type 就成了 MACHINE_TYPE_MINI2440, 而我在u-boot定义的是MACHINE_TYPE_S3C2440,因此不匹配导致内核不识别死在这里了。 将MINI2440改成S3C2440后内核成功起来

Logo

更多推荐