hisi芯片gdp调试

最近买了一个华为SDC相机,想跑跑自己的深度学习模型。相机端调试bug可谓是非常的麻烦,自己也不是计算机出身,原来写的windows程序,通过vsstudio调试开发,非常的方便。第一次接触嵌入式开发,有点不习惯。看到网上有关于通过gpd远程调试的方法,在电脑端调试arm板载程序,所以自己试了一下,效果还算不错,记录一下;
参考1
参考2

环境

宿主机:Ubuntu 20.04 x86_64
相机:华为SDC相机 D2150
gdb版本:gdb8.2

编译gdb

下载 gdb-8.2

解压缩,输入指令解压 tar -vxzf gdb-8.2.tar.gz
进入解压后的目录中 cd gdb-8.2

修改gdb代码

修改gdb/remote.c ,否则运行调试时会出现Remote ‘g’ packet reply is too long错误。

if (buf_len > 2 * rsa->sizeof_g_packet)error (_(“Remote ‘g’ packet reply is too long: %s”), rs->buf);

修改为:

if (buf_len > 2 * rsa->sizeof_g_packet) {rsa->sizeof_g_packet = buf_len ;for (i = 0; i < gdbarch_num_regs (gdbarch); i++) {if (rsa->regs[i].num == -1)continue;if (rsa->regs[i].offset >= rsa->sizeof_g_packet)rsa->regs[i].in_g_packet = 0;elsersa->regs[i].in_g_packet = 1;}
}

安装交叉编译环境

安装arm-himix200-linux

编译gdb

这个过程有点长

cd gdb-8.2/
./configure --target=arm-himix200-linux --prefix=/opt/gdb.8.2/ -v
make -j8
make install

编译后,在目标路径下出现如下,就是安装成功了;

重置软链接

rm /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gdb
ln -s /opt/gdb.8.2/bin/arm-himix200-linux-gdb /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gdb

输入命令即可进入gdb调试

编译gdbserver

cd gdb-8.2/gdb/gdbserver/
./configure --target=arm-himix200-linux --host=arm-himix200-linux
make -j8 CC=arm-himix100-linux-gcc
file gdbserver

编译过程可能会出现

arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted (core dumped)

解决办法:

export LC_ALL=C

gdbserver编译也完成了;

使用GDB调试

准备测试文件

测试代码

#include <stdio.h>int main(){int times = 10;while(times > 0){printf("Hello word!\n");printf("xixixi!\n");times--;}return 0;
}

交叉编译

arm-himix100-linux-gcc main.c -o main -g #编译DEBUG版本

通过sftp下载到相机,相机ip:192.168.0.120,默认端口:20022

root@***# sftp -oPort=20022 admin@192.168.0.120
admin@192.168.0.120's password:
Connected to 192.168.0.120.
sftp> ls -l
-rwxrwxrwx    1 1000     1000      4719196 Apr  2 03:12 gdbserver   // 写文章前上传过了
-rwxrwxrwx    1 1000     1000           74 Apr  2 01:57 main.c
sftp> put /home/**/Documents/test/main ./
Uploading /home/**/Documents/test/main to /home/admin/./main
/home/**/Documents/test/main                                                                                                                          100%   14KB 421.2KB/s   00:00
sftp> ls -l
-rwxrwxrwx    1 1000     1000      4719196 Apr  2 03:12 gdbserver
-rwxr-xr-x    1 1000     1000        14032 Apr  2 22:22 main
-rwxrwxrwx    1 1000     1000           74 Apr  2 01:57 main.c
sftp> chmod 777 main
Changing mode on /home/admin/main
sftp> ls -l
-rwxrwxrwx    1 1000     1000      4719196 Apr  2 03:12 gdbserver
-rwxrwxrwx    1 1000     1000        14032 Apr  2 22:22 main
-rwxrwxrwx    1 1000     1000           74 Apr  2 01:57 main.c

进入相机,运行gdbserve程序,192.168.0.100是电脑端ip,5000是电脑端链接端口

root@Huawei:~# cd /home/sftp_admin/home/admin/
root@Huawei:/home/sftp_admin/home/admin# ls -l
-rwxrwxrwx    1 admin    1000       4719196 Apr  2 03:12 gdbserver
-rwxrwxrwx    1 admin    1000         14032 Apr  2 22:22 main
-rwxrwxrwx    1 admin    1000            74 Apr  2 01:57 main.c
root@Huawei:/home/sftp_admin/home/admin# ./gdbserver 192.168.0.100:5000 main
Process /home/sftp_admin/home/admin/main created; pid = 5715
Listening on port 5000

电脑端运行gdb

./arm-himix100-linux-gdb ./main
(gdb) target remote 192.168.1.127:5000    #连接板端gdbserve,192.168.1.127相机ip
(gdb) set solib-search-path /lib          #指定库搜索路径
(gdb) continue #运行程序

结果:

电脑端设置断点:

(gdb) l   # 查看程序行
1   #include <stdio.h>
2
3   int main(){
4       int times = 10;
5       while(times > 0){
6            printf("hello word!");
7           printf("xixixi\n");
8           times--;
9       }
10      return 0;
(gdb) b 5   # 在第五行设置断点
Breakpoint 1 at 0x10450: file main.c, line 5.
(gdb) target remote 192.168.0.120:5000
(gdb) continue   # 运行程序
Continuing.
Reading /lib/a7_softfp_neon-vfpv4/libc.so.6 from remote target...Breakpoint 1, main () at main.c:5
5       while(times > 0){
(gdb) c
Continuing.
[Inferior 1 (process 18717) exited normally]

到此,电脑端调试相机程序基本完成。
但是,人嘛,能偷懒就偷懒,通过命令进行调试还是不够方便,如果能通过图形用户界面调试就好了;
可以实现!上活!
当然这部分内容还是参看大佬的博客,再次感谢!

VScode 调试

配置lauch.json文件

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) ARM remote debug","type": "cppdbg","request": "launch","program": "/home/qqq/Documents/test/main",  #运行程序地址"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "gdb","miDebuggerPath": "arm-himix200-linux-gdb", #调试用的gdb"miDebuggerServerAddress": "192.168.0.120:5000",  #远程相机ip:端口"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],}]
}

相机端开启后,F5开始调试
继续:

总结

至此,通过vs调试相机端程序算是跑通了,但是实际程序比demo要复杂的多,要涉及库华为sdc服务化接口,实际开发能不能用还另说。只做记录。

追加1

今天测试了相机程序的调试,没有问题,能正常跑,但是makefile文件要增加编译选项-g

CFLAGS =-g

和关掉strip裁剪

#    $(STRIP) $(PROGRAM)

通过下面5个窗口就可以debug啦

hisi芯片gdp调试相关推荐

  1. 指针增量和数组的关系,指针偏移的补充,(重要面试),gdp调试,将数组中的n个元素逆序存放

    1.指针增量和数组的关系 //加1  代表了地址偏移了一个类型的字节数(整形数偏移四个字节,char形数偏移了一个字节) 再来下标法: 2.指针偏移的补充 也可以换一种写法(第12行) 但是呢同样的代 ...

  2. 【HISI系列】之HISI芯片码率控制使用说明

    DATE: 2019-1-30 参考 HISI系列文档<芯片码率控制使用说明.pdf> [Codec系列]之常用码率控制算法分析 摘要 1.CBR参数说明 2.VBR参数说明 3.宏块级码 ...

  3. 电池监控芯片bq34z100-g1调试

    电池监控芯片bq34z100-g1调试 1.硬件 2.软件 3.参考资料 4.主要步骤 5.存在问题 1.硬件 上次做的无线板子,芯片改为bq34z100-g1,支持锂电,最大电量29Ah 6000m ...

  4. 海思芯片-Proc调试信息查看-视频输入输出信息-电压信息

    一.Hisi芯片 海思芯片系列:hi3535.hi3536. 海思平台的内存分为两部分:os内存和mmz内存.os内存为linux系统内存:mmz内存为由mmz驱动模块管理的供媒体业务单独使用的内存. ...

  5. CAN控制器芯片MCP2510调试记录

    CAN控制器芯片MCP2510调试记录 配置CAN内核选项 配置CAN相关的内核选项,将下面几项配置添加到defconfig中: kernel/arch/arm/configs/xxx_defconf ...

  6. Cortex-M0核芯片bootloader调试过程

    HT6025芯片(Cortex-M0核bootloader调试) 最近STM32交期太长,仪表进行国产化芯片替代,使用HT6025(钜泉光电)进行boot调试时遇到下列问题 问题1:中断向量表映射问题 ...

  7. AD7797芯片驱动调试

    今天在测试拉力传感器,调校后,发现拉力值还是零.查看AD采样值,结果如图: 先不去分析为啥是零,只看AD采样数据就不对,怎么会偏差这么大,而且有极大值和极小值. 驱动是同事写的,目前已经不负责这个项目 ...

  8. 安霸平台led芯片aw9523b调试

    公司的车载项目用到了一颗艾为的led芯片驱动16路led,下面描述一下调试过程 硬件原理图如下 aw9523 驱动采用led驱动框架,比较简单,调用内核API直接注册进led子系统可以了,下面是dts ...

  9. 安霸平台gpio扩展芯片aw9523b调试

    公司的一个车载项目由于gpio扣较少,所以用了艾为的一颗16路gpio口扩展芯片,下面描述一下调试过程 硬件原理图如下 aw9523b芯片寄存器较少,直接自己写了个简单的gpio驱动,采用gpio子系 ...

最新文章

  1. Python: translate()审查清理文本字符串
  2. 读写锁ReadWriteLock和缓存实例
  3. day19_MD5加密_Apache DBUtils_监听器 知识回顾
  4. P1083 [NOIP 2012]借教室
  5. bp神经网络pid控制_文章推荐 | BP神经网络PID控制器在无人机编队飞行中的应用...
  6. 关系代数——附加的关系运算(1)
  7. 打印某个进程下的所有线程--Linux环境
  8. Linux--生产者与消费者
  9. MR作业的提交监控、输入输出控制及特性使用
  10. mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
  11. 网络:Server returned HTTP response code: 400(url中文)
  12. mysql输入正确,但远程连接报错
  13. 10g CRS Clustware Installation安装图
  14. python实现一个QQ群聊天机器人
  15. CorelDRAWX4的VBA插件开发(二十六)深度转曲之包含容器内文字转曲
  16. Coinbase、BlockFi相继开启上市准备工作,但SEC准备好了吗?
  17. CA65测试针对的是哪些产品呢
  18. 胡喜:我是如何从菜鸟做到架构师(转)
  19. Docker 容器仓库之搭建私有仓库、hub仓库
  20. TeamViewer账号未激活问题

热门文章

  1. css 实现虚线效果的3种方式详解
  2. unix中的CUT命令全接触
  3. dev shm与oracle,【OS】Linux下/dev/shm的作用及ORA-00845错误的处理
  4. 空天地一体化通信网络中地面运营商的挑战与机遇
  5. Markdown Rreview Enhanced
  6. 川大计算机应用基础第二次作业,川大计算机应用基础第二次作业-20210331054635.docx-原创力文档...
  7. FAT32文件系统之目录项分析 (四)
  8. 计算机网络原理实验8,计算机网络原理 8个实验教案 .doc
  9. LayoutParams基本使用
  10. 针对Win10_1903版本VMware虚拟机繁忙问题的解决办法