免费注册 查看新帖 |

Chinaunix

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

[其他] 使用kgdb调试 linux 2.6.33(arm,s3c2440) 停在 booting the kerenel不动了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-13 15:39 |只看该作者 |倒序浏览


先行谢过了。
-------------------------------------------------------------------------
开发板:
arm9 s3c2440
内核是 2.6.33

内核添加kgdb支持前的配置是:
使用内核自带的 2410的配置文件。
修改了makefile,
修改了主频 为12000000 。
为了一个错误还修改了内核的开发板硬件编号 使其和UBOOT传过来的机器代码相同。
还没有添加根文件系统的支持。

就做了这么简单的修改。这样在系统启动后会提示挂载根文件系统失败。但也证明内核起来

了。

内核是下载到内存中 bootm启动的。

------------------------------------------------------------------------


为了添加kgdb支持添加了下面的 内核编译选项(根据网上的前人配置的,应该是没错):
General setup
           -> Prompt for development and/or incomplete code/drivers


               
Kernel hacking -->
        Kernel debugging
        compile the kernel with debug info
        KGDG: kernel debugging with remote gdb -->
                KGDB: use kgdb over the serial console
其他都是默认,好多配置选线更没有找到,不过我相信是因为内核版本的问题。



------------------------------------------------------------------------------

内核启动参数:
经试验发现  内核源码的boot option那的内核启动参数会覆盖掉uboot的内核启动参数
所以我选择直接修改内核编译选项中的boot option

使用串口0

init=/linuxrc mem=64M kgdboc=ttySAC0,115200 kgdbwait

虽然没有根文件系统,没有init,加上这个参数应该没什么影响。


--------------------------------------------------------------------------------
host部分是 ubuntu 12.04  ,超级终端使用 gtkterm。


按道理,应该会内核启动的时候,显示 kgdb ...wait......

但是我的gtkterm 上显示 到 booting the kerenel ,就不往下走了。


------------------------------------------------------------------------------
各位看官能从我这描述中看到什么蛛丝马迹,我的kgdb为啥没起作用呢??


同时有下面结果几个问题:
1,如果我在内核启动参数上添加console=ttySAC0,115200,也就是说完整的是

init=/linuxrc mem=64M kgdboc=ttySAC0,115200 kgdbwait console=ttySAC0,115200

内核会跟上面没有添加kgdb支持的时候一样启动,到挂载根文件系统失败。
没有显示 kgdb  wait的字样。

我的理解是 kgdboc是 kgdboc 是kgdb over console的意思,既然添加了kgdboc参数,应该

就不需要console这个参数了吧,为什么添加上console之后会有变化呢。


2,我的内核配置是否有问题。有人做过 2.6.33 这个版本附近的内核调试么?

3,我是用的是kgdboc 就是说host的gdb和gtkterm(超级终端) 同时使用串口1.
   会不会是因为这个导致问题。如果gtkterm那开着。 gdb那就会提示错误信息,信息就是

说串口被占用。 但是我认为开发板和host是相互独立的,不管host那边如何。开发板那如果

配置正常了,就应该显示kgdb wait字样。

4,我曾经试着使用两个串口。但是不成功,经过试验,发现串口2没有被启用。linux默认情

况下(2440)串口不是都启用的么。为什么console=ttySAC2,115200不行呢。

5,我在网上搜索的时候,发现大部分的kgdb都是使用模拟器调试X86架构的kenrel的例子。

各位嵌入式的兄弟姐妹们调试ARM内核都是用printk么? 我这次之所以想调试下内核是因为

使用initramfs作为根文件系统的失败,解压完内核就卡住了,所以想试试kgdb。 (内核一

共 11.2MB)

论坛徽章:
0
2 [报告]
发表于 2013-05-15 16:15 |只看该作者
这个有点麻烦,似乎是跳转的时候出了问题。

建议:
1)仿真器跟踪or点灯
2)是否编译的kernel过大,解压完之后覆盖了一些启动参数?

论坛徽章:
0
3 [报告]
发表于 2013-05-16 12:42 |只看该作者
谢谢回复。
1,你说的仿真是什么意思。是使用jlink等硬件工具来仿真么,我对这个不懂,我只是用jlink当作烧写器。 能不能给我提供一些仿真的博客或者资料,我对硬件那些东西了解甚少。
2,kgdb这边不通。应该不是因为内核太大,因为我是把一个干净的内核,单纯的加了kgdb支持, 没有添加文件系统,内核编出来只有不到2Mb。     没有加根文件系统,如果不添加kgdb的支持,kernel会启动到挂载根文件系统失败。是正常的,所以应该不是内核过大的原因。
上面提到的11.2MB 和当前帖子关系不大,只是说我要使用KGDB的原因。



另外,我使用console =ttySAC0,115200   kgdboc=ttySAC0,115200    kgdbwait  作为启动参数的时候,内核会正常启动,启动到挂载跟文件系统失败,没有出现kgdb  wait的字样 。 有前辈帮我分析,应该是kgdb压根没起作用。所以我还是感觉我的内核配置有问题。

Ps: 2.6.33 内核,需要修改对应的串口驱动么???还是只是需要打开内核编译选项就可以。 我的是s3c2440    QQ2440v3的板子


再次谢谢你的回复。
回复 2# bluempire


   

论坛徽章:
0
4 [报告]
发表于 2013-05-16 14:29 |只看该作者
不客气。
我说的仿真主要是指 调试内核的(或者打断点等等),jlink应该可以调试的,baidu一下看看

另外,串口2是否是 ttySAC1? 而不是ttySAC2?

论坛徽章:
0
5 [报告]
发表于 2013-05-17 12:56 |只看该作者
回复 1# Dahuanxihuopusa
我没有ARM开发的经验,但是从你的串口的驱动的来看,似乎并不支持CONSOLE_POLL, 如果这样的话,应该是没法用kgdb的通过这个串口。如果你想用应该需要自己实现这部分代码。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP