小碼哥

          誰謂河廣,一葦杭之

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            7 隨筆 :: 17 文章 :: 74 評論 :: 0 Trackbacks

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          訂閱Canvas

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          最近做一些Kernel方面的工作,從一頭霧水開始,多做些記錄吧。

          addr2line也可以根據指令地址定位C代碼對應的行,但是對于Kernel module卻不是很方便,使用gdb就要容易得多。

          NOTE:在使用gdb定位C代碼之前需要開啟-g選項編譯內核或者module

          例如有這樣的Call Trace
          Call Trace:
          [<8033265c>] dump_stack+0x8/0x30
          [<8003abbc>] warn_slowpath_common+0x70/0x98
          [<80041f10>] local_bh_enable_ip+0x98/0xec
          [<c13f1c6c>] ieee80211_alloc_node+0x29c/0x47c [umac]
          [<c13f1f70>] ieee80211_reset_bss+0x58/0x154 [umac]
          [<c13f7c84>] ieee80211_vap_attach+0x20/0x68 [umac]
          [<c14096cc>] ath_vap_create+0x430/0x6b0 [umac]
          [<c13f7290>] wlan_vap_create+0x58/0x210 [umac]
          [<c14686e8>] osif_ioctl_create_vap+0x268/0x790 [umac]
          [<c14597b0>] ath_ioctl+0x134/0x94c [umac]
          [<8022db50>] dev_ioctl+0x28c/0x88

          現在想定位指令:
          [<80041f10>] local_bh_enable_ip+0x98/0xec

          可以這樣做:
          $ mips-linux-gdb vmlinux

          GNU gdb 6.8
          Copyright (coffee) 2008 Free Software Foundation, Inc.
          License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
          This is free software: you are free to change and redistribute it.
          There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
          and "show warranty" for details.
          This GDB was configured as "--host=i386-pc-linux-gnu --target=mips-linux-uclibc"...

          輸入命令
          (gdb) list *(local_bh_enable_ip+0x98)

          gdb返回結果
          0x80041f10 is in local_bh_enable_ip (kernel/softirq.c:216).
          211
          212 EXPORT_SYMBOL(_local_bh_enable);
          213
          214 static inline void _local_bh_enable_ip(unsigned long ip)
          215 {
          216  WARN_ON_ONCE(in_irq() || irqs_disabled());
          217 #ifdef CONFIG_TRACE_IRQFLAGS
          218  local_irq_disable();
          219 #endif
          220  /*
          (gdb)
          posted on 2012-11-06 15:18 小碼哥 閱讀(5116) 評論(0)  編輯  收藏 所屬分類: 備忘
          主站蜘蛛池模板: 曲周县| 油尖旺区| 余庆县| 广灵县| 伊金霍洛旗| 同江市| 锦屏县| 旬邑县| 永寿县| 竹北市| 八宿县| 都匀市| 弋阳县| 禹城市| 铜山县| 廊坊市| 陆良县| 安福县| 耿马| 丰顺县| 鄂托克前旗| 册亨县| 砀山县| 湘西| 齐齐哈尔市| 临夏市| 平湖市| 黑水县| 延边| 陵川县| 颍上县| 许昌市| 威信县| 咸阳市| 柞水县| 常德市| 霍山县| 福海县| 榆中县| 揭西县| 濮阳市|