当内核解压缩后无启动信息,只有可恨又可爱的:
Uncompressing Linux................................................................ done, booting the kernel.
时,怎么办呢???
一. 使用low level debug
1. 内核编译时要打开:kernel hacking->kernel debuging->low level debug(这时要确认下arch/arm/kernel/debug.S(2.6),
或debug-armv.S(2.4)里是否有相应MCU的UART实现,没有就移植别的,主要是正确设置UART发送寄存器地址)
参考代码:
#if defined(CONFIG_ARCH_MX2ADS)
#warning CONFIG_ARCH_IMX21 defined
.macro addruart,rx
mrc p15, 0, \rx, c1, c0
tst \rx, #1 @ MMU enabled?
moveq \rx, #0x10000000 @ Physical
movne \rx, #0xe4000000 @ Virtual
orr \rx, \rx, #0xa000
orr \rx, \rx, #0x40
.endm
.macro senduart,rd,rx
str \rd, [\rx] @ TXDATA
.endm
.macro waituart,rd,rx
.endm
.macro busyuart,rd,rx
1002: ldrb \rd, [\rx, #0x54]
@ Check TRDY in USR1_1 (phys=0x1000a094)
and \rd, \rd, #0x2000
cmp \rd, #0x2000
bne 1002b
.endm
#endif
(有时无信息输出时,可注释busyuart????),在要调试的地方加上printascii("XXX")进行调试。
二。使用printk buffer
当内核刚启动时,printk还不能将信息输出到串口或LCD,只是将它们记录到log buffer,启始地址为log_start(可从System.map得到,转化为physical add),然后用仿真器查看该段内存数据,再进行分析。
阅读(1701) | 评论(0) | 转发(1) |