免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7284 | 回复: 15
打印 上一主题 下一主题

gdb调试ldd3中的scull.ko的问题 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-11 12:57 |只看该作者 |倒序浏览
按照LDD3中的介绍,使用GDB调试一下scull.ko,测试结果如下:
[root@localhost scull]# gdb scull.ko
GNU gdb Red Hat Linux (6.5-37.el5rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) add-symbol-file scull.ko 0xd0b85000 \
       -s .altinstr_replacement 0xd0b86642 \
       -s .altinstructions 0xd0b868ec \
       -s .bss 0xd0b89a00 \
       -s .data 0xd0b88400 \
       -s .fixup 0xd0b865f4 \
       -s .gnu.linkonce.this_module 0xd0b88800 \
       -s .rodata.str1.1 0xd0b86645 \
       -s .smp_locks 0xd0b867fc \
       -s .strtab 0xd0b87bd0 \
       -s .symtab 0xd0b87200 \
       -s __ex_table 0xd0b867c4 \
       -s __param 0xd0b86860 \
       -s __versions 0xd0b86900
add symbol table from file "scull.ko" at
        .text_addr = 0xd0b85000
        .altinstr_replacement_addr = 0xd0b86642
        .altinstructions_addr = 0xd0b868ec
        .bss_addr = 0xd0b89a00
        .data_addr = 0xd0b88400
        .fixup_addr = 0xd0b865f4
        .gnu.linkonce.this_module_addr = 0xd0b88800
        .rodata.str1.1_addr = 0xd0b86645
        .smp_locks_addr = 0xd0b867fc
        .strtab_addr = 0xd0b87bd0
        .symtab_addr = 0xd0b87200
        __ex_table_addr = 0xd0b867c4
        __param_addr = 0xd0b86860
        __versions_addr = 0xd0b86900
(y or n) y
Reading symbols from /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko...warning: section .strtab not found in /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko
warning: section .symtab not found in /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko
done.
(gdb) gdb scull_qset
Undefined command: "gdb".  Try "help".
(gdb) p scull_qset
$1 = 1000
(gdb) p scull_devices[0]
Cannot access memory at address 0x1024748b


测试的情况来看:可以读取普通的变量,如scull_qset。但是对于scull_devices这个数组的成员,只能读取到成员的地址,没法读取内容。
在加载符号的时候,出现了warning,
warning: section .symtab not found in /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko

不大明白是什么意思?

论坛徽章:
0
2 [报告]
发表于 2009-02-11 13:21 |只看该作者
/scull.ko...warning: section .strtab not found in /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko
warning: section .symtab not found in /mnt/hgfs/open_source/open_source/ldd3examples/scull/scull.ko
ELF 里面这两个节被去掉了?应该没有strip。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2009-02-11 13:26 |只看该作者

回复 #2 prolj 的帖子

LS的意思是执行一下strip?

论坛徽章:
0
4 [报告]
发表于 2009-02-11 14:15 |只看该作者
意思是没有strip,却少了两个节?
也许Makefile里面什么地方strip了,或者设计者故意设计的ko没有这两个section,猜测,如果Linux内核没有规定ko没有这两个section就应该是在什么地方被去掉了,找找看,共享一下经验

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2009-02-11 14:23 |只看该作者
原帖由 prolj 于 2009-2-11 14:15 发表
意思是没有strip,却少了两个节?
也许Makefile里面什么地方strip了,或者设计者故意设计的ko没有这两个section,猜测,如果Linux内核没有规定ko没有这两个section就应该是在什么地方被去掉了,找找看,共享一 ...


多谢。
首先查看了一下Makefile,应该没有执行strip:
ifneq ($(KERNELRELEASE),)
# call from kernel build system

scull-objs := main.o pipe.o access.o

obj-m        := scull.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) -I../include modules

endif



clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

depend .depend dep:
        $(CC) $(CFLAGS) -M *.c > .depend


ifeq (.depend,$(wildcard .depend))
include .depend
endif


我在找找别的原因。。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2009-02-11 16:23 |只看该作者
不错,一直没用过GDB调试,呵呵

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2009-02-11 16:34 |只看该作者
原帖由 dreamice 于 2009-2-11 16:23 发表
不错,一直没用过GDB调试,呵呵


呵呵,我也是上周六看LDD3的时候,测试了一下。结果出现了上面的问题。而且用GDB调试还是有很多限制的。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
8 [报告]
发表于 2009-02-11 16:36 |只看该作者

回复 #7 Godbach 的帖子

我习惯直接printk,呵呵

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2009-02-11 16:58 |只看该作者
原帖由 dreamice 于 2009-2-11 16:36 发表
我习惯直接printk,呵呵

恩。我实际中也是printk使用的确实更多一些。

论坛徽章:
0
10 [报告]
发表于 2009-07-30 17:16 |只看该作者
即便写驱动,调试时我尽量用buildin方式,这样用gdb定位bug比较方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP