Linux无法启动解决 booting the kernel.

使用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 <[email protected]> */
.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后内核成功起来

你可能感兴趣的:(c,linux,timer,image,IO,hex)