Uboot 到底如何启动linux内核启动流程

linux内核在uboot下解压后无法启动,大概是哪里的问题? [问题点数:40分,结帖人leehh]

有几个版本的内核在该板上解压后无法启动,是什么原因?

最新进展:今天编译了新linux内核2.6.38,在该板上依然不能boot,但是在另外同样的4块板子上却又能正常boot起来。奇怪了。本来准备加点灯程序了,但其他板子能起来说明内核的初始化也没啥问题啊,大家看看大概是哪里有问题?

造成这个问题的原因很多,楼主不妨给出一些串口提示信息。

造成这个问题的原因很多,楼主不妨给出一些串口提示信息。

关键是串口根本没有信息,uboot下的串口信息为:

之后串口无输出也无法输入,死掉了。


我本来怀疑是DDR的问题,于是尝试了各种ddr的测试。往ddr各整数M的地址上写数据,然后读出,没啥问题;连续写入某些数据,在128M空间内遍历查询是否有数据块与写入的数据重叠,没啥问题;把ddr的速率从150M降到133M,还是不行。

确认都是bootloader都是一样的呢?

确认,都是一样的,我重新烧过几次了,都一样。

请问楼上有没有解决啊? 怎么解决的?我也遇到同样的问题了。


谢谢ls回复。    我加了CONFIG_DEBUG_LL,并重新编译好了内核,但是还是运行不来。解压之后没有任何信息输出来。   我从网上查了下,说是有两种情况:1、machine ID不匹配。这个我想应该不是我的问题。2、串口没设好。(1)命令行参数设置问题。console=ttyS0,和ttySAC0。这两个我都试过了,ttyS1和ttySAC1也试过了,都不行。而那个别人给的内核这几个也都是可以的。(2)内核默认晶振频率和开发板不匹配。这个我还没有设置过,不知道该怎么办?

谢谢ls回复。    我加了CONFIG_DEBUG_LL,并重新编译好了内核,但是还是运行不来。解压之后没有任何信息输出来。   我从网上查了下,说是有两种情况:1、machine ID不匹配。这个我想应该不是我的问题。2、串口没设好。(1)命令行参数设置问题。console=ttyS0,和ttySAC0。这两个我都试过了,ttyS1和ttySAC1也试过了,都不行。而那个别人给的内核这几个也都是可以的。(2)内核默认晶振频率和开发板不匹配。这个我还没有设置过,不知道该怎么办?

非常的奇怪,稀里糊涂就好了。

有一次我把noinitrd去掉了,结果竟然好了。我无语了。。。。但是其他的板子用上面的bootargs没有任何问题。后来我还原回去,还不行。于是还是去掉noinitrd,又可以。再还原回去,又不行。第2天又还原回去,结果,好了。

rnel.后面就停止了!

今天有幸碰到这个问题,去掉这个就解决了。可以尝试下。

匿名用户不能发表回复!

把uboot里边使用的显示内存reserve起来,否则Kernel初始化过程中会使用

这样FB驱动启动之前一直显示之前的uboot的画面

kernel通过这个地址,用parse_tags分析出传递过来的参数。

/*设置一个内存标记 */

第73行代码将内核的入口地址“images->ep”强制类型转换为函数指针。根据ATPCS规则,函数的参数个数不超过4个时,使用r0~r3这4个寄存器来传递参数。因此第128行的函数调用则会将0放入r0,机器码machid放入r1,内核参数地址bd->bi_boot_params放入r2,从而完成了寄存器的设置,最后转到内核的入口地址。

我要回帖

更多关于 深入理解linux内核 的文章

 

随机推荐