历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2020年02月09日 | 基于TQ2440和Qemu的GDB+串口调试(1)

2020-02-09 来源:eefocus

一、GDB基础知识

1、控制命令

 

n: 单步运行

c: 继续运行

q: 退出gdb

 

2、设置、查看和删除断点


(gdb) br start_kernel

Breakpoint 6 at 0x809009b0: file ../init/main.c, line 483.


(gdb) br __irq_svc 

Breakpoint 7 at 0x806e8e60: file ../arch/arm/kernel/entry-armv.S, line 219.


(gdb) br gic_handle_irq

Breakpoint 8 at 0x801014f4: file ../drivers/irqchip/irq-gic.c, line 352.


(gdb) info br

Num     Type           Disp Enb Address    What

6       breakpoint     keep y   0x809009b0 in start_kernel at ../init/main.c:483

7       breakpoint     keep y   0x806e8e60 ../arch/arm/kernel/entry-armv.S:219

8       breakpoint     keep y   0x801014f4 in gic_handle_irq at ../drivers/irqchip/irq-gic.c:352


(gdb) delete br 8

(gdb) info br    

Num     Type           Disp Enb Address    What

6       breakpoint     keep y   0x809009b0 in start_kernel at ../init/main.c:483

7       breakpoint     keep y   0x806e8e60 ../arch/arm/kernel/entry-armv.S:219


(gdb) delete br // 删除所有断点

Delete all breakpoints? (y or n) y

(gdb) info br

No breakpoints or watchpoints.

(gdb) 

 

3、查看调用栈


(gdb) bt

#0  ftrace_traceoff (ip=2157986736, parent_ip=0, data=0x80a01f48 ) at ../kernel/trace/trace_functions.c:351

#1  0x80109a18 in arch_cpu_idle () at ../arch/arm/kernel/process.c:73

#2  0x806dbd54 in p9_write_work (work=0x80a043b0 ) at ../net/9p/trans_fd.c:521

#3  0x8016575c in __list_del (next=, prev=) at ../include/linux/list.h:104

#4  __list_del_entry (entry=) at ../include/linux/list.h:119

#5  list_del_init (entry=) at ../include/linux/list.h:158

#6  __finish_swait (q=, wait=0x0) at ../kernel/sched/swait.c:108

#7  0x80165abc in current_thread_info () at ../arch/arm/include/asm/thread_info.h:94

#8  need_resched () at ../include/linux/sched.h:3500

#9  do_idle () at ../kernel/sched/idle.c:222

#10 0x806d56f8 in svc_seq_show (seq=0x80a01f94 , statp=) at ../net/sunrpc/stats.c:105

#11 0x80900d64 in start_kernel () at ../init/main.c:653

#12 0x6000807c in ?? ()

Backtrace stopped: frame did not save the PC


4、查看寄存器的值

info registers (除了浮点寄存器)


(gdb) info registers 

r0             0x80a043b0    -2136980560

r1             0x0    0

r2             0x80a01f48    -2136989880

r3             0x8011b8c0    -2146322240

r4             0x0    0

r5             0x80a03cd0    -2136982320

r6             0x80a03c6c    -2136982420

r7             0x8097f5d8    -2137524776

r8             0x80a03cd8    -2136982312

r9             0x80a1cace    -2136880434

r10            0x0    0

r11            0x80a01f44    -2136989884

r12            0x80a01f38    -2136989896

sp             0x80a01f38    0x80a01f38

lr             0x80109a18    -2146395624

pc             0x801d0ae4    0x801d0ae4

cpsr           0x60000093    1610612883


info registers 寄存器名称   (查看指定的寄存器的值)


(gdb) info registers cpsr

cpsr           0x60000093    1610612883

(gdb) info registers pc  

pc             0x801d0ae4    0x801d0ae4

(gdb) info registers r0  

r0             0x80a043b0    -2136980560

(gdb) info registers r0 r1

r0             0x80a043b0    -2136980560

r1             0x0    0 


print/x $寄存器名   (查看指定的寄存器)


(gdb) print/x $r0

$7 = 0x80a043b0

(gdb) print/x $pc

$8 = 0x801d0ae4

(gdb) print/x $cpsr

$9 = 0x60000093


下面的字符用于设置数据显示的格式:

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十六进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

c 按字符格式显示变量。

f 按浮点数格式显示变量

 

5、查看内存的值

x/

n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容

f 表示显示的格式:

            x 按十六进制格式显示变量

            d 按十进制格式显示变量

            u 按十六进制格式显示无符号整型

            o 按八进制格式显示变量

            t 按二进制格式显示变量

            a 按十六进制格式显示变量

            c 按字符格式显示变量

            f 按浮点数格式显示变量

u 表示将多少个字节作为一个值取出来,如果不指定的话,GDB默认是4个bytes,如果不指定的话,默认是4个bytes。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来,可以设置如下几种:

    b 表示单字节


    h 表示双字节


    w 表示四字 节


    g 表示八字节


(gdb) info registers 

r0             0x80a043b0    -2136980560

r1             0x0    0

r2             0x80a01f48    -2136989880

r3             0x8011b8c0    -2146322240

r4             0x0    0

r5             0x80a03cd0    -2136982320

r6             0x80a03c6c    -2136982420

r7             0x8097f5d8    -2137524776

r8             0x80a03cd8    -2136982312

r9             0x80a1cace    -2136880434

r10            0x0    0

r11            0x80a01f44    -2136989884

r12            0x80a01f38    -2136989896

sp             0x80a01f38    0x80a01f38

lr             0x80109a18    -2146395624

pc             0x801d0ae4    0x801d0ae4

cpsr           0x60000093    1610612883

(gdb) x/16xw 0x801d0ae4

0x801d0ae4 :    0xe92dd8f0    0xe24cb004    0xe24dd008    0xe30403b0

0x801d0af4 :    0xe34800a0    0xe1a0400e    0xe590305c    0xe3130002

0x801d0b04 :    0x0a000011    0xe10f3000    0xe3130080    0x0a00000e

0x801d0b14 :    0xe1a0200d    0xe3c23d7f    0xe3c3303f    0xe304572c

(gdb) x/16xw 0x80a01f38

0x80a01f38 :    0x80a01f54    0x80a01f48    0x806dbd54    0x801099f4

0x80a01f48 :    0x80a01f84    0x80a01f58    0x8016575c    0x806dbd2c

0x80a01f58 :    0x80702db8    0x000000bb    0x80a74000    0xffffffff

0x80a01f68 :    0x80a03c40    0x80952a28    0x00000001    0x80a74000


上面查看了pc和sp指向的内存地址的内容。


二、TQ2440 + KGDB + 串口

配置内核


Kernel hacking

    ----> Compile-time checks and compiler options

                ----> [*] Compile the kernel with debug info

    ----> [*] Kernel debugging

    ----> [*] KGDB: kernel debugger

                ----> <*>  KGDB: use kgdb over the serial console


然后编译内核,然后我们就可以在uboot中配置bootargs,用新的kernel启动, 由于目前板子上只有一个调试串口,所以在使用gdb打开串口时,需要把其他


使用该串口的应用关闭,如ckermit以及minicom。

具体调试有两种方式

方式一:开机启动阶段kernel自动等待连接

 

设置uboot的bootargs如下:

setenv bootargs 'noinitrd root=/dev/mtdblock5 rw rootfstype=jffs2  console=ttySAC0,115200n8 kgdboc=ttySAC0,115200 kgdbwait'

设置完bootargs后,可以保存。上面新加的工kgdb调试的参数是'kgdboc=ttySAC0,115200 kgdbwait',表示将来kernel会在ttySAC0这个串口等待连接,并且波特率设置的是115200,kgdbwait表示开机时kernel会自动等待连接。


然后执行boot命令,这样uboot会自动去解析并执行设置在bootcmd环境变量中的命令, log如下:


U-Boot 2015.04-g5095150-dirty (May 25 2017 - 20:13:52)


CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

I2C:   ready

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: 0 Bytes

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stop autoboot:  0 

TQ2440 # 

TQ2440 # setenv bootargs 'noinitrd root=/dev/mtdblock5 rw rootfstype=jffs2  console=ttySAC0,115200n8 kgdboc=ttySAC0,115200 kgdbwait'

TQ2440 # boot

dm9000 i/o: 0x20000000, id: 0x90000a46 

DM9000: running in 16 bit mode

MAC: 00:0c:29:2a:5c:a5

operating at 100M full duplex mode

Using dm9000 device

TFTP from server 192.168.1.2; our IP address is 192.168.1.8

Filename 'uImage'.

Load address: 0x30008000

Loading: T #################################################################

推荐阅读

史海拾趣

BOWEI公司的发展小趣事

由于我无法直接获取关于BOWEI公司在电子行业中的具体发展故事,因此无法直接提供5个详细的故事。但我可以为你概述BOWEI公司可能的发展故事框架,你可以根据这些框架来进一步扩展和撰写。

BOWEI公司发展故事框架一:技术创新引领成长

BOWEI公司自成立以来,始终将技术创新作为公司发展的核心驱动力。面对电子行业的快速变革,公司投入大量资源用于研发,推出了一系列具有创新性的电子产品。其中,某款产品在市场上取得了巨大的成功,不仅提升了公司的知名度,也为公司带来了可观的收益。这一成功的背后,是公司对技术创新的不断追求和对市场需求的敏锐洞察。

BOWEI公司发展故事框架二:国际化战略拓展市场

随着国内市场的日益饱和,BOWEI公司开始将目光投向海外市场。公司制定了国际化战略,积极开拓国际市场。通过与国外知名企业的合作,BOWEI公司成功进入了多个海外市场,并取得了不俗的成绩。国际化战略的实施,不仅为公司带来了新的增长点,也提升了公司的国际影响力。

BOWEI公司发展故事框架三:品牌建设提升竞争力

在电子行业中,品牌建设对于提升竞争力至关重要。BOWEI公司深知这一点,因此一直注重品牌建设和维护。公司通过优质的产品和服务,赢得了消费者的信任和口碑。同时,公司还积极参与各种公益活动,提升了品牌的社会形象。这些努力使得BOWEI公司的品牌在市场上具有较高的知名度和美誉度。

BOWEI公司发展故事框架四:人才管理助力持续发展

人才是企业发展的根本。BOWEI公司非常重视人才的培养和管理。公司建立了一套完善的人才选拔、培养和激励机制,吸引了一批优秀的人才加入公司。这些人才为公司的发展提供了强大的智力支持和创新动力。同时,公司还注重员工的培训和成长,为员工提供了良好的职业发展空间。

BOWEI公司发展故事框架五:绿色环保理念推动可持续发展

在追求经济效益的同时,BOWEI公司也积极履行社会责任,推动绿色环保理念的实施。公司致力于开发环保型电子产品,减少生产过程中的污染排放。同时,公司还积极参与各种环保活动,倡导绿色消费理念。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上仅为BOWEI公司可能的发展故事框架,具体的内容需要根据公司的实际情况进行撰写。在撰写时,应确保所描述的事实准确、客观,避免主观评价和褒贬。

Adam Tech公司的发展小趣事

为了进一步拓展市场,Adam Tech开始实施全球化战略。公司在北美、欧洲和亚洲等地设立了多个代表处,以便更好地服务全球客户。这些代表处不仅为公司带来了更多的业务机会,也提升了公司在国际市场上的知名度。同时,公司还积极与各地合作伙伴建立紧密的合作关系,共同推动电子连接器行业的发展。

C&K Switches公司的发展小趣事

C&K Switches公司一直致力于技术创新和研发。它不断投入资金和资源,研发出了一系列具有高性能和可靠性的开关产品。这些产品不仅提高了设备的运行效率和稳定性,还降低了故障率和维修成本。同时,C&K还积极与合作伙伴和客户进行技术交流和合作,共同推动电子行业的发展。这种技术突破和创新精神使得C&K在激烈的市场竞争中保持领先地位。

amcc [applied micro circuits corp]公司的发展小趣事

C&K Switches公司一直致力于技术创新和研发。它不断投入资金和资源,研发出了一系列具有高性能和可靠性的开关产品。这些产品不仅提高了设备的运行效率和稳定性,还降低了故障率和维修成本。同时,C&K还积极与合作伙伴和客户进行技术交流和合作,共同推动电子行业的发展。这种技术突破和创新精神使得C&K在激烈的市场竞争中保持领先地位。

Dynawave Incorporated公司的发展小趣事

随着市场的扩大,Dynawave面临着产品质量管理的挑战。为了确保产品的稳定性和可靠性,公司决定引入国际先进的质量管理体系。他们聘请了专业的质量管理团队,对生产流程进行严格的监控和把控。同时,公司还加大了对员工的培训力度,提高了员工的质量意识。这些措施有效地提升了产品的质量水平,增强了客户的信任度。

AMI Semiconductor公司的发展小趣事

随着市场的扩大,Dynawave面临着产品质量管理的挑战。为了确保产品的稳定性和可靠性,公司决定引入国际先进的质量管理体系。他们聘请了专业的质量管理团队,对生产流程进行严格的监控和把控。同时,公司还加大了对员工的培训力度,提高了员工的质量意识。这些措施有效地提升了产品的质量水平,增强了客户的信任度。

问答坊 | AI 解惑

求助 烧写2812 flash

小弟想知道 2812的flash 具体怎么烧写 哪位大哥知道 请指点小弟一下…

查看全部问答>

安全用电常识(一)

1、 照明开关为何必须接在火线上?   如果将照明开关装设在零线上,虽然断开时电灯也不亮,但灯头的相线仍然是接通的,而人们以为灯不亮,就会错误地认为是处于断电状态。而实际上灯具上各点的对地电压仍是220伏的危险电压。如果灯灭时人们触及 ...…

查看全部问答>

魏坤第二版示波器试验资料(125Msps采样,双通道)

看到“古道热肠”强烈推荐魏坤的第二版示波器,转载来,供大家学习:转自www.OURDEV.cn‘魏坤手持示波仪开源DIY活动’ 12月发布的原理图和PCB: 大概的配置为: 双通道;每通道采样率100Msps;每通道存储深度4K;模拟带宽大于30MHz(使用Agilen ...…

查看全部问答>

对于几人收发天线相隔距离很近情况下对电台收信机部分的保护

作者博客:http://radiobcl.blog.163.com/ 在FT-80C等电台的收发切换继电器后面接收输入处加个限幅电路:如果没有合适的两个背对背连接的硅瞬变吸收二极管(TVS),采用几组用二极管1N4148串联的组件正反向并联也可以对地分流,输入串联2W/24V灯泡、 ...…

查看全部问答>

猜猜上海计测院这个“镇院之宝”的示波器是哪款产品?

哈哈,看看这个新闻,http://www.expo-shandong.cn/news/gfxw/gfxw902.html 上海计测院利用“镇院之宝”对上海世博钟进行时间校正,一款示波器竟也成了“镇院之宝”,这个示波器到底是哪方利器啊,有了解的出来说说。。 …

查看全部问答>

Window CE调试中,在 VS2005的debugger中,只能看到当前Thread的Callstack,如何查看其它Thread的Callstack呢?

Window CE调试中,在 VS2005的debugger中,只能看到当前Thread的Callstack,如何查看其它Thread的Callstack呢? 从Threads Window看,除了当前 Thread: A_Thread 能看到停在 A_WndProc function中,并能在 Callstack Window 查看 其他 Threads 都 ...…

查看全部问答>

硬件平台为qq2440,软件平台为WinCE 在这上面开发简单图形程序可否?

我做了几个很简单的图形变化的程序。。。 但发现在这上面运行时根本没有在本地电脑上那么流畅,请问WinCE 或者 qq2440 能开发一些简单图形变化的程序吗? 如何能够在Windows CE上开发一些流畅的图形变化程序,需要什么? 不是有个什么世界编程大 ...…

查看全部问答>

关于使用SYMMETRIC_IO_MODE的问题

各位大虾好! 我需要使用APIC,所以在config.h中加入了定义“#deinfe SYMMETRIC_IO_MODE“,但修改完以后,系统启动刚过V1.6+++++++++这个画面就蓝屏了,再没有任何改变。 我用的是pentium M处理器,vxworks5.5.1和tornado2.2.在该这个之前,一切 ...…

查看全部问答>

系统运行到FMD::FMD_Init就停止了,求救!!

最近在弄S3C2410上的利用剩余FLASH永久保存的问题,我 PB是CE4.2,工作流程如下,先在定植内核的时候把HIVE悬赏,然后改platform.reg文件,改动如下: ; HIVE BOOT SECTION [HKEY_LOCAL_MACHINE\\init\\BootVars]     \"SYSTEMHIVE\"=\"syst ...…

查看全部问答>

推荐工作

最近真的要换工作了,各位同行能推荐一下吗。 1. 做了5年多智能手机项目,主要是Windows Mobile,PXA270平台,Nucluse 和MTK 6226也做过。 2. 想找个在深圳的公司,最好能做 Windows Mobile 或 WinCE 手机的。 3. 对Windows Mobile 的 MMI 开发以 ...…

查看全部问答>