移植ncurses库

本文使用的ncurses版本为ncurses-5.9.tar.gz

下载地址:https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz

1.将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压

tar-zxvfncurses-5.9.tar.gz

2.解压后进入到ncurses-5.9目录下

cdncurses-5.9

3.在ncurses-5.9目录下创建编译完成后生成文件位置

mkdiroutput

cdoutput

mkdirarm-linux

4.生成Makefile文件

./configure–target=arm-none-linux-gnueabi–prefix=$PWD/output/arm-linux–enable-termcap–with-shared–without-ada

l–target表示编译器的前缀,需要根据编译的不同需求进行修改

l–prefix表示编译完成后生成文件的位置

l–nable-termcap表示关键代码使用termcap(terminalcapabilities)数据库[自动检测]

l–with-shared表示动态编译

5.编译

make

当遇到如下报错时

Makefile:794:recipefortarget’../obj_s/lib_gen.o’failed

make[1]:***[../obj_s/lib_gen.o]Error1

make[1]:Leavingdirectory’…/ncurses-5.9/ncurses’

Makefile:109:recipefortarget’all’failed

make:***[all]Error2

需要进入ncurses-5.9/include文件夹,修改curses.tail文件下的如下内容,将注释/*generated*/去掉

externNCURSES_EXPORT(bool)mouse_trafo(int*,int*,bool);/*generated*/

6.安装

Makeinstall

7.安装完成后会在/output/arm-linux目录下生成库文件,我们只需将lib目录下的libncurses.so.5库拷贝至开发板

移植gdb

本文使用的gdb版本为gdb-7.12.tar.gz

下载地址:https://ftp.gnu.org/gnu/gdb/gdb-7.12.tar.gz

1.将gdb压缩包拷贝至Linux主机或使用wget命令下载并解压

tar-zxvfgdb-7.12.tar.gz

2.解压后进入到ncurses-5.9目录下

cdgdb-7.12

3.生成Makefile文件

./configure-host=arm-none-linux-gnueabiCC=/home/vanxoak/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc–enable-shared–prefix=$PWD/output/arm-linux–disable-werror–without-x–disable-gdbtk–disable-tui–without-included-regex–without-included-gettextLDFLAGS=”-L$PWD/../output/arm-linux/lib”CPPFLASS=”-I$PWD/../output/arm-linux/include”

l–host=arm-none-linux-gnueabi用arm-none-linux-gnueabi编译

lCC为交叉编译器绝对路径

l–enable-shared动态编译

lprefix=“$PWD/output/arm-linux”安装目录

l–disable-werror屏蔽werror报警

l–without-x取消xwindows支持

l–disable-gdbtk取消gdbtk

l–disable-tui取消tui界面

l–without-included-gettext去掉用于多语言处理的gettext库

l”LDFLAGS=XXX”指交叉编译完成的ncurse的lib目录路径

l”CPPFLAGS=XXX”指是交叉编译完成的ncurse的include目录路径

4.编译

make

5.安装

makeinstall

安装完成后会在…/gdb-7.12/output/arm-linux/bin/目录下生成gdb可执行程序。

移植至HDT3-EVM开发板

1.将libncurses.so.5库文件拷贝至/usr/lib目录下,若/usr目录下无lib目录可手动创建mkdirlib

2.将gdb程序拷贝至/bin目录下

测试调试

1.编写可执行测试程序,示例hello.c代码如下,该代码执行后会打印HelloWorld。

#include

intmain(intargc,char*argv[])

{

printf(“HelloWorld\n”);

return0;

}

2.使用交叉编译器进行编译,需要注意的是,要使用gdb调试程序,需要在使用交叉编译器编译源代码时加上”-g”参数保留调试信息,否则不能使用GDB进行调试且报如下最后一行所示错误:

/home#gdbhello

GNUgdb(GDB)7.12

Copyright(C)2016FreeSoftwareFoundation,Inc.

LicenseGPLv3+:GNUGPLversion3orlater

Thisisfreesoftware:youarefreetochangeandredistributeit.

ThereisNOWARRANTY,totheextentpermittedbylaw.Type”showcopying”

and”showwarranty”fordetails.

ThisGDBwasconfiguredas”arm-none-linux-gnueabi”.

Type”showconfiguration”forconfigurationdetails.

Forbugreportinginstructions,pleasesee:

.

FindtheGDBmanualandotherdocumentationresourcesonlineat:

.

Forhelp,type”help”.

Type”aproposword”tosearchforcommandsrelatedto”word”…

Readingsymbolsfromhello…(nodebuggingsymbolsfound)…done.

3.使用交叉编译器编译测试程序

arm-none-linux-gnueabi-gcc-g-ohellohello.c

4.将生成的hello文件拷贝至HDT3-EVM开发板上并使用sync命令保存

5.输入gbd命令启动gdb程序

/home#gdb

GNUgdb(GDB)7.12

Copyright(C)2016FreeSoftwareFoundation,Inc.

LicenseGPLv3+:GNUGPLversion3orlater

Thisisfreesoftware:youarefreetochangeandredistributeit.

ThereisNOWARRANTY,totheextentpermittedbylaw.Type”showcopying”

and”showwarranty”fordetails.

ThisGDBwasconfiguredas”arm-none-linux-gnueabi”.

Type”showconfiguration”forconfigurationdetails.

Forbugreportinginstructions,pleasesee:

.

FindtheGDBmanualandotherdocumentationresourcesonlineat:

.

Forhelp,type”help”.

Type”aproposword”tosearchforcommandsrelatedto”word”.

(gdb)

上述代码(gdb)为GBD内部命令引导符,表示等待用户输入gbd命令

6.使用”filehello”命令载入被调试的测试程序

(gdb)filehello

Readingsymbolsfromhello…done.

显示Readingsymbolsfromhello…done.表示被测程序加载成功

7.使用”r”命令执行调试测试程序

(gdb)r

Startingprogram:/home/hello

HelloWorld

[Inferior1(process849)exitednormally]

如上述代码显示”HelloWorld”即表示hello程序执行完成

(gdb)help

Listofclassesofcommands:

aliases–Aliasesofothercommands

breakpoints–Makingprogramstopatcertainpoints

data–Examiningdata

files–Specifyingandexaminingfiles

internals–Maintenancecommands

obscure–Obscurefeatures

running–Runningtheprogram

stack–Examiningthestack

status–Statusinquiries

support–Supportfacilities

tracepoints–Tracingofprogramexecutionwithoutstoppingtheprogram

user-defined–User-definedcommands

Type”help”followedbyaclassnameforalistofcommandsinthatclass.

Type”helpall”forthelistofallcommands.

Type”help”followedbycommandnameforfulldocumentation.

Type”aproposword”tosearchforcommandsrelatedto”word”.

Commandnameabbreviationsareallowedifunambiguous.