Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101843
  • 博文数量: 11
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 182
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-22 21:35
文章存档

2010年(6)

2009年(5)

我的朋友

分类: LINUX

2010-04-04 23:26:23

Debug an oops

From BUG Wiki

Jump to: ,

Howto

  • Use openeembedded or poky(the bug device's build system) to build the devshell:
bitbake devshell

That will also build the toolchain that you could use to build the kenrel

  • download the kenrel:
svn co svn://ny-mirror.buglabs.net/bug/trunk/bug-linux-2.6.27.2
cd bug-linux-2.6.27.2
  • copy the defconfig of the default kenrel into the bug-linux-2.6.27.2 directory
cp .../com.buglabs.build.oe/meta-bug/packages/linux/linux-bug-2.6.27.2/defconfig-bug ./.config
  • make changes to the config:
make ARCH=arm xconfig
  • select the following options:
Show timing information on printks (PRINTK_TIME)
Debug preemptible kernel (DEBUG_PREEMPT)
Compile the kernel with debug info (DEBUG_INFO)
Verbose BUG() reporting (adds 70K) (DEBUG_BUGVERBOSE)

in kernel hacking Note that there is a find function in xconfig

  • source the devshell
source .../oetmp/deploy/glibc/addons/arm-angstrom-linux-gnueabi-angstrom-bug-devshell

as I use openembedded I have arm-angstrom-linux-gnueabi-angstrom-bug-devshell but your devshell script may be named differently also: it will say "-bash: alias: `./configure': invalid alias name",just ignore the warning

  • build the kernel:
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- LDFLAGS="" uImage
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- LDFLAGS="" modules
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- LDFLAGS="" INSTALL_MOD_PATH=".../bug-device/modules/" modules_install

replace arm-angstrom-linux-gnueabi- by the prefix of your toolchain name(for instance if you have arm-angstrom-linux-gnueabi-gcc the prefix would be arm-angstrom-linux-gnueabi-)

replace uImage by zImage if you are using the redboot bootloader

  • install your kernel and copy the modules to the root filesystem of the bug device
  • reproduce the condition where there was an oops...you'll get something like that(in dmesg):
[42949536.610000] kernel BUG at arch/arm/mm/consistent.c:495!
[42949536.620000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[42949536.630000] pgd = c347c000
[42949536.630000] [00000000] *pgd=83487031, *pte=00000000, *ppte=00000000
[42949536.640000] Internal error: Oops: 817 [#1] PREEMPT
[42949536.640000] Modules linked in: rtc_isl12026 rfcomm libertas_sdio libertas hidp l2cap bluetooth g_ether ehci_hcd bugpm_apm apm_emulation bugnav bug_v4l2_capture bug_camera bug_audio arcotg_udc bmi_mdacc bmi_lcd_core bmi_vh
[42949536.640000] CPU: 0 Not tainted (2.6.27.2 #116)
[42949536.640000] PC is at __bug+0x24/0x30
[42949536.640000] LR is at vprintk+0x330/0x398
[42949536.640000] pc : [] lr : [] psr: 20000013
[42949536.640000] sp : c5f4fc60 ip : c5f4fbd0 fp : c5f4fc6c
[42949536.640000] r10: c6c97400 r9 : c5c27b20 r8 : 00000000
[42949536.640000] r7 : c6daf7e0 r6 : 00000020 r5 : ffbdb000 r4 : bfbdb000
[42949536.640000] r3 : 00000000 r2 : c5f4e000 r1 : 80000013 r0 : 00000041
[42949536.640000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[42949536.640000] Control: 00c5387f Table: 8347c000 DAC: 00000015
[42949536.640000] Process tzap (pid: 4705, stack limit = 0xc5f4e260)
[42949536.640000] Stack: (0xc5f4fc60 to 0xc5f50000)
[42949536.640000] fc60: c5f4fc84 c5f4fc70 c002a658 c0029568 bfbdb000 c6dd2eb8 c5f4fd4c c5f4fc88
[42949536.640000] fc80: c01fe584 c002a5ac 00000001 c007d794 72cfe72d c0433260 c5f4fd04 00000000
[42949536.640000] fca0: c007f864 c0040e10 00000044 c7943d10 00000000 00000000 000200d2 c0433260
[42949536.640000] fcc0: 00000001 c5f4e000 00000001 00000000 c0432d34 c0432d34 c004092c 00000001
[42949536.640000] fce0: 000000d2 000000d2 c043325c 00000000 00000001 c3451360 c5f4fd74 c5f4fd08
[42949536.640000] fd00: c007fac4 c007f554 00000001 00000044 00000000 00000000 c5f4fd3c c5c55cd8
[42949536.640000] fd20: c5f4e000 c6daf7e0 c6dd2eb8 00000200 c6e3b000 00000000 c5c27b20 00000020
[42949536.640000] fd40: c5f4fd84 c5f4fd50 c01ff34c c01fe44c c5c11a60 000000d2 c00930e8 ffffffff
[42949536.640000] fd60: 00000000 c6e81dd0 c6e81dd0 00000001 00000001 c6e81b74 c5f4fda4 c5f4fd88
[42949536.640000] fd80: c01d892c c01ff070 c6e81ac0 00000001 c8b93000 00000001 c5f4fdc4 c5f4fda8
[42949536.640000] fda0: c01d7f50 c01d8910 c6e81b80 c8b93000 c6e81d58 00001100 c5f4fdd4 c5f4fdc8
[42949536.640000] fdc0: c01d8008 c01d7e88 c5f4fdf4 c5f4fdd8 c01c7974 c01d7ffc 00000000 c8ca7000
[42949536.640000] fde0: 00000004 c6e81b38 c5f4fe34 c5f4fdf8 c01c5474 c01c78f8 00008000 00000000
[42949536.640000] fe00: 00000000 00000056 00000000 00000000 c5c27b20 00000002 c8ca706c c8ca7000
[42949536.640000] fe20: c5f4fe70 be9ccb84 c5f4fe64 c5f4fe38 c01c5798 c01c50c8 00000001 00000014
[42949536.640000] fe40: c5f4fe70 00000000 40146f2c be9ccb84 c5c27b20 00000001 c5f4ff1c c5f4fe68
[42949536.640000] fe60: c01c3ac0 c01c5528 c031be04 c5c6e890 40050202 00000000 00000000 00000001
[42949536.640000] fe80: 00000004 c5f4fe90 c005be44 c0411560 00000003 00000001 00000000 60000093
[42949536.640000] fea0: 00000000 00000023 c5f4fee4 c5f4feb8 c0042edc c0040e10 00000000 c5f4fed8
[42949536.640000] fec0: c5f4ff10 c6d96410 a0000013 00000023 c6d96400 c5f4e000 c5f4fefc c5f4fee8
[42949536.640000] fee0: c015ef50 c0040e10 c75f0580 c75f0530 00000002 c5c27b20 40146f2c be9ccb84
[42949536.640000] ff00: be9ccb84 c0025e68 c5f4e000 00000000 c5f4ff34 c5f4ff20 c01c4828 c01c39e0
[42949536.640000] ff20: c01c551c c5c27b20 c5f4ff54 c5f4ff38 c00ad100 c01c4814 c5f4ff6c c5c6e890
[42949536.640000] ff40: c5c27b20 40146f2c c5f4ff7c c5f4ff58 c00ad3cc c00ad08c 00000000 c00a0f14
[42949536.640000] ff60: 00000004 be9ccb84 40146f2c c5c27b20 c5f4ffa4 c5f4ff80 c00ad43c c00ad128
[42949536.640000] ff80: 00000005 00000000 00000001 00000003 00000002 00000036 00000000 c5f4ffa8
[42949536.640000] ffa0: c0025ca0 c00ad404 00000001 00000003 00000004 40146f2c be9ccb84 00000000
[42949536.640000] ffc0: 00000001 00000003 00000002 00000036 be9ccf4c 00000000 00000000 00000000
[42949536.640000] ffe0: 00000000 be9ccb80 0000892c 400d696c 60000010 00000004 473a4b38 44524155
[42949536.640000] Backtrace:
[42949536.640000] [] (__bug+0x0/0x30) from [] (dma_cache_maint+0xb8/0x100)
[42949536.640000] [] (dma_cache_maint+0x0/0x100) from [] (usb_hcd_submit_urb+0x144/0x9b4)
[42949536.640000] r5:c6dd2eb8 r4:bfbdb000
[42949536.640000] [] (usb_hcd_submit_urb+0x0/0x9b4) from [] (usb_submit_urb+0x2e8/0x320)
[42949536.640000] [] (usb_submit_urb+0x0/0x320) from [] (usb_urb_submit+0x28/0x7c)
[42949536.640000] [] (usb_urb_submit+0x0/0x7c) from [] (dvb_usb_ctrl_feed+0xd4/0x158)
[42949536.640000] r7:00000001 r6:c8b93000 r5:00000001 r4:c6e81ac0
[42949536.640000] [] (dvb_usb_ctrl_feed+0x0/0x158) from [] (dvb_usb_start_feed+0x18/0x1c)
[42949536.640000] r7:00001100 r6:c6e81d58 r5:c8b93000 r4:c6e81b80
[42949536.640000] [] (dvb_usb_start_feed+0x0/0x1c) from [] (dmx_ts_feed_start_filtering+0x88/0xf8)
[42949536.640000] [] (dmx_ts_feed_start_filtering+0x0/0xf8) from [] (dvb_dmxdev_filter_start+0x3b8/0x460)
[42949536.640000] r7:c6e81b38 r6:00000004 r5:c8ca7000 r4:00000000
[42949536.640000] [] (dvb_dmxdev_filter_start+0x0/0x460) from [] (dvb_demux_do_ioctl+0x27c/0x3e8)
[42949536.640000] r8:be9ccb84 r7:c5f4fe70 r6:c8ca7000 r5:c8ca706c r4:00000002
[42949536.640000] [] (dvb_demux_do_ioctl+0x0/0x3e8) from [] (dvb_usercopy+0xec/0x174)
[42949536.640000] [] (dvb_usercopy+0x0/0x174) from [] (dvb_demux_ioctl+0x20/0x2c)
[42949536.640000] [] (dvb_demux_ioctl+0x0/0x2c) from [] (vfs_ioctl+0x80/0x9c)
[42949536.640000] [] (vfs_ioctl+0x0/0x9c) from [] (do_vfs_ioctl+0x2b0/0x2dc)
[42949536.640000] r6:40146f2c r5:c5c27b20 r4:c5c6e890
[42949536.640000] [] (do_vfs_ioctl+0x0/0x2dc) from [] (sys_ioctl+0x44/0x68)
[42949536.640000] r7:c5c27b20 r6:40146f2c r5:be9ccb84 r4:00000004
[42949536.640000] [] (sys_ioctl+0x0/0x68) from [] (ret_fast_syscall+0x0/0x2c)
[42949536.640000] r7:00000036 r6:00000002 r5:00000003 r4:00000001
[42949536.640000] Code: e1a01000 e59f000c eb0bc188 e3a03000 (e5833000)
[42949537.180000] ---[ end trace c07d8f49bdf2bb24 ]---

The importants informations are:

pc : []

and all the lines like that:

[] (__bug+0x0/0x30) from [] (dma_cache_maint+0xb8/0x100)

note them down

  • then on each address(an address loks like that: c0029580) do that on your computer:
[OE::arm-angstrom-linux-gnueabi-angstrom-bug]:~/bug-device/linux-bug$ arm-angstrom-linux-gnueabi-addr2line -f -e vmlinux c0029580

it will then show the line(and the function) of the backtrace: __bug /home/embedded/bug-device/linux-bug/arch/arm/kernel/traps.c:669

  • then you have 2 solutions:
    • bug report the problem to buglabs(include the backtrace and the addr2line outputs)
    • solve it yourself and send the patch to buglabs(so you won't have to do the patch again at each new kernel release for the bug device)
阅读(4413) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~