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的结果吗?