我要用codeblocks交叉编译和调试arm开发板上的程序,宿主机是ubuntu12.04.开发板是嵌入式linux操作系统。

1、配置交叉编译环境

由上到下,1处直接选择即可。2处是你交叉编译器安装位置,3 4 5 6 可以在你交叉编译器安装位置下的bin目录找到,arm-linux-gdb默认是不安装的,需要我们自己安装,安装arm-linux-gdb和gdbserver需要另外安装(如果没有安装的话),arm-linux-gdb安装目录最好也选择为交叉编译器安装目录。即/usr/local/arm/arm-linux-4.4.3。

2、arm-linux-gdb和gdbserver安装方法

注:arm-linux-gdb的安装路径是/usr/local/arm/arm-linux-4.4.3

arm-linux-gdb的编译安装
下载gdb-6.8.tar.bz2至工作目录

gdb源码下载:http://ftp.gnu.org/gnu/gdb/

命令如下:

$tar -jxvf gdb-6.8.tar.bz2
$cd gdb-6.8
$./configure --target=arm-linux --enable-sim --prefix=/usr/local/arm/arm-linux-4.4.3

--prefix用于指定安装路径

$make
$sudo make install
完成后可以在/usr/local/arm/arm-linux-4.4.3/bin下找到arm-linux-gdb文件
arm-linux-gdbserver的编译安装
进入./gdb/gdbserver

命令如下:

$cd gdb/gdbserver./configure --target=arm-linux --host=arm-linux
$make CC=arm-linux-gcc
(CC=arm-linux-gcc用于指定arm-linux编译器)
编译成功后在当前目录下会生成gdbserver文件,拷贝至开发板上(可放入开发板/usr/bin/目录下,这样在任何目录下均可执行gdbserver命令)

3、配置nfs文件共享。

(1)sudo apt-get install nfs-kernel-server
sudo apt-get install portmap nfs-common
Ubuntu 上默认是没有安装 Ubuntu nfs 服务器的,因此我们首先安装 Ubuntu nfs 服务器端:
$sudo apt-get install nfs-kernel-server
在一些文档中,提出还需要使用 apt-get 来手动安装 nfs 的客户端 nfs-common,以及端口映
射器 portmap,但其实这是没有必要的,因为在安装 nfs-kernel-server 时,apt 会自动为我们把它们安装好。
(2)sudo vim /etc/exports
加入这么一行:
/home/somebody/nfs_root/rootfs_mini/ *(rw,sync,no_root_squash)
(/home/somebody/nfs_root/rootfs_mini/ 是我的根文件系统所在的位置)
Ubuntu nfs 允许挂载的目录及权限在文件/etc/exports 中进行了定义。
例如,我们要将根目录下的 rootfs 目录共享出来,那么我们需要在/etc/exports 文件末尾添加
如下一行:/rootfs *(rw,sync,no_root_squash)
其中: /rootfs 是要共享的目录, *代表允许所有的网络段访问, rw 是可读写权限,sync 是资料
同步写入内存和硬盘,no_root_squash 是 Ubuntu nfs 客户端分享目录使用者的权限,如果客
户端使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限。
其它 Ubuntu nfs 常用的参数有:
ro 只读访问
rw 读写访问 sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
secure nfs 通过 1024 以下的安全 TCP/IP 端口发送
insecure nfs 通过 1024 以上的端口发送
wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)
no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置。
hide 在 nfs 共享目录中不共享其子目录
no_hide 共享 nfs 目录的子目录
subtree_check 如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。
no_all_squash 保留共享文件的 UID 和 GID(默认)
root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squas root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器/etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器/etc/passwd 文件中匿名用户的 GID
(3)

修改挂载点的属性
chmod 777 /home/somebody/nfs_root/rootfs_mini/
(4)
重启 nfs
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/portmap restart
(5)
在本机上测试
showmount -e
sudo mount -t nfs –o nolock 192.168.2.10:/home/somebody/nfs_root/rootfs_mini/ /mnt/nfs/
ls -l /mnt/nfs/
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
解决方法:kill 文件锁(lockd)或者mount -o nolock

于是尝试mount -o nolock -t nfs 192.168.1.24:/home/test /mnt/nfs,正常工作。

nfs mount device or resource busy

这是因为多次挂载的原因,因此要先umount /mnt/nfs 一下 ,如果还是挂载不成功需要重启开发板来试试。
注:可以通过一个符号链接来 export NFS 目录,但在/etc/exports 下所添加的挂载点应为真
正的目录。比如建一符号链接
ln -s /home/pub/work/freerunner/out/target/product/freerunner /home/jgyang/nfsroot 
这样在开发板上设置的内核命令行中设置的 NFS 目录就可是:/home/jgyang/nfsroot,但在
/etc/exports 文 件 中 export 出 的 目 录 应 当 是 实 际 的 NFS 所 在 的 目 录 , 即
/home/pub/work/freerunner/out/target/product/freerunner。
这样有两个好处,一是可以省去开发板中启动参数命令过长的麻烦;二是在重新编译 androi之后可以直接使用生成的 NFS,而不必再重新拷贝一份。

4、修改工程的调试属性

我通过网络来实现gdb的远程调试,这样我需要将宿主机的一个目录挂载到开发板上,这就是nfs的作用了。选择什么目录随意。挂载/home/project、目录到开发板的/gdbserver目录下。然后再宿主机/home/project/目录下建立工程,修改项目调试属性。

点击项目右键,点击属性。

修改debug的ip地址和端口,端口任意,但是ip地址是开发板的ip地址。这是为了连接开发板的gdbserver而设置的。

这样设置就基本完成了。可以开始调试了。

5、调试示例

前边我们已经将gdbserver拷贝到/usr/bin目录下。所以我们进入挂载目录/gdbserver运行

gdbserver 192.168.0.232:1111 ./bin/debug/usb 这里ip地址是宿主机的,端口自定,但是要和codeblock一样。./bin/debug/usb 是指生成的二进制可调试文件。

然后再宿主机开始调试吧,如下图

codeblocks 配置交叉编译和调试环境的更多相关文章

  1. vs code配置c/c++调试环境+mingw+windows

    目录 1.安装codeblocks 2.配置mingw环境变量 3.配置.vscode文件夹的json文件 ref 1.安装codeblocks 我已经安装过vscode和c++扩展插件,现在需要g+ ...

  2. 使用 VSCode 在 Mac 上配置 C/C++ 调试环境

    Background VSCode是微软开发的一款开源代码编辑器,具有可拓展性强,多语言支持,跨平台等优点,在不同的个性化配置下几乎可以用作所有的轻量级开发.我在初学C的时候也使用的是类似于Xcode ...

  3. vs code配置c/c++调试环境+mingw+win10

    参考博客:https://blog.csdn.net/bat67/article/details/76095813 下载VScode和mingw和环境变量的配置 请参考上述的博客 附上我的task.j ...

  4. Windows下安装配置MinGW GCC调试环境

    下载安装文件:Sourceforge  64位系统安装选项记得选x86_64.安装过程中连不上服务器的话也可以选择下载压缩包. 配置环境变量,假设mingw安装目录为C:\mingw-w64\ming ...

  5. Python测试进阶——(2)配置PyCharm远程调试环境

    新建一个Python项目 配置Deployment,用于本地文件和远程文件的同步,在pycharm的菜单栏依次找到:Tools > Deployment > Configuration 点 ...

  6. ubuntu QT安装以及配置交叉编译环境

    我的环境:ubuntu14.04  64位 1.下载Qt: 上网搜索 qt-opensource-linux-x64-5.3.0.run下载有好多百度云盘 要么在官网下载追新版本http://down ...

  7. 在Mac系统上配置Android真机调试环境

    在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...

  8. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  9. golang在Windows下Sublime Text开发调试环境的配置

    一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...

随机推荐

  1. Apache DbUtils - JDBC轻量级封装的工具包

    前段时间使用了Apache Common DbUtils这个工具,在此留个印,以备不时查看.大家都知道现在市面上的数据库访问层的框架很多,当然很多都是包含了OR-Mapping工作步骤的例如大家常用的 ...

  2. grep经常使用使用方法

    grep简单介绍 正如linux的man文件里所描写叙述的那样: grep searches the named input FILEs (or standard input if no files ...

  3. android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

    最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两 ...

  4. 【JavaScript】JavaScript的Function与Object浅析

    前言: JavaScript的面向对象是基于原形的,所有对象都有一条属于自己的原型链.Object与Function可能很多看Object instanceof Function , Function ...

  5. Ambari源代码分析之总览

    一.基本概念: Resource:Ambari把能够被管理的资源的抽象为一个Resource实例,资源能够包括服务.组件.主机节点等,一个resource实例中包括了一系列该资源的属性: Proper ...

  6. Python中的注释(转)

    一.单行注释     单行注释以#开头,例如:     print 6 #输出6 二.多行注释     (Python的注释只有针对于单行的注释(用#),这是一种变通的方法)      多行注释用三引 ...

  7. cocos2d-x游戏是怎么跑起来的

    虽然cocos2d-x v3.0 alpha版已经出来了,也改进了不少,有兴趣的可以去尝尝鲜.因为后面可能还会配合cocoStudio写一下博客,而现在v1.0.0.0版本需要配合cocos2d-x ...

  8. 剑指 offer set 4 矩形覆盖

    总结 1. 斐波那契数列的变形题, 但是稍有隐晦, 有点意思 2. 求解 f(3) 时, 最后一块矩形可以竖着放, 也可以两块矩形横着放, 分别对应于 f(2) 和 f(1) ------------ ...

  9. C++中String类的实现

    原文:http://noalgo.info/382.html String是C++中的重要类型,程序员在C++面试中经常会遇到关于String的细节问题,甚至要求当场实现这个类.只是由于时间关系,可能 ...

  10. C# 代码生成工具 Millennials

    Millennials 是一个可定制的 C# 代码生成工具,支持 MVC 和三层架构.ADO.NET.Nhibernate 和 LINQ. 项目主页:http://www.open-open.com/ ...