加载中…
个人资料
散人
散人
  • 博客等级:
  • 博客积分:0
  • 博客访问:15,577
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

5.1  浅谈telnet和gdbserver

(2011-01-27 20:43:49)
标签:

linux

杂谈

临近年终了,明天过完就放假了,心情好啊。在这里先给各位兄弟姐妹道个喜,春节快乐!

前几天讲的话题暂时讲不下去了,等明年一上班我们再一起探索usb子系统,我跟你们的起步都差不多,大家只要相信自己就一定能学有所获。

下面要讲的是如何使用pctelnet目标机,和如何使用gdbserver调试目标机的代码.

1.拿到板子后,我所说的烧了boot,kerner,rootfs的板子,可以正常使用的,确保串口终端能正常使用。

2.完成1之后在目标机rootfs加载完成之后,配置好目标机的ip,单网口可以使用,ifconfig eth0 192.168

.1.xxx ,双网口需要多配置一路ifconfig eth1 192.168.1.xxx。配制完成之后可以ping一下同一网段的pc机,看看网络是否已通畅。

3.Telnet在文件系统中的一些相关支持,如下:

  3.1   内核(2.6)和busybox都需要支持udev,并且/usr/sbin/telnetd文件存在。

  3.2   /etc/services,里面可以指定telnet的端口号,默认是23.

  3.3   /etc/passwd 指定登陆的用户账号和密码。

  3.4   /etc/protocols指定telnet的使用协议,一般使用TCP即可。

  3.5   rootbox中添加

  mkdir /dev/pts 

         mount -t devpts devpts /dev/pts

         udevd --daemon
         udevstart

  Telnetd

   重新启动之后,用ps察看一下,网络守护进程是否已经起来,然后PC上用telnet工具登陆即可.

 

   关于GDB server的使用缘由,做过linux嵌入式开发的人都有这个感触, 资源太少了 , 显然在目标板上要调试gdb那显然不可能,GDBserver由此诞生,即在交叉编译环境中,由目标机指定代码,端口号,IPPC机),如gdbserver 192.168.1.58 123456  hello 其中58为我自己的PC机的IP. 不过在这之前你需要确定在你的rootfs中有gdbserver存在,一般都是在/bin/sbin下面的。上述流程顺畅之后,就可以在PC上使用gdb调试了gdb命令需要跟代码相对应,如使用arm-linux-gcc -g -c -o hello hello.c生成的,需要使用arm-linux-gdb hello调试。

具体操作如:

1.切记利用gcc编译可以执行文件的时候需要加如-g标志。

2.介绍一下我开发中遇到的问题:
arm-uclibc-linux-gcc 编译

主机   IP : 192.168.1.224
目标机 IP : 192.168.1.223
通过nfs把host下的temp目录mount到target目标板子上mount下,可执行文件hello放在主机目录temp下.->在目标机上使用gdbserver 192.168.1.224:2345 /mount/hello

监听192.168.1.224上的gdb调试.
目标机串口提示:
Process test created; pid = 476
Listening on port 2345

->在主机上使用arm-uclibc-linux-gdb /temp/hello
GNU gdb 6.3.50.20050627-cvsCopyright 2004 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 "--host=i686-pc-linux-gnu --target=arm-uclibc-linux"...
(gdb) target remote 192.168.1.223:2345 //于目标机通信
Remote debugging using 192.168.1.223:2345
[New thread 476]
Malformed packet(b) (missing colon): re:0;//数据包畸形
Packet: 'T050b:00000000;0d:509ef9be;0f:c0090040;thread:1dc;core:0;'

在目标机上面提示:
Listening on port 2345
Remote debugging from host 192.168.1.224
readchar: Got EOF
Remote side has terminated connection.  GDBserver will reopen the connection.
Listening on port 2345
Remote debugging from host 192.168.1.224
readchar: Got EOF
Remote side has terminated connection.  GDBserver will reopen the connection.
Listening on port 2345

还有一点就上在挂载nfs网络文件系统的时候,为了不使用默认的udp协议,需要修改挂载参数,

eg:mount -t nfs -o intr,tcp,nolock 192.168.1.8:/home/mstar/nfsroot/root /home

======================================================================================

针对上述问题最后解决如下:GDB+GDBSERVER总结

1. 对于出现无法加载libthread_db.so.1的情况解决如下:
在linux服务器下找到libthread_db-1.0.so并拷到开发板的lib下面
find  -name  "libthread_db-1.0.so" -print(省略copy过程)
cd /lib
ln -s libthread_db-1.0.so libthread_db.so.1
创建一个libthread_db.so.1的连接
======================================================================================2. 对于出现无法加载libdl.so.0的情况解决如下:
在/opt下面找到libdl-0.9.28.so并拷到开发板的lib下面
find   -name  "libdl-0.9.28.so" -print 寻找文件
cd /lib
ln -s libdl-0.9.28.so libdl.so.0
创建一个libdl.so.0的连接(加载动态库需要这个)
======================================================================================
3. 对于使用sdk提供是arm-uclibc-linux-gdb出现情况:(Malformed packet(b) (missing colon): re:0;)
解决情况是重新编译源代码:
-> 进入: http://ftp.gnu.org/gnu/gdb/ -> gdb-7.2.tar.gz下载文件,我保存的目录在/home/yuanbin/SDK下。
->gdb 安装
-> cd /home/yuanbin/SDK -> tar -zxvf gdb-7.2.tar.gz ->cd gdb-7.2->./configue --target=arm-uclibc-

lunux  --prefix=/home/yuanbin/gdb_output
-> make
-> make install
执行成功后在 /home/yuanbin/gdb_outpu/bin下面会生成一个arm-uclibc-linux-gdb工具。
======================================================================================->gdbserver 安装
cd /home/yuanbin/SDK/gdb-7.2/gdb/gdbserver
make CC=/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc(gcc编译器绝对路径)

======================================================================================-> 打开开发板,配置好ip地址,ifconfig ethx 192.168.1.223(举例)把可执行文件通过nfs挂载过来,
假设mnt为挂载目录,hello为待调试的文件,启动gdbserver(需要有gdbserver工具),
-> 开启debug的 gdbserver --debug --remote-debug :3456 /mnt/hello
-> 关闭debug的 gdbserver :3456 /mnt/hello

-> host端,进入arm-uclibc-linux-gdb目录,或者PATH=$PATH:/home/yuanbin/gdb_outpu/bin,
cd 进入hello所在的目录./arm-uclibc-linux-gdb hello或者arm-uclibc-linux-gdb hello,前者为arm-uclibc-

linux-gdb和hello文件在同一级下面.后者可以不在同一级目录。

对于在gxlinux下出现error while loading shared libraries: libpython2.5.so.1.0: cannot open shared

object file: No such file or directory解决情况如下:
在服务器上找到改文件并拷到板子上。
find   -name  "libpython2.5.so.1.0" -print 寻找文件
======================================================================================
4. 在root权限下创建一个问候,如果需要改变该文件的所有权限,可以执行如下指令:
fine 绝对路径 -name "*" -print -exec chmod 777 {} +
======================================================================================

上述是我在搭建平台的时候遇到的一些经验总结,希望能对大家有用。

 

在另一个平台上面碰到的问题:

[yuanbin@localhost nfs]$ arm-uclibc-linux-gcc  -v
Reading specs from /opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/../lib/gcc/arm-hisi-linux/3.4.3/specs
Configured with: ../gcc-arm/configure --target=arm-hisi-linux --host=i686-pc-linux-gnu --with-local-prefix=/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/ --with-sysroot=/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/ --enable-threads=posix --enable-symvers=gnu --disable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long --prefix=/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/ --with-float=soft --enable-multilib --with-softfloat-supp
Thread model: posix
gcc version 3.4.3 (release) (CodeSourcery ARM Q3cvs 2004)

 

在主机下面进入gdb后,一直接收到Program received signal SIG32, Real-time event 32.的问题,解决如下:

(gdb) handle SIG32 nostop noprint

(gdb) handle SIG33 nostop noprint

(gdb) set step-mode on

(gdb) set schedule-multiple off

以上命令只要在进入代码之前设置就OK。

 

0

阅读 收藏 禁止转载 喜欢 打印举报/Report
前一篇:4.4 usb core
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有