booting the kernel后无内核启动信息的调试方法
2011-12-28 14:34
561 查看
移植内核经常会出现
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发送寄存器地址)
示例代码:
然后在要调试的地方加上printascii("XXX")进行调试。
二。使用printk buffer
当内核刚启动时,printk还不能将信息输出到串口或LCD,只是将它们记录到log buffer,启始地址为__log_buf(可从System.map得到),然后重启进到uboot,使用md查看buf里的信息。
例如:
System.map
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
然后在要调试的地方加上printascii("XXX")进行调试。
二。使用printk buffer
当内核刚启动时,printk还不能将信息输出到串口或LCD,只是将它们记录到log buffer,启始地址为__log_buf(可从System.map得到),然后重启进到uboot,使用md查看buf里的信息。
例如:
System.map
c0363bac b printk_time c0363bb0 b __log_buf c0373bb0 b console_cmdline
u-boot # md 0xc0363bb0 c0363bb0: 4c3a353c 78756e69 72657620 6e6f6973 <5:Linux version c0363bc0: 362e3220 2e35332e 620d3231 682d3174 2.6.35.12.bt1-h c0363bd0: 30353369 30317635 72282030 40746f6f i3505v100 (root@ c0363be0: 61636f68 736f686c 6f6c2e74 646c6163 hocalhost.locald c0363bf0: 69614d6f 2820296e 20636167 73726576 oMain) (gac vers c0363c00: 206e6969 2e352e34 53282032 58694e4f iin 4.5.2 (SONiX c0363c10: 43434520 352e342d 5220122e 61656c65 ECC-4.5.. Relea c0363c20: 12206573 2d313130 300d1231 29202936 se .011-1..06) ) c0363c30: 32312320 64655720 63654420 20383220 #12 Wed Dec 28 c0363c40: 352a3930 38353a33 54520320 31303220 09*53:58 .RT 201 c0363c50: 343c0a31 5550433e 5241203a 3632394d 1.<4>CPU: ARM926 c0363c60: 532d4a45 31345b20 32393630 205d3536 EJ-S [41069265] c0363c70: 68766572 6e6f6973 28203520 764d5241 revhsion 5 (ARMv c0363c80: 4a415435 63202c29 30303d72 31333530 5TAJ), cr=000531 c0363c90: 3c0a3737 50433e34 56003a55 20545649 77.<4>CPU:.VIVT c0363ca0: 61746164 63616320 202c6168 54564956 data cacha, VIVT
相关文章推荐
- mini2440内核停在booting the kernel问题以及无法运行linuxrc问题的解决方法
- 出现 No more output is seen on the console after "booting the kernel" 调试信息
- 内核启动卡在Uncompressing Linux..... done, booting the kernel
- s3c2440移植linux-2.6.22 内核启动卡在Uncompressing Linux..... done, booting the kernel.
- 启动linux-2.32.2内核出现done, booting the kernel
- 内核启动停在了 done, booting the kernel
- s5pv210 linux3.8.3内核移植之二:Uncompressing Linux... done, booting the kernel.问题解决
- VirtualBox启动报错--execute the kernel module by executing '/sbin/vboxconfig'的解决方法
- 打印uboot和内核系统的启动信息方法
- Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动
- The Kernel Boot Process --linux2.6.25内核启动过程
- 用IE调试ActiveX控件的相关设置(无法启动调试信息,找不到Microsoft Internet Explorer的解决方法)
- 内核模块打印调试信息方法
- DebugView 在Vista及Win7下打印kernel mode调试信息的方法
- kernel启动console_init之前console不可用时发生crash的调试方法
- 移植内核过程中出现界面卡在"Uncompressing Linux... done, booting the kernel."
- linux2.4启动分析(2)---内核解压缩过程 compress booting kernel
- 函数调试用函数printk打印内核信息的方法
- Linux内核分析之三——使用gdb跟踪调试内核从start_kernel到init进程启动
- Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』