内核启动卡在Uncompressing Linux..... done, booting the kernel.这好像是个老生常谈的问题了。成因在网上也罗列了很多种,可这次我碰到的,却没百度出解决方法,纠结了我很久才解决。

我先把造成Uncompressing Linux..... done, booting the kernel.的常见的几种可能再罗列一下

1、机器码不匹配

解决方法:在配置内核时开启debug 

Kernel hacking -> Kernel low-level debugging functions 是打开的
 Kernel hacking -> Kernel low-level debugging messages via S3C UART 也是打开的

在Device Drivers->Character devices->Serial drivers中选择加载Samsung SoC serial support ,然后再选上Support for console on Samsung SoC serial port 。
如果是机器码不匹配的问题,就会出现相关打印信息例如

Machine configuration botched (nr 182), unable to continue.

核对一下你的uboot机器码是否匹配。

如果不匹配,你可以修改uboot include/asm-arm/mach-types.h 文件中有关机器码的定义。或者修改内核 arch/arm/tools/mach-types 文件。

在新内核移植时有关机器码的修改步骤及分析如下:

修改机器码,机器码在2/arch/arm/mach-s3c2440/mach-test2440.c文件中MACHINE_START(TEST2440, "TEST2440")这一行定义的,第二个参数无所谓,重要的是第一个参数,在gcc编译这个mach-test2440.c的时候,会把TEST2440匹配到/include/asm-arm/mach-types.h中的"#define MACH_TYPE_TEST2440 N"这里, 如果在mach-types.h中找不到MACH_TYPE_TEST2440的定义, gcc编译mach-test2440.c则报错;
还有,/include/asm-arm/mach-types.h是每次make zImage过程中, 由arch/arm/tools/mach-types文件生成的,
总结,修改机器码,涉及内核代码的三个地方,MACHINE_START宏,mach-types.h,mach-types,初启动时,bootloader向内核传递一个机器码。

 

2、串口配置不正确

确保在配置内核时选上了在Device Drivers->Character devices->Serial drivers中选择加载Samsung SoC serial support ,然后再选上Support for console on Samsung SoC serial port 。

3、arch/arm/mach-s3c2440/Kconfig配置文件设置出错,某项关键选项没选上。

这个情况在网上不多见,但是一出错就会让人很纠结。如果芯片级或板级关键配置没选上或导致内核启动进入start_kernel函数之前就进入死循环。如果芯片级的配置没选上,会在内核执行完cpu id号匹配函数__lookup_processor_type()后进入死循环,这种情况你无论怎么配置内核的debug,串口都不会再有打印信息输出了。只有点个灯之类的才能跟踪代码的执行。

这种情况往往在打印Uncompressing Linux..... done, booting the kernel后就无任何输出了,即便你配置了debug。

我碰到这种情况是因为我在arch/arm/mach-s3c2440/Kconfig 上没有select ARCH_S3C2440。

导致Uncompressing Linux..... done, booting the kernel 卡住的大致就这几种情况。



kasim2013-04-25 10:42
CONFIG_DEBUG_LL对应的是"Kernel low-level debugging functions", 注意不要打开"Kernel low-level debugging via EmbeddedICE DCC channel", 这会导致调试信息输出到DCC channel而不通过UART输出。
在使用uboot for tiny210时,uboot运行正常~
但是在引导linux内核时总是(如下:),然后就不动了。。。。。
## Booting kernel from Legacy Image at 21000000 ...
   Image Name:   linux-2.6.35.7
   Created:      2012-03-18  17:11:05 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4119260 Bytes = 3.9 MiB
   Load Address: 21000000
   Entry Point:  21000040
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

找了好多资料,然后把内核又重新编译一般,加上debug信息,追查到(如下),应该是在内存配置上有问题~
Uncompressing Linux... done, booting the kernel.                                   
<6>Initializing cgroup subsys cpu                                                  
<5>Linux version 2.6.35.7-FriendlyARM (richardnee@ThinkPad) (gcc version 4.5.1 (ct2
CPU: ARMv7 Processor [412fc082] revision 2 (ARMv7), cr=10c53c7f                    
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache               
Machine: MINI210                                                                   
Memory policy: ECC disabled, Data cache writeback                                  
<7>On node 0 totalpages: 131072                                                    
<7>free_area_init_node: node 0, pgdat c076e890, node_mem_map c0967000              
<7>  Normal zone: 1024 pages used for memmap                                       
<7>  Normal zone: 0 pages reserved                                                 
<7>  Normal zone: 130048 pages, LIFO batch:31


当时uboot的commandline是:
root=/dev/mtdblock4 console=ttySAC0,115200 init=/linuxrc androidboot.console=s3c2410_serial0

所以我又把内存信息也加进去root=/dev/mtdblock4 console=ttySAC0,115200 init=/linuxrc androidboot.console=s3c2410_serial0 mem=512M
但是还是不行!!!
看了该贴:http://www.arm9home.net/read.php?tid-16001-fpage-0-toread--page-1.html
其中有
jnny_cn 7楼  发表于: 34天前
自己解决了,内存设置为单通道就可以了
并且跑起了xserver+gtk,运行quake2很流畅


我不知道怎么把uboot内存设置为单通道(或者还是linux,不懂啊)~~
但是把commandline的mem改为256M,居然linux kernel启动起来了~~

然而内存也初始化为256M,也不知道是不是这个原因,也导致后面的NAND Flash初始化不对,找不到nand设备,启动不了在nand上的根文件系统~
[    1.122476] S3C NAND Driver, (c) 2008 Samsung Electronics
[    1.127500] Unknown NAND Device.
。。。。
mount: mounting /dev/mtdblock4 on /r failed: No such device or address
/init: line 103: can't open /r/dev/console: no such file


当然,我现在还没试试能不能启动nfs上的根文件系统。。。


我的分析就是这样,希望对大家有用~~~
同时希望高手能够给点提示,提点下我这个菜鸟。。。。
多谢


Logo

更多推荐