当前位置: 代码迷 >> 驱动开发 >> uboot引导内核到Uncompressing Linux.done, booting the kernel.就死了解决方法
  详细解决方案

uboot引导内核到Uncompressing Linux.done, booting the kernel.就死了解决方法

热度:458   发布时间:2016-04-28 11:02:22.0
uboot引导内核到Uncompressing Linux....done, booting the kernel.就死了

本人移植的是uboot1.3.2,内核用的是QQ2440 友善之臂公司已经编译好的镜像。
先用网上说的第一种解决办法:console的问题
先看以下操作:

其中
bootargs=noinitrd console=ttySAC0,115200 init=/linuxrc mem=64M


在此我的console已经是设置对了的,bootargs设置应该没什么问题了吧
在我的tftpboot目录下有几个文件,其中zImage_n35是友善公司做的内核镜像,能够

用vivi启动,一会在让大家看看vivi的启动信息。还有就是uImage是我从vmlinux开始

用mkimage做的可以用于uboot启动的内核镜像。

现就用uImage吧

[[email protected]] tftp 31000000 uImage
TFTP from server 172.16.25.70; our IP address is 172.16.25.71
Filename 'uImage'.
Load address: 0x31000000
Loading: #################################################################
  ########################################
done
Bytes transferred = 1536780 (17730c hex)
[[email protected]] imi

## Checking Image at 31000000 ...
  Image Name: Linux Kernel
  Created: 2008-10-19 11:46:22 UTC
  Image Type: ARM Linux Kernel Image (gzip compressed)
  Data Size: 1536716 Bytes = 1.5 MB
  Load Address: 30008000
  Entry Point: 30008000
  Verifying Checksum ... OK
[[email protected]] bootm
## Booting image at 31000000 ...
  Image Name: Linux Kernel
  Created: 2008-10-19 11:46:22 UTC
  Image Type: ARM Linux Kernel Image (gzip compressed)
  Data Size: 1536716 Bytes = 1.5 MB
  Load Address: 30008000
  Entry Point: 30008000
  Verifying Checksum ... OK
  Uncompressing Kernel Image ... OK

Starting kernel ...

Uncompressing 

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

到此后就死了。

接下来就用vivi加载内核,请看启动信息
其中zImage_n35已经下到nand当中,这里不在操作。
先看我的参数设置
Supervivi> param show
Number of parameters: 9
name : hex integer
.
.
Linux command line: noinitrd init=/linuxrc console=ttySAC0
Supervivi>

跟uboot的参数是一样的,现在看看能不能启动

Supervivi> boot
Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd init=/linuxrc console=ttySAC0"
MACH_TYPE = 782
NOW, Booting Linux......
Uncompressing 

Linux.............................................................
............................................ done, booting the kernel.
Linux version 2.6.13 ([email protected]) (gcc version 3.4.1) #1 

由此可以看出已经引导成功了,而vivi里的参数跟uboot里的是一样,为什么vivi能引
导,而uboot不能引导呢?
网上又说了一种解决的办法,说的是vivi里的cpu时钟频率为200hz,uboot里的为405hz

,这一点我相信,因为在移植uboot的时候,我曾改过uboot里的cpu时钟频率,结果有

几次,当uboot下到nand后。启动没有信息。
好了,现在我们先来看看vivi里的cpu时钟频率

Supervivi> cpu info

Processor Information (Revision: 0x41129200)
--------------------------------------------
Processor clock: 405000000 Hz
AHB bus clock : 101250000 Hz
APB bus clock : 50625000 Hz

Register values
MPLLCON: 0x0007f021 (MDIV: 0x007f, PDIV: 0x02, SDIV: 0x01)
CLKDIVN: 0x00000005

Supervivi>

以上信息可以知道,我的vivi里,设置的cpu时钟频率是405hz,这个频率下为什么能够

引导内核呢?有待高人解答

现在我将uboot里的cpu频率改为200或405试试
先在start.s里改
#define CLK_CTL_BASE 0x4C000000  
#define MDIV_405 0x7f << 12  
#define PSDIV_405 0x21
  mov r1, #CLK_CTL_BASE  
  mov r2, #MDIV_405 /* mpll_405mhz */
  add r2, r2, #PSDIV_405 /* mpll_405mhz */
  str r2, [r1, #0x04]

然后在QQ2440.c里改
clk_power->MPLLCON = 0x0007f021; 
以上是将cpu频率改为405Mhz。时钟比为0x05,2440里只能是这个,不能为其它。改为
  相关解决方案