在u-boot2016.11(我用的这个版本)中用串口发送的时候使能了FIFO的方法,因fifo_mask,fifo_max没有被赋值,所以导致卡死在一个while循环里面(\linux\arch\arm\plat-samsung\include\plat\uncomperss.h static void putc(int ch))。
解决办法:
1.把uboot的串口FIFO关闭,linux那边就不会走这边的流程就没有问题成功引导内核,打印正常,但是在uboot打印的时候就会出现问题。所以我的解决办法是在uboot打印完最后一句话(Starting kernel...)且fifo为空的时候的时候再将程序交接给内核。
2.还有一个办法就是修改内核,修改方法:在\linux-3.0.8\arch\arm\mach-s5pv210\include\mach\uncompress.h中
static void arch_detect_cpu(void)
{
/* we do not need to do any cpu detection here at the moment. */
fifo_mask = S5PV210_UFSTAT_TXMASK; //yiming add
fifo_max = 255 << S5PV210_UFSTAT_TXSHIFT; //yiming add
}
我用的第一种方法解决的,第二种方法没事实验过。解决方法的出处:http://www.arm9home.net/read.php?tid=86329