我百度了很久都没能解决。。。不知道大家有没有处理过这个问题的经验?谢谢!
直接go zImage也不行。
gcc:4.9.2
u-boot:2014.07
linux内核:3.0.8(config已配置好串口,使用superboot引导是可以打印的)
bootargs:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200n8
SMDKV210 # bdinfo
arch_number = 0x00000998
boot_params = 0x20000100
DRAM bank = 0x00000000
-> start = 0x20000000
-> size = 0x20000000
eth0name = dm9000
ethaddr = 1A:2A:3A:4A:5A:6A
current eth = dm9000
ip_addr = 192.168.1.111
baudrate = 115200 bps
TLB addr = 0x3FFF0000
relocaddr = 0x3FF88000
reloc off = 0x1FF88000
irq_sp = 0x3FE47F44
sp start = 0x3FE47F38
SMDKV210 # printenv
baudrate=115200
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200n8
bootcmd=tftp 20000000 uImage;bootm 20000000
bootdelay=3
ethact=dm9000
ethaddr=1A:2A:3A:4A:5A:6A
ipaddr=192.168.1.111
serverip=192.168.1.102
stderr=serial
stdin=serial
stdout=serial
Environment size: 297/131068 bytes
SMDKV210 # tftp 20000000 uImage
dm9000 i/o: 0x88000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 1a:2a:3a:4a:5a:6a
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.102; our IP address is 192.168.1.111
Filename 'uImage'.
Load address: 0x20000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
############################
730.5 KiB/s
done
Bytes transferred = 4801180 (49429c hex)
SMDKV210 # bootm 20000000
## Booting kernel from Legacy Image at 20000000 ...
Image Name: Linux-3.0.8-FriendlyARM
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4801116 Bytes = 4.6 MiB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
Starting kernel ...
谢谢!经过了一天的时间,通过打灯定位的方法,找到是linux内核(友善的3.0.8)uart发送时,判断fifo剩余发送量处出现了问题。
u-boot(2014.07)的uart发送使用了fifo的方法,因fifo_mask、fifo_max没被赋值,导致死在了一个while循环里面(\linux-3.0.8\arch\arm\plat-samsung\include\plat\uncompress.h static void putc(int ch))。
如果我把u-boot的uart的fifo关闭,linux那边就不会走fifo的流程,则u-boot打印有问题,而linux打印正常。
而为什么superboot+linux(3.0.8)没有问题?我估计superboot是关闭fifo的。
因此修改方法就是修改linux内核,按照s5pv210的寄存器表来判断。
修改方法:
\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
}
估计新版本的内核应该处理掉这个问题了。