linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)
当我们开发嵌入式系统下的Qt应用程序时,有时候不能在虚拟机上进行调试,这时候我们需要通过远程调试的方式在PC上调试嵌入式系统下的Qt应用程序。这样就产生了交叉调试。
本文环境介绍:
虚拟机:vmware8.0.4 build-744019
Linux操作系统:Red Hat Enterprise Linux5
交叉编译工具:arm-linux-gcc
目标板:mini6410(友善提供),已移植Qt4.7
Qt Creator版本:qt creator-1.3.0
Qt版本:qt-everywhere-opensource-src-4.7.0
一、设置NFS共享
交叉调试的前提需要设置NFS共享,在上位机下配置NFS服务,建立NFS共享目录。
1、PC机下开启NFS服务
[root@localhost home]# service nfs restart
2、设置共享目录
[root@localhost home]# vim /etc/exports
打开exports文件后,添加如下内容:
/home/NFS *(rw,sync,no_root_squash)
保存退出。
说明一下,上面的含义为:/home/NFS 表示我的共享目录,* 表示任意的开发板的ip地址,rw表示可读写,sync表示同步,no_root_squash表示有root权限。
接下来使用如下命令使共享目录生效:
[root@localhost home]# exportfs -ra
不信看看:
[root@localhost home]# exportfs -v
是不是出现了:/home/NFS (rw,wdelay,no_root_squash,no_subtree_check),这样就设置成功了共享目录。
3、交叉编译gdb(前提你的系统已经安装了交叉编译工具链)
下载一个gdb源码包(我的为:gdb-7.0a.tar.bz2),下载地址:在虚拟机下解压并编译:
[root@localhost toolchain]# tar jxvf gdb-7.0a.tar.bz2
解压后进入其目录,然后
[root@localhost gdb-7.0]# ./configure --target=arm-linux -prefix=/opt/gdb7.0_arm
-prefix=/opt/toolchain表示安装在/opt/gdb7.0_arm这个目录下。
[root@localhost gdb-7.0]# make
[root@localhost gdb-7.0]# make install
这样就安装成功了,瞧瞧/opt/gdb7.0_arm中有bin、share、lib目录,进入bin目录可以发现发现:
修改环境变量:
在/etc/profile内添加新生成的bin文件的路径,如
export PATH=/opt/gdb7.0_arm/bin:$PATH
并设置生效:source /etc/profile
4.交叉编译gdbserver
进入/opt/gdb-7.0/gdb/目录下,可以看到有个gdbserver目录,进入这个目录,交叉编译和安装:
$./configure --target=arm-linux --host=arm-linux
$make
这样gdbserver就安装成功了,在此目录下会生成可执行文件gdbserver,将其拷贝至共享目录/home/NFS。
5.拷贝libthread库至共享目录
交叉编译工具链里有一个动态链接库文件libthread_db-1.0.so,将其拷贝到/home/NFS/lib中(先在共享目录下建立lib目录),建立符号链接:
$ln -s libthread_db-1.0.so libthread_db.so
$ln -s libthread_db-1.0.so libthread_db.so.1
在目标板开始mount之前先将此库文件加入目标板/etc/profile的库文件搜索路径LD_LIBRARY_PATH上。
三、目标板上mount共享目录
1.连接好开发板,设置好网络(开发板IP:192.168.1.88,Linux系统IP :192.168.1.114,具体地址根据实际情况设定)
2.目标板下执行:
$mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.114:/home/NFS /mnt
mount上后,你可以在目标板/mnt目录下看到共享文件夹NFS,里面的内容和Linux系统上的一样。
四、交叉调试
1.配置工程
打开Linux系统下的Qt Creator,进入Tools->options->Debugger,进行如图所示的配置。
将要调试的工程(比如说hello)拷贝到共享目录NFS下,在Qt Creator内打开,在左侧projects栏选择Build configuration for hello为arm模式的Debug(我的是qt_4.7_arm Debug),Edit Build Configuration进行同样配置。
2.启用gdbserver
将gdbserver拷贝至目标板/usr/sbin/目录下,进入/mnt/hello/目录,执行
$gdbserver 192.168.1.114:6666 hello -qws &
在终端显示运行结果为
$Process hello created; pid = 797
Listening on port 6666
6666为通信端口号,自己设,大于1024便可,其中pid每个人都会有所不同。
3.开始交叉调试
在Qt Creator菜单栏点击Debug->Start Debugging->Start and Attach to Remote Application,出现如图所示界面,按图进行配置。
192.168.1.88是目标板的IP地址,端口号6666,arm为i386架构。点击OK,终端出现
Remote debugging from host 192.168.1.114,表示可进行交叉调试了。
linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)相关推荐
- linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...
- U盘刻录linux系统后在windows下无法识别完整容量
U盘刻录linux系统后在windows下无法识别完整容量 问题描述: 将linux系统刻录进U盘,会导致原本比如16G的U盘在windows上只能显示2m左右的容量. 这实际上是因为windows系 ...
- imx6ull移植Linux系统第二篇——Linux内核的移植
imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...
- linux系统下载经验,linux系统的学习经验首篇
1.linux打开terminal,两种最简单的办法,第一种,直接Ctrl+Alt+T:第二种,Alt+F2,输入gnome-terminal:更复杂的不建议使用. 2.linux没有盘符的概念,只有 ...
- 连接linux系统的mysql,Linux系统MySQL开启远程连接
1.远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库.登陆数据库.mysql -uroot -p(密码). 2.创建用户用来远程连接 GRANT ALL PRIVILEGES ...
- Alpine linux 小内存版,Alpine Linux系统-Alpine Linux系统【轻量级Linux】下载v3.11.0 最新版-西西软件下载...
Alpine Linux系统[轻量级Linux],Alpine Linux其实就是一个清凉版的Linux系统,通过牺牲一些不常用的功能和特性来达到更加轻巧的体积以及更快的响应速度.Alpine Lin ...
- linux系统清理内存,Linux实验室:五个清理磁盘空间小妙招
1删除安装包:清空系统APT缓存 玩儿电脑最怕的就是卡慢,那么电脑卡慢应该怎么解决呢?对于windows系统来说,你可能有各种免费的杀毒软件.全家桶帮你清空系统空间,那么Linux系统怎么办?今天笔者 ...
- linux系统的笔记本,Linux:开源的免费操作系统_笔记本电脑_笔记本评测-中关村在线...
■linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议 ...
- Linux系统之部署Linux管理面板1Panel
Linux系统之部署Linux管理面板1Panel 一.1Panel介绍 1.1Panel简介 2.1Panel特点 二.本地环境规划 1.本此实践目的 2.本地环境规划 三.检查本地环境 1.检查操 ...
最新文章
- 2021年1月20日 北京经纬恒润科技有限公司一面
- 开发日记-20190802 关键词 闲聊
- 机器学习笔记: Discriminative vs Generative Models
- 论文Very Deep Convolutional Networks for Large-Scale Image Recognition
- touch: cannot touch /usr/local/tomcat/logs/catalina.out: Permission denied解决方法
- PHP读写操作Excel
- 深入学习jQuery的三种常见动画效果
- php html 停止工作,换行符php和html无法正常工作
- Java安全 – JCE (Blowfish算法报错)
- 2019年1月《语音信号处理》期末考试
- 基于单片机的电池管理系统
- 非root用户安装或升级CUDA和CUDNN版本
- Unbuntu22.04安装教程以及Unbuntu下C++环境的配置
- 第一性原理 《禅与计算机程序设计艺术》 / 陈光剑
- Nexus搭建Maven私服全攻略一:认识Nexus与索引
- Lua -- 重写pairs方法(让字典访问有序)
- prometheus对接influxdb
- 在 Excel 中查询每个区间并排序
- ZOJ 3898 Stean (求旋转体体积与面积)
- 《编程之美》读书笔记(三):烙饼问题与搜索树
热门文章
- SAP云平台和SAP HANA Enterprise Cloud(HEC)的区别
- jMeter 线程启动时间
- intx update task - IB_IBINTX_UPDATE
- WordPress同Kyma成功建立连接后,存放在mysql里的Kyma entry
- performance improvement in Distribution chain scenario
- Some exceptional case in WebUI Component Repository Information System Design
- 005. how is RFC to backend determined - maintenance view IWFNDV_MGDEAM
- ABAP function group和Tomcat library重复加载问题
- jmeter(三)参数化
- py获取前端的参数_微前端 qiankun 项目实践