Ubuntu16.04自动交叉编译ARM平台gdb和ncurse

编译环境:

Ubuntu16.04 + gdb-7.9.1.tar.gz + ncurses-6.0.tar.gz

传统的gdb调试是GDB+gdbserver,对于大型的嵌入式程序来说,这种方法效率过低,特别是追踪低概率的段错误时。并且对调试环境较高,有时候程序在客户手里或者测试部,不可能要求他们都装上同样开发环境等等。

我们要做的只需要把gdb和执行程序拷贝到U盘,然后从U盘运行执行程序,挂机等待。问题复现时会有core文件产生,此时我们直接运行./gdb app core, 随后输入bt即可查看函数调用关系和死机位置,也可以进行其他的gdb命令操作,非常方便。

编写的Makefile可实现自动编译安装ncurese和gdb,只需修改这两个变量,根据你编译器和编译选项填入即可:

OSDRV_CROSS ?= arm-linux-gnueabihf

OSDRV_CROSS_CFLAGS ?= -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp

然后执行make命令,如果提示某些命令找不到,请检查或安装即可,编译好后会生成一个gdb-xxx的执行文件,拷贝到你板子上直接运行即可。

Makefile主要命令讲解:

TOOLS_TOP_DIR := $(shell pwd)
#如果是其他版本,请修改TOOL_TAR_BALL和TOOL_TAR_BALL2,使其对应具体的程序包
TOOL_TAR_BALL := gdb-7.9.1.tar.gz
TOOL_TAR_BALL2 := ncurses-6.0.tar.gz
TOOL_NAME := gdb-7.9.1
TOOL_NAME2 := ncurses-6.0
TOOL_BIN := ncur_release
TOOL_BIN2 := gdb_release
#填入你要交叉的编译器和编译参数
OSDRV_CROSS ?= arm-linux-gnueabihf
#OSDRV_CROSS_CFLAGS ?= -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
all:
 -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME) -rf;
 -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME2) -rf;
 #解压压缩包
 tar -xf $(TOOL_TAR_BALL2);
 #创建安装目录、配置、编译、安装
 mkdir -p $(TOOLS_TOP_DIR)/$(TOOL_BIN)/;
 pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/; \
  ./configure --host=$(OSDRV_CROSS) CFLAGS="$(OSDRV_CROSS_CFLAGS)" CPPFLAGS="-P" \
  LDFLAGS="$(OSDRV_CROSS_CFLAGS)" --prefix=$(TOOLS_TOP_DIR)/$(TOOL_BIN)/; \
  make -j > /dev/null; \
  make install;\
   ……
   ……

完整的压缩包和Makefile可以从这下载:https://download.csdn.net/download/weixin_44155325/11191082

如果需要编译其他版本,下载地址如下,并修改一下Makefile对应的文件名称即可,非常简单。
ncurses下载地址:http://linux.softpedia.com/get/Programming/Libraries/Ncurses-6097.shtml#download
gdb下载地址:http://ftp.gnu.org/gnu/gdb/

你可能感兴趣的:(嵌入式)