首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

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

2012-03-23 
uboot引导内核到Uncompressing Linux....done, booting the kernel.就死了本人移植的是uboot1.3.2,内核用

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吧

[QQ2440@LCW] 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)
[QQ2440@LCW] 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
[QQ2440@LCW] 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 (root@localhost.localdomain) (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里只能是这个,不能为其它。改为



0x03启动不了,已经在vivi下试过了,不信大家可以去试试。

最后重新编译,生成uboot.bin,然后下到板子上,接来看看它能不能引导内核。


bootargs=noinitrd init=/linuxrc console=ttySAC0


Environment size: 275/65532 bytes
[QQ2440@LCW] 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)
[QQ2440@LCW] bootm
## Booting image at 31000000 ...
  Image Name: Linux Kernel
.
.
  Verifying Checksum ... OK
  Uncompressing Kernel Image ... OK

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

还是卡在这里就没有反应了。

接下来我们把cpu频率改为200Mhz试试
编译重新下载到板子上后

bootargs=noinitrd init=/linuxrc console=ttySAC0

Environment size: 279/65532 bytes
[QQ2440@LCW] 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)
[QQ2440@LCW][QQ2440@LCW] bootm
## Booting image at 31000000 ...
.
.
  Verifying Checksum ... OK
  Uncompressing Kernel Image ... OK

Starting kernel ...

Uncompressing 

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

又再一次的失败,由此可以看出,根本不是cpu频率和console的事了。因为同样的设

备,同样的功能,只是由不同的人来执行,为什么就不行呢?看来跟本就不是执行的

人的问题,那只有一个问题了,也就是网上所上所说的,问题出在内核的console驱动

身上?还望有高人解决


有一点要提到,那就是我的vivi是烧到Nor flash里的,擦除nand 里的uboot用的是

vivi



[解决办法]
好像是flash或者内存的问题。


[解决办法]
楼主问题解决了吗?
[解决办法]
赞,现在用QQ2440 友善之臂的人好像很多啊
LZ现在也在学习ARM吗?
你这块板子多少钱,偶也想买个过来玩玩
[解决办法]
记得没有打补丁的u-boot是不能把bootline传给内核的
[解决办法]
楼主可以对照一下我下面提供的信息 我以前的问题就是这样解决的

bootcmd的设置
setenv bootcmd nand read 0x30008000 0x100000(在nandflash的偏移位置) 0x200000(kernel分区在nandflash上面的大小)\;bootm 0x30008000

NAND read: device 0 offset 0x100000, size 0x200000
 2097152 bytes read: OK
## Booting image at 30008000 ...
Image Name: linux kernel
Created: 2008-10-27 3:45:14 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1660280 Bytes = 1.6 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK


[解决办法]
楼主可以贴出你printenv的结果吗?

热点排行