小碼哥

          誰謂河廣,一葦杭之

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            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 小碼哥 閱讀(5118) 評論(0)  編輯  收藏 所屬分類: 備忘
          主站蜘蛛池模板: 海兴县| 镇原县| 玉田县| 个旧市| 维西| 临西县| 图木舒克市| 聂拉木县| 凤庆县| 绥宁县| 沭阳县| 兰坪| 昌乐县| 杭锦后旗| 新闻| 辉县市| 巩留县| 靖安县| 贵南县| 合肥市| 泾源县| 绥化市| 姚安县| 海淀区| 望江县| 昭平县| 南澳县| 措美县| 乐至县| 海盐县| 阜阳市| 铁力市| 盘山县| 新河县| 张掖市| 禹城市| 石狮市| 静安区| 阳高县| 叙永县| 玉山县|