小碼哥

          誰謂河廣,一葦杭之

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            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 小碼哥 閱讀(5162) 評論(0)  編輯  收藏 所屬分類: 備忘
          主站蜘蛛池模板: 桓仁| 浦北县| 淮阳县| 株洲市| 天等县| 宜黄县| 巫溪县| 宁强县| 平泉县| 新河县| 克什克腾旗| 永仁县| 互助| 塘沽区| 温泉县| 乌苏市| 琼结县| 新丰县| 吉首市| 阿拉善左旗| 长海县| 个旧市| 太和县| 朝阳市| 扶绥县| 隆尧县| 美姑县| 建平县| 合山市| 哈密市| 北安市| 壤塘县| 桃园县| 伊金霍洛旗| 苏州市| 大田县| 浏阳市| 临朐县| 安仁县| 鲁山县| 枣阳市|