linux 内核调试 booting the kernel.,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-FriendlyARMCrea..
使用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后内核成功起来
更多推荐
所有评论(0)