AKever

导航

TQ2440 使用strace工具跟踪错误

TQ2440 使用strace工具跟踪错误

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

一. 工具包:

# strace-4.5.15.tar.bz2
# strace-fix-arm-bad-syscall.patch  #补丁文件

二. 安装:

# tar jxvf strace-4.5.15.tar.bz2  ##解压
# cd strace-4.5.15 # patch
-p1 < ../strace-fix-arm-bad-syscall.patch ##打补丁
# ./configure --host=arm-linux CC=arm-linux-gcc #配置
# make  #安装

PS: 打补丁中"-p1"表示补丁文件去除第1个斜杠前的内容(下面红色部分),安装完后出生成一个strace执行文件

strace-fix-arm-bad-syscall.patch:内容如下

--- strace-4.5.12-orig/syscall.c    2005-06-08 21:45:28.000000000 +0100
+++ strace-4.5.12/syscall.c    2005-10-25 19:26:39.000000000 +0100
@@ -1013,6 +1013,15 @@ struct tcb *tcp;
         /*
          * Note: we only deal with only 32-bit CPUs here.
          */
+
+        if (!(tcp->flags & TCB_INSYSCALL) &&
+            (tcp->flags & TCB_WAITEXECVE)) {
+            /* caught a fake syscall from the execve's exit */
+            tcp->flags &= ~TCB_WAITEXECVE;
+            return 0;
+        }
+ 
+
         if (regs.ARM_cpsr & 0x20) {
             /*
              * Get the Thumb-mode system call number

 

三.使用

1. 使用

# cp strace /opt/share  ##拷贝执行文件到开发板共享目录 /opt/share
# strace -o log.txt ./firstdrvtest on ##如果这了命令为父命令,红色部分就为这条命令的子命令, 子命令执行后的信息会存放到log.txt文件中
# vi log.txt ##查看信息,如果开发板不方便看,可拷贝到pc上查看

四. 以重新安装busybox为例,使用strace

0. 查看busybox版本

# busybox

1. 解压进入目录

# tar xjf busybox-1.20.0.tar.bz2
# cd busybox-1.20.0/

2. 配置并编译, 编译选项加上交叉编译前缀 arm-linux-

# make menuconfig ##配置
-> Busybox Configuration
  -> Build Options
    -> (arm-linux-)Cross Compiler prefix
# make        ##编译

3.发现错误并解决

错误a: ionice.c文件错误,去除配置选项

Busybox Configuration
    -> Miscellaneous Utilities
        -> [ ] ionice

错误b:

去除配置选项:

Busybox Configuration
    -> Miscellaneous Utilities
        -> [ ] nandwrite

错误c:

miscutils/ubi_tools.c:67:26: mtd/ubi-user.h: No such file or directory

去除ubi相关的配置选项: ->Busybox Configuration -> Miscellaneous Utilities

 

 

3.编译成功后,拷贝到开发板文件系统

// 此处操作是开发板网络启动方式启动,busybox拷贝到网络文件上去
# cd /opt/share/sys_fs             //网络文件系统启动目录
# cp bin/busybox bin/busybox_1.7.0        //备份之前1.7.0的busybox
# cp /busybox-1.20.0/busybox bin/busybox  //busybox内容拷贝

4. 用了1.20.0 busybox之后,rmmod first_drv就会出现问题

# insmod first_drv.ko
# rmmod first_drv
rmmod: chdir(/bin/modules): No such file or directory ##报错
#

5. strace跟踪并查看log.txt文件

# strace -o log.txt rmmod first_drv
# vi log.txt

log.txt

6. 创建要求的目录,再执行

7. 查看log.txt解决问题并继续操作

8. 以上跟踪其实在执行的时候就提示,不过strace能看到更多的代码

 

 

----------------------- The end!!




posted on 2016-10-26 17:43  AKever  阅读(313)  评论(0)    收藏  举报