hisi芯片gdp调试
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调试相关推荐
- 指针增量和数组的关系,指针偏移的补充,(重要面试),gdp调试,将数组中的n个元素逆序存放
1.指针增量和数组的关系 //加1 代表了地址偏移了一个类型的字节数(整形数偏移四个字节,char形数偏移了一个字节) 再来下标法: 2.指针偏移的补充 也可以换一种写法(第12行) 但是呢同样的代 ...
- 【HISI系列】之HISI芯片码率控制使用说明
DATE: 2019-1-30 参考 HISI系列文档<芯片码率控制使用说明.pdf> [Codec系列]之常用码率控制算法分析 摘要 1.CBR参数说明 2.VBR参数说明 3.宏块级码 ...
- 电池监控芯片bq34z100-g1调试
电池监控芯片bq34z100-g1调试 1.硬件 2.软件 3.参考资料 4.主要步骤 5.存在问题 1.硬件 上次做的无线板子,芯片改为bq34z100-g1,支持锂电,最大电量29Ah 6000m ...
- 海思芯片-Proc调试信息查看-视频输入输出信息-电压信息
一.Hisi芯片 海思芯片系列:hi3535.hi3536. 海思平台的内存分为两部分:os内存和mmz内存.os内存为linux系统内存:mmz内存为由mmz驱动模块管理的供媒体业务单独使用的内存. ...
- CAN控制器芯片MCP2510调试记录
CAN控制器芯片MCP2510调试记录 配置CAN内核选项 配置CAN相关的内核选项,将下面几项配置添加到defconfig中: kernel/arch/arm/configs/xxx_defconf ...
- Cortex-M0核芯片bootloader调试过程
HT6025芯片(Cortex-M0核bootloader调试) 最近STM32交期太长,仪表进行国产化芯片替代,使用HT6025(钜泉光电)进行boot调试时遇到下列问题 问题1:中断向量表映射问题 ...
- AD7797芯片驱动调试
今天在测试拉力传感器,调校后,发现拉力值还是零.查看AD采样值,结果如图: 先不去分析为啥是零,只看AD采样数据就不对,怎么会偏差这么大,而且有极大值和极小值. 驱动是同事写的,目前已经不负责这个项目 ...
- 安霸平台led芯片aw9523b调试
公司的车载项目用到了一颗艾为的led芯片驱动16路led,下面描述一下调试过程 硬件原理图如下 aw9523 驱动采用led驱动框架,比较简单,调用内核API直接注册进led子系统可以了,下面是dts ...
- 安霸平台gpio扩展芯片aw9523b调试
公司的一个车载项目由于gpio扣较少,所以用了艾为的一颗16路gpio口扩展芯片,下面描述一下调试过程 硬件原理图如下 aw9523b芯片寄存器较少,直接自己写了个简单的gpio驱动,采用gpio子系 ...
最新文章
- Python: translate()审查清理文本字符串
- 读写锁ReadWriteLock和缓存实例
- day19_MD5加密_Apache DBUtils_监听器 知识回顾
- P1083 [NOIP 2012]借教室
- bp神经网络pid控制_文章推荐 | BP神经网络PID控制器在无人机编队飞行中的应用...
- 关系代数——附加的关系运算(1)
- 打印某个进程下的所有线程--Linux环境
- Linux--生产者与消费者
- MR作业的提交监控、输入输出控制及特性使用
- mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
- 网络:Server returned HTTP response code: 400(url中文)
- mysql输入正确,但远程连接报错
- 10g CRS Clustware Installation安装图
- python实现一个QQ群聊天机器人
- CorelDRAWX4的VBA插件开发(二十六)深度转曲之包含容器内文字转曲
- Coinbase、BlockFi相继开启上市准备工作,但SEC准备好了吗?
- CA65测试针对的是哪些产品呢
- 胡喜:我是如何从菜鸟做到架构师(转)
- Docker 容器仓库之搭建私有仓库、hub仓库
- TeamViewer账号未激活问题
热门文章
- css 实现虚线效果的3种方式详解
- unix中的CUT命令全接触
- dev shm与oracle,【OS】Linux下/dev/shm的作用及ORA-00845错误的处理
- 空天地一体化通信网络中地面运营商的挑战与机遇
- Markdown Rreview Enhanced
- 川大计算机应用基础第二次作业,川大计算机应用基础第二次作业-20210331054635.docx-原创力文档...
- FAT32文件系统之目录项分析 (四)
- 计算机网络原理实验8,计算机网络原理 8个实验教案 .doc
- LayoutParams基本使用
- 针对Win10_1903版本VMware虚拟机繁忙问题的解决办法